[Day 06] 觸發條件 (一):事件
接下來這幾天,會介紹各種 Discord BOT 可以設定的觸發條件。
進度
Discord BOT 的執行腳本可以分成兩個部分:觸發條件與執行內容。觸發條件有很多種,其中,最常見的就是「事件」,也就是今天的主題。
這個分類方式是我自己定義的
事件 (Event)
事件指的是「某個在 Discord 發生的特定情況」,我們可以設定要監聽 (listen) 的事件,一旦那個情況出現,就可以觸發我們設定的腳本。
其實在前幾天的 Quickstart 範例程式中已經有出現過它的蹤跡:on_ready
與 on_message
。而他們所對應的特定情況是:
on_ready
:Discord BOT (也就是Client
) 完成準備的時候on_message
:當一個訊息被建立並送出的時候
事件種類非常多,在 discord.py 的 API 文件中有完整列出所有可以被監聽的「事件」,以及該事件所需要的 intents
設定。
如何設定監聽事件
一共有兩種方法可以設定監聽事件:
- 使用
@event
- 繼承
Client
class 並 override 特定的事件
方法一:@event
使用方法也很簡單,只要使用對應的事件名稱當函數名稱,就可以進行設定:
1 | import discord |
方法二:繼承 Client
並 override
1 | import discord |
常見的事件
前面有提到,事件種類非常多,因此這邊列幾個我覺得比較常見或重要的事件。
閘道 (Gateway)
- 準備完成
on_ready()
這個通常是用來確認是否啟動完成而已,有需要的話可以記錄在日誌 (log) 中。
成員 (Members)
- 新增成員
on_member_join(member)
member
:加入的成員
這個常應用於「發送歡迎訊息」的功能。當有新的成員加入時,可以自動發送歡迎訊息、伺服器守則等資訊 (發在頻道內或是私人訊息)。
訊息 (Messages)
- 傳送訊息
on_message(message)
message
:傳送的訊息
- 編輯訊息
on_message_edit(before, after)
before
:原本的訊息after
:新的訊息
- 刪除訊息
on_message_delete(message)
message
:被刪除的訊息
on_message
算是最常用的事件了,只要設定好關鍵字,用戶就可以依據需求選擇對應的關鍵字來觸發想要的功能。除此之外,也還有很多種應用,像是:
- 經驗值系統 (透過在頻道發送訊息來獲取經驗值)
支語警察
反應 (Reactions)
這邊指的反應是按下表情符號
on_reaction_add(reaction, user)
reaction
:增加的反應user
:做這件事的用戶
這個最常用在「自助領取身分組」的功能。使用者按下表情符號進行回應後,Discord BOT 就可以知道:
- 要增加的身分組是什麼 (根據
reaction
) - 要幫哪個用戶增加身分組 (根據
user
)
附帶一提,可以用
reaction.message
取得「被反應」的訊息
簡單的範例
最後,讓我們來簡單示範一下幾個事件的用法。
總覺得文章中沒有 Demo 的話怪怪的
1 | # day06.py |
這段程式是從 Quickstart 範例程式改的,除了加上了 on_message_edit
與 on_reaction_add
之外,也補上了 type hint,這樣在開發上比較方便~
首先是最基本的 ping pong 回應:
接下來,對剛剛的 ping 訊息按下表情符號:
最後,編輯 ping 訊息:
小結
今天介紹了 Discord BOT 觸發條件中的最常見的「事件」,並簡單的 Demo 了使用方法。明天會繼續介紹其他的觸發條件~