用命令中断循环

2024-06-02 17:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的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

但我自己想不出来。-。在


Tags: 命令clienteventmessageasyncifdefbot
2条回答

(不为自己尝试)尝试:

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

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

在你的on_message函数内message内容不会改变。因此,另一条消息将导致再次调用on_message。您需要一个同步方法,即全局变量或类成员变量,当!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

作为补充说明,最好提供一个独立的示例,而不仅仅是一个函数。在

相关问题 更多 >