代码之家  ›  专栏  ›  技术社区  ›  Lia

如何在运行时更改discord.py中tasks.loop的间隔

  •  0
  • Lia  · 技术社区  · 1 年前

    我正在尝试制作一个机器人,提醒人们每隔几个小时喝足够的水。我试着用任务来做这件事,但意识到我不能让用户决定时间间隔,因为当你启动机器人时,循环的时间已经初始化了,不能再更改了。

    我看到的解决方案只使用睡眠而不是任务,但这些解决方案阻止了机器人在运行时处理任何其他命令。我目前的解决方案是有5个不同的循环可以切换,但在我看来这不是一个很好的解决方案。这就是现在的样子:

    @client.command()
    async def w(ctx, t = None):
        global w
        global channel
        global ti
        
        if w:
            if ti == "3":
                water3.cancel()
            elif ti == "1":
                water1.cancel()
            elif ti == "2":
                water2.cancel()
            elif ti == "4":
                water4.cancel()
            elif ti == "5":
                water5.cancel()
    
            w = False
            await ctx.send("The water reminder is turned off")
        else:
            channel = ctx.channel
            message = "The water reminder is turned on"
            ti = t
            w = True
    
            if t == None or t == "3":
                ti = 3
                water3.start()
            elif t == "1":
                water1.start()
            elif t == "2":
                water2.start()
            elif t == "4":
                water4.start()
            elif t == "5":
                water5.start()
            else:
                message = "Invalid command: Please choose a number from 1 to 5"
                w = False
            
            await ctx.send(message)
    
    
    @tasks.loop(minutes = 3)
    async def water3():
        await channel.send("Remember to drink water")
    
    @tasks.loop(minutes = 1)
    async def water1():
        await channel.send("Remember to drink water")
    
    @tasks.loop(minutes = 2)
    async def water2():
        await channel.send("Remember to drink water")
    
    @tasks.loop(minutes = 4)
    async def water4():
        await channel.send("Remember to drink water")
    
    @tasks.loop(minutes = 5)
    async def water5():
        await channel.send("Remember to drink water")
    

    它有效,但我不喜欢。一定有更好的方法可以做到这一点,对吧?

    0 回复  |  直到 1 年前