使用命令中断循环
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
附带说明一下,最好提供一个独立的示例,而不仅仅是一个函数。
在我的 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
附带说明一下,最好提供一个独立的示例,而不仅仅是一个函数。