所以我试图让一个命令在我的 dsicrod.py bot 上每 5 分钟运行一次,并且需要 ctx 来获取公会成员和某些类似的细节,所以我需要在 bot.command 中使用它,但我不能正确地做到这一点没有tasks.loop(minutes=5)所以我尝试让它发送带有tasks.loop的命令但它不起作用所以我去了pythin discord并得到帮助他们让我到了这一点
@bot.command(pass_context=True)
async def update_member_count(ctx):
await ctx.send(ctx.guild.member_count)
channel = discord.utils.get(ctx.guild.channels, id=829355122122424330)
await channel.edit(name = f'Member Count: {ctx.guild.member_count}')
@tasks.loop(minutes=5)
async def update_member_count2(ctx):
await update_member_count(ctx)
并且它仍然给出错误,指出 update_member_count2 中缺少 ctx arg。请帮忙
答案 0 :(得分:1)
您可以通过其他方式创建您的 loop
函数。你的方法对我来说有点不清楚。
尝试以下操作:
async def update_member_count(ctx):
while True:
await ctx.send(ctx.guild.member_count)
channel = discord.utils.get(ctx.guild.channels, id=YourID)
await channel.edit(name=f'Member Count: {ctx.guild.member_count}')
await asyncio.sleep(TimeInSeconds)
@bot.command()
async def updatem(ctx):
bot.loop.create_task(update_member_count(ctx)) # Create loop/task
await ctx.send("Loop started, changed member count.") # Optional
(或者您只是在 on_ready
事件中创建任务,取决于您)
我们做了什么?
async def update_member_count(ctx):
) 中创建了一个循环updatem
次以激活循环答案 1 :(得分:1)
您可以采用@Dominik 的答案,但几乎不可能停止正在运行的 While 循环。继续 discord.py 任务。 如果要使用命令启动任务:
async def start(ctx):
update_member_count2.start(ctx)
如果你想在bot启动时启动它,你必须稍微修改一下代码
@tasks.loop(minutes=5)
async def update_members():
guild = bot.get_guild(guildID)
channel = guild.get_channel(channelID)
#update channel, don't sleep
# inside init or on_ready
if not update_members.is_running():
update_members.start()