在我的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
但是我无法自己解决这个问题.-。
答案 0 :(得分:1)
在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
作为旁注,提供一个独立的例子而不仅仅是一个函数是好的。
答案 1 :(得分:0)
(不尝试自己)尝试:
while not message.content.startswith("!C2")
对于While
子句,后跟else
子句的内容。