如何在discord.py中打开事件循环?

2024-05-13 00:57:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的discord机器人做一个循环,它将每十分钟对用户进行一次DM。我不断收到一个错误,我的事件循环已关闭。我不知道如何打开它。非常感谢您的帮助。我的代码如下所示

@bot.command(aliases=['r10', 'R10'])
async def remind10(ctx, user):
    mbed = discord.Embed(title = 'Reminding you every ten minutes.', description = 'If you want to deactivate this, please say the command pp!stopremind')
    mbed.set_author(name = 'Procrastination Police')
    await ctx.send(embed=mbed)
    global remind_loop
    @tasks.loop(minutes=10)
    async def remind_loop():
        await user.send('Reminding you to stop procrastinating?')

Tags: toloopyousendasyncdefawaitcommand
1条回答
网友
1楼 · 发布于 2024-05-13 00:57:35

无意冒犯但这些都是你的问题

  • 首先,您没有调用该任务,因此它不会运行

  • 第二,为什么是全球循环,重点是什么

  • 第三,您没有为提醒循环传递变量user和mbed

  • 第四,为什么你只向用户发送“提醒你停止拖延?”而将所有文本放在一起则更符合逻辑

  • 第五,提醒10(ctx,用户)如果是提醒会更好(ctx,用户:discord.Member)

  • 第六,更清楚的是,任务的功能在主功能之外,在某些情况下,任务不能在功能内部

不管怎样,我制作了两个版本的“想要你想要的”

第一个要求用户具有管理员权限,因为用户可以在其他人身上进行管理。如果您只键入“pp!提醒”,它将每隔10分钟(600秒)提醒您自己,直到您键入“pp!提醒停止”。否则,如果您键入“pp!embrand@[Username]start[interval(以秒为单位)],它将提醒您键入的每个时间间隔的用户。e、 g.“pp!提醒@Bob start 60”。如果您想停止提醒该特定用户,请键入“pp!remind@[Username]stop”

第二个不需要adim烫发,因为这个提醒只对你自己有效。如果您键入“pp!提醒”,它将每隔10分钟(600秒)提醒您自己,直到您键入“pp!提醒停止”。否则,如果您键入“pp!提醒开始[间隔]”,则它会提醒您每个间隔。e、 g.“pp!提醒开始600”(10分钟)。要停止运行,只需键入“pp!提醒停止”即可

一,

@bot.command(aliases = ["r","R"])
@commands.has_permissions(administrator = True)
async def remind(ctx,member : discord.Member = "", enabled = "start", interval = 600):
    if member == "":
        member = bot.get_user(ctx.author.id)
    if enabled.lower() == "stop":
        reminder.cancel()
    elif enabled.lower() == "start":
        mbed = discord.Embed(title = f'Reminding you to stop procrastinating every {interval / 60} minutes.', description = 'If you want to deactivate this, ask an admin to enter the command pp!remind stop @[Username]')
        mbed.set_author(name = 'Procrastination Police')
        reminder.change_interval(seconds = float(interval))
        reminder.start(member, mbed)
        
@tasks.loop(seconds = 600)
async def reminder(member, mbed):
    await member.send(embed=mbed)
@bot.command(aliases = ["r","R"])
async def remind(ctx, enabled = "start", interval = 600):
    member = bot.get_user(ctx.author.id)
    if enabled.lower() == "stop":
        reminder.cancel()
    elif enabled.lower() == "start":
        mbed = discord.Embed(title = f'Reminding you to stop procrastinating every {interval / 60} minutes.', description = 'If you want to deactivate this, enter the command pp!remind stop')
        mbed.set_author(name = 'Procrastination Police')
        reminder.change_interval(seconds = float(interval))
        reminder.start(member, mbed)
        
@tasks.loop(seconds = 600)
async def reminder(member, mbed):
    await member.send(embed=mbed)

相关问题 更多 >