事件處理
事件在做什麼
各種條件觸發,比如機器人上線、有人傳訊息、有人編輯訊息、頻道名稱被管理員更新等,成為事件
而這些事件是可以被機器人持續追蹤的,當這些事件發生時,如果機器人有對應的函式,就會呼叫函式並傳入參數,讓我們做處理
基本語法
1 | # 這裡不用() |
@bot.event
事件的裝飾器長這樣,要特別注意不用括號async def on_ready()
此處函式名稱比較特殊,是固定的,不像指令可以自己取名字;名字由事件決定,此處的事件是「機器人上線時」
而函式接受什麼參數也由套件預設決定
也就是說,我們可以自己定義的只有動作的部分
機器人上線
1 |
|
如上一段提到的,這個事件是機器人上線時會觸發
上線時在控制台印出文字
其中bot.user
在機器人上線時會被設定在bot物件內,是這個程式登入到的機器人
如果今天把token改成其他機器人的,這個值就會改成其他機器人
結果應該會印出Logged in as (你的機器人)
關鍵字訊息
1 |
|
此處事件on_message
是在有任何訊息被傳送的時候會觸發,並且傳入該訊息的相關資料物件讓我們取用
msg物件有content屬性,代表訊息的文字部分,而我們用if判斷「哈哈」是否在裡面,如果有的話就傳「嘻嘻」
此處ctx.send
,是因為傳入的參數是訊息不是上下文,沒有直接提供send方法,而頻道物件有提供這個方法,所以我們取用msg的channel,再傳送訊息
機器人會重複判斷自身送出的訊息,所以在前面可以加上以下內容
1 | if msg.author.bot: |
msg.author是一個物件,儲存了發訊息人的資料
其中有個屬性為bot
,如果該使用者是機器人就會是True
注意,此功能不能和基礎指令混用,只能與應用程式指令混用
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Discord 機器人教學!