@client.command()
async def activate(ctx, quote, delay: int):
await ctx.send("Successfully activated SpamMode")
global a
a = 1
while a == 1:
await ctx.send(quote)
time.sleep(delay)
因此,我在discord机器人(由discord.py制造)中有此命令,它的作用基本上是发送一条消息quote
,并且在我发出的每条消息delay
之间都有延迟它会在while循环中发生,是否有一种方法可以在执行其他命令时中断该循环,而不必等待time.sleep(delay)
完成?
即
@client.command()
async def deactivate(ctx):
global a
a = 2
await ctx.send("Successfully deactivated SpamMode")
因此,基本上当前正在发生的事情是,如果我尝试使用此命令停止上一个命令的工作,则必须等待time.sleep()
完成,这是我所不希望的。任何帮助将不胜感激。
答案 0 :(得分:1)
使用tasks.loop。您可以使用cancel()
方法立即将其停止
示例:
from discord.ext import tasks
@client.command()
async def activate(ctx, quote, delay: int):
global spam_loop
@tasks.loop(seconds=delay)
async def spam_loop(q):
await ctx.send(q)
spam_loop.start(quote)
await ctx.send("Successfully activated SpamMode")
@client.command()
async def deactivate(ctx):
spam_loop.cancel()
await ctx.send("Successfully deactivated SpamMode")