加载 cog 时执行函数

Posted

技术标签:

【中文标题】加载 cog 时执行函数【英文标题】:executing a function when a cog is loaded 【发布时间】:2021-10-26 22:39:38 【问题描述】:

我一直在寻找一种方法来使 cog 在加载/重新加载时与 cog 一起执行一个函数,但我发现没有这样的函数或有人在谈论它, 所以我想出了 INGENIOUS 尝试使用字符串来调用 cog 中的函数的想法。

我尝试了几件事,主要是 evalgetattr 的组合,但我没有成功获得工作代码,因为......大脑太smol了。

希望这会清楚我想要做什么:

齿轮test.py

class test(commands.Cog):

    @commands.command()
    async def testReload(self, ctx):
        # do stuff

这是main.py中的重载功能

import cogs

@bot.command()
async def reload(ctx, extension):
    bot.reload_extension(f'cogs.extension')
    await ctx.send(f'reloaded extension')
    # cogs.(extension).(extension)Reload # something like this

【问题讨论】:

【参考方案1】:

由于 Discord Cog 是一个类,因此可以调用 __init__ 方法,该方法将在初始化时执行。我有一个类似的设置,每当加载/重新加载 Cog 时,都会执行一组指令。

示例代码(基于您的示例):

from discord.ext import commands

class test(commands.Cog):

    def __init__(self, bot):
        self.bot = bot

        # Run required instructions, you could even call a function.
        print('Init test Cog')

    # If you have a long list of instructions,
    # you can call this function from __init__.
    def post_init(self):
        # do stuff

    # Sample command
    @commands.command()
    async def greeting(self, ctx):
        await ctx.send(f'Hello, I am a test bot')

# The setup & teardown methods are part of extensions.
# Since you are running the Cog in a different .py file,
# it can be used to add and remove the cog from your main.py.

def setup(bot):
    bot.add_cog(test(bot))


def teardown(bot):
    bot.remove_cog('test')

添加到代码 cmets,您可以使用 staticmethod 装饰器使 post_init 函数成为静态方法。如果您的函数不需要访问实例/类变量,建议使用静态方法。

我强烈建议您查看 discord.py 文档,它将为您提供有关扩展和 Cogs 的宝贵信息。

来源:

https://discordpy.readthedocs.io/en/stable/ext/commands/cogs.html https://discordpy.readthedocs.io/en/stable/ext/commands/extensions.html https://***.com/a/53528504/6893561 https://www.programiz.com/python-programming/methods/built-in/staticmethod

【讨论】:

以上是关于加载 cog 时执行函数的主要内容,如果未能解决你的问题,请参考以下文章

COGS 2334. [HZOI 2016]最小函数值

仅在元素完全加载时执行一次的函数

代码正在执行,但从函数调用时视图未加载?

类加载时执行顺序

页面加载完毕执行多个JS函数

我的 cogs 文件没有加载到我的主文件中 (discord.py)