如何在 Python 中为不和谐的机器人创建重新加载命令?
Posted
技术标签:
【中文标题】如何在 Python 中为不和谐的机器人创建重新加载命令?【英文标题】:How would I make a reload command in Python for a discord bot? 【发布时间】:2017-04-01 17:39:37 【问题描述】:我正在尝试弄清楚如何创建一个命令来“重新加载” Discord Bot 的命令,并允许我在添加新命令时保持 bot 运行。
这只是让我的生活更轻松,所以我不必重新启动机器人。
我正在使用 discord.py 库与 discord API 进行交互。
我怎样才能做到这一点?
【问题讨论】:
【参考方案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('\NPISTOL')
await self.bot.say(': '.format(type(e).__name__, e))
else:
await self.bot.say('\NOK 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('\NPISTOL')
await self.bot.say(': '.format(type(e).__name__, e))
else:
await self.bot.say('\NOK 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('\NPISTOL')
await self.bot.say(': '.format(type(e).__name__, e))
else:
await self.bot.say('\NOK 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)
【讨论】:
以上是关于如何在 Python 中为不和谐的机器人创建重新加载命令?的主要内容,如果未能解决你的问题,请参考以下文章
我正在为不和谐的机器人编写代码,如果字符串不区分大小写,我希望这样,但我不知道如何