所以我有这个设置计时器的脚本,但是我只是不知道如何用命令停止它
jb=[]
@client.command(pass_context=True)
async def timer(con,time=10):
timer = time
ct = con.message.channel.id
msg = await client.send_message(con.message.channel, time)
jb.append(con.message.channel.id)
for i in range(time):
await asyncio.sleep(1)
timer -= 1
await client.edit_message(msg, new_content=timer)
num = jb.index(ct)
del jb[num]
await client.say("Timer complete")
答案 0 :(得分:0)
您可以使用client.wait_for_message
代替asyncio.sleep
。如果您的机器人与之通信的人在这段时间内发送了一条消息,您可以break
跳出循环并继续进行交互
@client.command(pass_context=True)
async def timer(ctx, time: int=10):
msg = await client.send_message(ctx.message.channel, time)
for newtime in range(time-1, 0, -1):
resp = await client.wait_for_message(author=ctx.message.author, content="stop", timeout=1)
if resp: # They sent a message
break
else:
await client.edit_message(msg, new_content=newtime)
else:
# This block is executed if the timer counted all the way down without interruption
如果您需要更复杂的接受标准,则可以编写一个Message -> bool
函数并将其作为check
参数传递给wait_for_message