我正在尝试制作一个机器人,提醒人们每隔几个小时喝足够的水。我试着用任务来做这件事,但意识到我不能让用户决定时间间隔,因为当你启动机器人时,循环的时间已经初始化了,不能再更改了。
我看到的解决方案只使用睡眠而不是任务,但这些解决方案阻止了机器人在运行时处理任何其他命令。我目前的解决方案是有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")
它有效,但我不喜欢。一定有更好的方法可以做到这一点,对吧?