代码之家  ›  专栏  ›  技术社区  ›  EpyJojo

使用命令中断循环

  •  0
  • EpyJojo  · 技术社区  · 7 年前

    @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)
    

    但我自己无法解决。-。

    2 回复  |  直到 7 年前
        1
  •  1
  •   bezet    7 年前

    在您的 on_message 作用 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
    

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

        2
  •  0
  •   MasterChef    7 年前

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

    对于 While 条款,然后是您的 else 条款