[Day 08] 觸發條件 (三):指令 ── message command 與 user command
今天接著繼續介紹指令:訊息指令與用戶指令。
進度
訊息指令與用戶指令的概念差不多,就決定合併一起介紹了。
什麼是訊息指令 (message command)?
訊息指令,顧名思義,就是作用在訊息的指令。使用方式很簡單,只要在訊息上面按滑鼠右鍵,就會看到「應用程式」的選單,再選擇要使用的指令即可。(沒有預設指令)
什麼是用戶指令 (user command)?
同理,用戶指令就是作用在用戶上的指令,一樣是對著用戶按下滑鼠右鍵,再進入「應用程式」選單選擇要使用的指令。(同樣沒有預設指令)
對自己:
對其他伺服器成員:
第一個訊息指令與用戶指令
這兩種指令的撰寫方式非常相似,就一起介紹了。(範例程式簡化自 Github 上的範例)
1 | # day08.py |
與之前的 Quickstart (Day 04) 一樣,可以大致上把這段程式分成三個階段:
- 建立 Client
- 設定 Client
- 啟用 Client
今天的重點在第二階段的兩個函數:show_join_date
與 report_message
。其中,show_join_date
是用戶指令,而 report_message
是訊息指令。
這兩個函數的寫法非常接近,有以下幾點注意事項:
- 都是使用
context_menu
。其中,name
不是必要參數,但如果不填的話就會直接使用函數名作為訊息指令或是用戶指令的名稱。 - 函數需要有「剛好」兩個參數,第一個一定是
interaction
。 - 函數的第二個參數一定要加上 type hint (用來指定是訊息指令或是用戶指令)。
type hint 只能是以下這幾個其中一個:
discord.Message
,discord.User
,discord.Member
, 或是 「discord.Member
|discord.User
」
測試
訊息指令
啟動後,就可以看到原本空的選單已經有剛剛建立的訊息指令了
執行結果:
用戶指令
用戶指令的選單也有更新
執行結果:
小結
今天把剩下的兩個指令:訊息指令 (message command) 和用戶指令 (user command) 都介紹完了,明天會介紹指令的其他細節,並補上之前 slash command 沒有介紹完的內容。
明後兩天都在高雄參加 PyCon,好期待啊!