什麼是指令

指令就是在聊天欄輸入一串文字,透過特定開頭與後面的參數來執行動作
可想像在呼叫函式:

在聊天室輸入>hi jack
相當於

1
2
3
4
def hi(name):
# 一串動作

hi("jack")

指令前綴

由前一小節的例子可看出,指令前綴為>
此部分由上周創建機器人時所設定,可自行更改
初始慣例用! ,此處是我的習慣

基本指令

此處想做到的是

輸入>hi Jack
機器人會回你「Hello, Jack」

1
2
3
@bot.command()
async def hi(ctx:commands.Context, name):
await ctx.send(f"Hello, {name}")

內容講解

@bot.command()

此語法稱為**裝飾器,**是Python的特殊語法,用途是將裝飾的對象做特殊更改
此概念較複雜,目前不需理解

只須知道此處的@bot.command() 會執行此函式,告知機器人這個函式註冊成為可以使用的指令

async def hi(ctx:commands.Context, name)

此處定義函式的方法可參考異步函式

ctx的意思是Context上下文,當等待I/O操作跳離協程時,會把目前執行到哪裡的內容存進去
在此處的context為一個物件,類別是commands.Context ,裡面儲存了這個指令被呼叫的所有資訊
包含頻道、伺服器、誰傳的、正在處理這個指令的機器人等等,可供我們進行下一步應用

冒號的意思是代表標註這個參數應該是什麼類別的,此處代表這個參數被標註成commands.Context

name 就與一般的函式參數一樣

await ctx.send()

如上周教的內容,這是一個等待的時候可以跳離的動作
剛剛提到ctx 是一個物件,而send 是其中的一個方法,可以在發送的那個頻道傳送訊息

意即可以以此方法與使用者對話