所以我想在机器人加入公会时调用一个命令。在其他 StackOverflows 的帮助下,我尝试了以下方法:
@commands.Cog.listener()
async def on_guild_join(self, guild):
setup_cmd = self.bot.get_command('setup')
await self.bot.invoke(setup_cmd)
我怀疑的问题之一是 invoke() 方法需要一个 ctx,而 on_guild_join 没有提供 Context 对象。无论如何,当我尝试这样做时,我收到此错误:
Traceback (most recent call last):
File "C:\Users\brian\.virtualenvs\ComBot-l9j8wB-A\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "D:\Documents\c0de_box\projects\Bots\ComBot\cogs\setup_tasks.py", line 14, in on_ready
await self.bot.invoke(setup_cmd)
File "C:\Users\brian\.virtualenvs\ComBot-l9j8wB-A\lib\site-packages\discord\ext\commands\bot.py", line 935, in invoke
if ctx.command is not None:
AttributeError: 'Command' object has no attribute 'command'
那么在这种情况下我将如何调用另一个命令?
答案 0 :(得分:1)
Bot.invoke
以 Context
作为参数,而不是 Command
实例,虽然不可能在 Context
事件中获得 on_guild_join
,但您应该创建一个函数并在命令和事件中调用它
async def setup_func(self, *args, **kwargs):
...
@commands.Cog.listener()
async def on_guild_join(self, guild):
await self.setup_func(...)
@commands.command()
async def setup(self, ctx, ...):
await self.setup_func(...)