簡體   English   中英

在 discord.py 上重新加載齒輪

[英]reload cogs on discord.py

我嘗試使用齒輪制作 discord 機器人,每次更改代碼時我都不需要重新啟動機器人。 我已經這樣做了:

from Bot import bot
from checks import check_if_me
from cogs.tracking import Tracking
from discord.ext import commands

token = ''

@bot.event
async def on_ready():
    bot.add_cog(Tracking(bot))
    print(f'ready {bot.latency}')


@bot.command(name='reload')
@commands.check(check_if_me)
async def reload_cog(ctx):
    bot.remove_cog('Tracking')
    bot.add_cog(Tracking(bot))




bot.run(token)

但它只是加載相同的齒輪而不是新的。

為此,您需要實際重新加載擴展而不是 class cog。 擴展名是指整個文件。

Discord.py 允許您使用bot.load_extension加載擴展,以避免用戶手動導入 cog。

您可以通過在 cog 文件中定義 setup() function 來執行此操作,這將接收Bot實例供您添加 cog。 之后,您可以在主文件中使用bot.load_extension並使用bot.reload_extension來解決您當前的問題。

例子:

齒輪\tracking.py

import discord
from discord.ext import commands

class Tracking(commands.Cog):
    def __init__(self, bot):
        self.bot = bot # This is so you can access Bot instance in your cog

# You must have this function for `bot.load_extension` to call
def setup(bot):
    bot.add_cog(Tracking(bot))

\main.py

import discord
from discord.ext import commands

bot = commands.Bot(...)
# "cogs.tracking" refers to "cogs\tracking.py" file
bot.load_extension("cogs.tracking")

# A command to call the reload
@bot.command()
async def reload(ctx):
    # Reloads the file, thus updating the Cog class.
    bot.reload_extension("cogs.tracking")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM