【问题标题】:How would I make a reload command in Python for a discord bot?如何在 Python 中为不和谐的机器人创建重新加载命令?
【发布时间】:2017-04-01 17:39:37
【问题描述】:

我正在尝试弄清楚如何创建一个命令来“重新加载” Discord Bot 的命令,并允许我在添加新命令时保持 bot 运行。

这只是让我的生活更轻松,所以我不必重新启动机器人。

我正在使用 discord.py 库与 discord API 进行交互。

我怎样才能做到这一点?

【问题讨论】:

    标签: python discord bots discord.py


    【解决方案1】:

    这个问题可能迟到了,但我还是会发布它

    您应该查看 Discord.py 中所谓的“Cogs”是如何工作的。 The bot from Rapptz(维护 Discord.py 的人)有一些很好的例子,如何将你的机器人组织成 Cogs 以及如何加载/卸载/重新加载它们(参见 cogs/admin.py)。

    @commands.command(hidden=True)
    @checks.is_owner()
    async def load(self, *, module : str):
        """Loads a module."""
        try:
            self.bot.load_extension(module)
        except Exception as e:
            await self.bot.say('\N{PISTOL}')
            await self.bot.say('{}: {}'.format(type(e).__name__, e))
        else:
            await self.bot.say('\N{OK HAND SIGN}')
    
    @commands.command(hidden=True)
    @checks.is_owner()
    async def unload(self, *, module : str):
        """Unloads a module."""
        try:
            self.bot.unload_extension(module)
        except Exception as e:
            await self.bot.say('\N{PISTOL}')
            await self.bot.say('{}: {}'.format(type(e).__name__, e))
        else:
            await self.bot.say('\N{OK HAND SIGN}')
    
    @commands.command(name='reload', hidden=True)
    @checks.is_owner()
    async def _reload(self, *, module : str):
        """Reloads a module."""
        try:
            self.bot.unload_extension(module)
            self.bot.load_extension(module)
        except Exception as e:
            await self.bot.say('\N{PISTOL}')
            await self.bot.say('{}: {}'.format(type(e).__name__, e))
        else:
            await self.bot.say('\N{OK HAND SIGN}')
    

    (Snippet from cogs/admin.py)

    【讨论】:

    • 从什么时候开始在命令本身而不是错误处理程序中处理异常?
    【解决方案2】:

    您可以只使用 discord.py 中内置的基本重新加载

    这是我的reload 命令如何完成的示例。

    @bot.command()
    @commands.is_owner()
    async def reload(ctx, extension):
        bot.reload_extension(f"cogs.{extension}")
        embed = discord.Embed(title='Reload', description=f'{extension} successfully reloaded', color=0xff00c8)
        await ctx.send(embed=embed)
    

    在重新加载 cog 时发送嵌入消息,但您始终可以只做 ctx.send(f'{extension} reloaded)

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2021-12-10
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2021-09-19
      • 2021-01-24
      • 1970-01-01
      相关资源
      最近更新 更多