如何在执行另一个命令时中断discord.py命令中的循环?

时间:2020-11-10 11:38:11

标签: python loops command discord.py

@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()完成,这是我所不希望的。任何帮助将不胜感激。

1 个答案:

答案 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")