(二) 指令與觸發事件
接續上一篇 基礎bot.py
今天要來教各位簡單的指令和條件觸發
今日的內容寫在前一篇介紹的兩個區塊中間喔
指令
首先是非常基礎的結構
1 |
|
這裡仔細介紹一下各部分
@bot.command()
使用裝飾器的方式登錄此函式為一個可呼叫的指令
凡是文字指令前面都需要加此裝飾器async def command()
此處為函式定義,函式名稱即為指令名稱
以此段程式為例,到時候可用>command
呼叫ctx
每一個指令函式都必須有此參數
Discord會使用此參數傳入包含該指令被呼叫時的所有資訊組成的物件
其本體為discord.ext.commands.Context
如:ctx.channel
= 發送該指令的頻道物件ctx.author
= 發送該指令的使用者物件ctx.send()
= 可呼叫的方法,在該頻道發送訊息
可至機器人Context的文檔查看所有屬性
若有需要可指定ctx:commands.Context
以獲取編輯器的自動建議內容arg
不限定每一個指令必有此參數
可指定指令接收參數,名稱可自取,數量不限,也可接受*arg
和**kwarg
,此教學以arg為範例
應用: 回傳Hi
1 |
|
機器人回復
1 | Hi, (user) |
如果需要提及使用者可以換成ctx.author.mention
應用: 機器人代替你說話
1 |
|
文字指令可被視為一則訊息
令機器人刪除原訊息後再次發送
可達到機器人代替你說話的效果
觸發條件
1 |
|
- `@bot.event
使用裝飾器的方式登錄此函式為需要呼叫的條件
不同於指令,此裝飾器不需要加()
凡是觸發條件前面都需要加此裝飾器
觸發條件有特定的函式,不可像指令一樣自訂
每個函式有自己的參數,可參閱事件的文檔取得全部可用的觸發條件和參數
此處作為範例的on_ready
沒有參數,會在機器人啟動時被呼叫
如此就可在機器人做好準備啟動時在終端印出 Bot is ready
應用: 歡迎訊息
on_member_join
會在有人加入伺服器時被呼叫
1 |
|
應用: 關鍵字觸發
on_message
會在有訊息被發送時呼叫
也有人用這個方式做指令
不是不行,只是維護上比較不方便,而且不好處理參數;從可以直接取用,變成需要用split分開參數,也難處理*arg
1 |
|