使用命令中断循环

Break Loop with Command

在我的 Python - Discord Bot 中,我想创建一个命令,它会导致循环 运行。当我输入第二个命令时,循环应该停止。这么粗略的说:

@client.event
async def on_message(message):
    if message.content.startswith("!C1"):
        while True:
            if message.content.startswith("!C2"):
                break
            else:
                await client.send_message(client.get_channel(ID), "Loopstuff")
                await asyncio.sleep(10)

所以它在频道中每 10 秒 "Loopstuff" 发布一次并在我输入 !C2

时停止

但我自己想不通.-.

(没有自己尝试)尝试:

while not message.content.startswith("!C2")

对于 While 子句,后跟 else 子句的内容。

在您的 on_message 函数中 message 内容不会改变。所以另一条消息将导致 on_message 被再次调用。您需要一种同步方法,即。全局变量或 class 成员变量,将在 !C2 消息到达时更改。

keepLooping = False

@client.event
async def on_message(message):
    global keepLooping
    if message.content.startswith("!C1"):
        keepLooping = True
        while keepLooping:
            await client.send_message(client.get_channel(ID), "Loopstuff")
            await asyncio.sleep(10)
    elif message.content.startswith("!C2"):
        keepLooping = False

附带说明一下,最好提供一个独立的示例,而不仅仅是一个函数。