【问题标题】:discord.py: Run a command on start-updiscord.py:在启动时运行命令
【发布时间】:2020-12-31 08:29:57
【问题描述】:

我有一个命令可以检查一些预定事件,然后更新一些频道。 我希望此命令在启动时运行,但如果不访问上下文对象,我无法调用该命令。

ctx.invoke(command) 和 bot.get_cog("Command").command(ctx) 都需要一些上下文对象。 创建自己的上下文似乎是不可能的,因为我无权访问 Message 对象。

这似乎应该是非常基本的行为,但我无法弄清楚。

编辑: 我需要能够在启动时调用这个“某事”命令,它使用上下文对象来获取公会的所有频道,所以我需要创建/获取上下文对象或以某种方式找到当前公会的所有频道我是另一种方式。

@commands.command(name=something)
async def something(ctx):
  channel = discord.utils.get(ctx.guild.channels, name="some_name")
  await channel.send("something")

【问题讨论】:

  • 您能否编辑您的问题以包含您的代码?
  • @bot.event def on_ready() 怎么样?也许更好地显示您的问题的最小工作代码 - 这样我们就可以运行它并测试想法。
  • 用小示例代码更新

标签: python discord discord.py discord.py-rewrite


【解决方案1】:

创建一个单独的协程,可以从命令和代码的其他部分调用。所以不是

@bot.command()
async def my_command(ctx):
    ...

@bot.event
async def on_ready():
    await ctx.invoke(my_command) # doesn't work

你可以的

async def do_stuff():
    ...

@bot.command()
async def my_command(ctx):
    await do_stuff()

@bot.event
async def on_ready():
    await do_stuff()

【讨论】:

  • 我的描述不够清楚,有问题的更新某些频道的命令使用上下文对象来获取公会的频道,例如ctx.guild.channels 所以我需要没有上下文对象的频道或以其他方式创建/获取上下文对象
  • 您对启动机器人时想要的公会了解多少?你的协程可以像任何其他函数一样接受参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2018-12-31
  • 2016-09-10
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
相关资源
最近更新 更多