今天我們要來把我們的程式碼利用cog來歸類一下,首先我們需要在main.py的同層建立一下資料夾cmds,以及建立一個一個classes.py來放置每一個class都會用到的__init__
discordbot
│
├── main.py # 主機器人檔案
├── classes.py # 用於繼承class
└── cmds # cmds 資料夾
├── event.py # event.py 檔案
├── test.py # test.py 檔案
└── load.py # load.py 檔案
這個檔案的用途就是可以讓其他檔案都繼承他,可以精簡我們的程式碼
import discord
from discord.ext import commands
class Cog_Extension(commands.Cog):
def __init__(self,bot):
self.bot = bot
cmds # cmds 資料夾
└── test.py # test.py 檔案
├──test # 這些是function
├──ping
└──picture
import discord
from discord.ext import commands
from classes import Cog_Extension # 引入calsses用來繼承
class TEST(Cog_Extension):# 繼承classes內的Cog_Extension
# @bot.command()
# async def ping(ctx):
# await ctx.send(f'{round(bot.latency*1000)}ms')
@commands.command()
async def ping(self, ctx):
await ctx.send(f'{round(self.bot.latency*1000)}ms')
@commands.command()
async def test(self, ctx):
await ctx.send("Hi")
@commands.command()
async def picture(self, ctx):
pic=discord.File('C:\\Users\\OUOQUQ\\Desktop\\webcrawler\\images\\明君旅棧\\住宿相片集4.jpg')
await ctx.send(file=pic)
async def setup(bot):
await bot.add_cog(TEST(bot))
在第8-10行可以看到是我們原本在main.py內的寫法,但是因為我們繼承了Cog_Extension,所以我們必須改寫成@commands.command(),還有每個function內都必須使用到self,最後原本的bot.latency也要改寫成self.bot.latency,每一個function的寫法都要改變
import os
@bot.event
async def on_ready():
print('bot is ready')
#在bot剛啟動時讀取所有檔案
for filename in os.listdir("./cmds"): # 移動到cmds的資料夾內
if filename.endswith(".py"): # 找出所有結尾是.py的檔案
await bot.load_extension(f"cmds.{filename[:-3]}")
# 讀取.py之前的檔案名稱
這樣的檔案讀取及分類方式,可以讓我們的程式碼可讀性更高,並且方便我們日後維護bot時容易找出錯誤在哪
明天就來講講load的三個用法吧