在 discord.py 中停止机器人命令

时间:2021-02-12 11:44:53

标签: discord.py

所以我写了一个这样的垃圾邮件机器人:

@bot.command()
async def start (ctx):
    while True:
        await ctx.send("Pls use correct channels for discussion")
        await asyncio.sleep(300)

当我输入 $start 时,函数启动。如何创建像 $stop 这样的新命令来阻止垃圾邮件?

2 个答案:

答案 0 :(得分:0)

一个简单的方法是设置一个变量,如果垃圾邮件已经开始,什么时候停止。当您运行 start 命令时,spam 变量已经为真并且会运行,因为 if 语句继续执行 while 循环。运行 stop 命令时,它只是将垃圾邮件变量设置为 false 并且不会继续运行垃圾邮件

oldPos

答案 1 :(得分:0)

Cohen 的回答只会阻止您启动它,但它不允许您在无限循环开始时停止它。您实际上应该做的是检查循环内部变量的值,以便能够阻止它。此外,在 booleans 中使用 strings 而不是硬编码“true”和“false”。

spam = True

@bot.command()
async def start (ctx):
    # EDIT: Set spam to True again so you can restart the loop
    global spam
    spam = True

    while true:
        # If "spam" is set to False, stop looping
        if not spam:
            break

        await ctx.send("Pls use correct channels for discussion")
        await asyncio.sleep(300)


@bot.command()
async def stop (ctx):
    global spam
    spam = False
    await ctx.send('spam stopped')

这会检查它是否应该在循环的每次迭代中继续运行。这样,当您将其设置为 False 时,循环就会停止。