【发布时间】:2017-04-01 17:39:37
【问题描述】:
我正在尝试弄清楚如何创建一个命令来“重新加载” Discord Bot 的命令,并允许我在添加新命令时保持 bot 运行。
这只是让我的生活更轻松,所以我不必重新启动机器人。
我正在使用 discord.py 库与 discord API 进行交互。
我怎样才能做到这一点?
【问题讨论】:
标签: python discord bots discord.py
我正在尝试弄清楚如何创建一个命令来“重新加载” Discord Bot 的命令,并允许我在添加新命令时保持 bot 运行。
这只是让我的生活更轻松,所以我不必重新启动机器人。
我正在使用 discord.py 库与 discord API 进行交互。
我怎样才能做到这一点?
【问题讨论】:
标签: python discord bots discord.py
这个问题可能迟到了,但我还是会发布它
您应该查看 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}')
【讨论】:
您可以只使用 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)
【讨论】: