我正在尝试找出如何创建一个命令来“重新加载”Discord机器人的命令,并允许我在添加新命令时保持机器人运行状态。这可以让我的生活更轻松,因为我不必重新启动机器人。我正在使用discord.py库与discord API进行交互。如何实现这一点?
也许这个问题已经晚了,但我还是会回答它。
你应该查看Discord.py中所谓的“Cogs”是如何工作的。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}')
@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)
ctx.send(f'{extension} reloaded)
。