–
3. 安裝和設定 Google Colab 環境
- 前往 Google Colab
- 建立新的 Notebook:點擊「New Notebook」創建一個新的 Python Notebook。
- 安裝必要套件:
!pip install discord.py
4. 編寫並執行 Bot 程式碼
地震機器人
輸入格式:
* 查詢地震:&地震
* 快速測試:1 #直接顯示最新地震資訊
氣象局金鑰取得網站:https://opendata.cwa.gov.tw/index
import requests
import discord
import nest_asyncio
import asyncio
# 允許 Google Colab 運行 asyncio 事件循環
nest_asyncio.apply()
# 定義查詢地震資訊的函數
def earth_quake():
result = []
code = '氣象局取得的金鑰'
try:
# 小區域地震資料查詢網址
url = f'https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0016-001?Authorization={code}'
req1 = requests.get(url)
data1 = req1.json()
eq1 = data1['records']['Earthquake'][0]
t1 = eq1['EarthquakeInfo']['OriginTime']
# 顯著有感地震資料查詢網址
url2 = f'https://opendata.cwa.gov.tw/api/v1/rest/datastore/E-A0015-001?Authorization={code}'
req2 = requests.get(url2)
data2 = req2.json()
eq2 = data2['records']['Earthquake'][0]
t2 = eq2['EarthquakeInfo']['OriginTime']
result = [eq1['ReportContent'], eq1['ReportImageURI']]
if t2 > t1:
result = [eq2['ReportContent'], eq2['ReportImageURI']]
except Exception as e:
print(e)
result = ['抓取失敗...', '']
return result
# 設定 Discord Bot
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# 定義事件函數
@client.event
async def on_ready():
print('目前登入身份:', client.user)
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('&'):
# 查詢地震資訊
if message.content.startswith('&地震'):
earthquake_info = earth_quake()
await message.channel.send(earthquake_info[0])
if earthquake_info[1]:
await message.channel.send(earthquake_info[1])
# 說明指令
elif '說明' in message.content:
await message.channel.send(
'輸入格式:\n1. 查詢地震:&地震\n'
'2. 快速測試:1 #直接顯示最新地震資訊'
)
# 測試指令:快速顯示地震資訊
if message.content == '1':
earthquake_info = earth_quake()
await message.channel.send(f"地震資訊:\n{earthquake_info[0]}")
if earthquake_info[1]:
await message.channel.send(earthquake_info[1])
# 啟動 Bot
async def start_bot():
await client.start('輸入你自己的 Discord 金鑰')
# 啟動 asyncio 事件循環並執行 Bot
try:
asyncio.run(start_bot())
except RuntimeError:
loop = asyncio.get_event_loop()
loop.run_until_complete(start_bot())