Cog擴充
Cog是Discord機器人的模組
可以像Python一樣將不同功能分開管理
最後引入機器人內即可完成
也可以做到群組指令
主檔案bot.py
首先,在根目錄建立一個資料夾用來存放cog檔案,此處以cogs
為例
先引入os
模組,接著在main()
函數上方貼上以下內容(非常重要,一定要在main()
前面):
1 | async def load_ext(): |
這個函數會遍歷一次cogs資料夾的內容,並且當檔案是python檔時就用bot.load_extension()
載入
關於os.listdir()
可以參考送出圖片
最後在main()
函數內呼叫此函數:
1 | async def main(): |
這樣在啟動時,機器人會載入cogs資料夾內的檔案
Cog檔案
類別
Cog的本質上是一個類別衍伸出來的物件
所以主要以物件寫法為主,可參考類別
首先需引入以下三個模組,與主檔案相同
1 | import discord |
接著定義一個類別,並繼承commands.Cog
初始化函數只需要bot
1 | class MyCog(commands.Cog): |
接著,可以把指令與事件放進類別的方法內
但需注意:
@bot.tree.command()
替換成@app_commands.command()
@bot.event
替換成@commands.Cog.lisener()
- 由於是類別中的方法,參數一律需有
self
self
主要在實作中的用處是存取需要用bot
的地方,改用self.bot
因為這個檔案內並沒有定義bot
是什麼,但Cog類別內有定義
轉換範例
以下是原本寫法轉換至Cog的範例
使用API與機器人實作的範例程式
1 | # 原始寫法 |
1 | # Cog內 |
結尾
跳出類別的縮排,在整個檔案的結尾加上以下這串
1 | async def setup(bot): |
此動作呼叫bot.add_cog()
函數,並且傳入了一個由剛剛寫的類別衍生出來的物件,並且填入了bot
此處會由主檔案的bot
處理,將自身提供給這個物件,這樣在物件內使用self.bot
的時候,存取的就是正在運行的bot
了
注意事項
- 如果需使用模組,import請在cog檔案內而不是主檔案內
- 單一類別裡面可以存放多個方法,以此可以在同一個檔案內存放相同分類的指令
- 主檔案內的指令可以與cog同時存在並混用
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Discord 機器人教學!