所以我有这样的事情:
import discord, asyncio
client = discord.Client()
@client.event
async def on_message(message):
if message.content.lower().startswith("!test"):
await client.delete_message(message)
test1 = await client.send_message(message.channel, "%s test1" % (message.author.mention))
await asyncio.sleep(1)
while True:
#newtest = await client.wait_for_message()
#if newtest.content.lower().startswith("!test"):
#return 0
#else:
test2 = await client.edit_message(test1, "%s test2" % (message.author.mention))
await asyncio.sleep(1)
await client.edit_message(test2, "%s test1" % (message.author.mention))
await asyncio.sleep(1)
client.run('ClientTokenHere')
它的作用是,如果有人在!test
中输入聊天频道,该脚本会删除该!test
条消息,然后在聊天中发送一条消息,说明该人的姓名然后是文字test1
。然后,脚本会在一秒钟后编辑该消息以说出test2
,然后它会编辑 相同的消息说test1
,然后再编辑test2
等等等。
但是,我想这样做,以便如果另一个用户再次输入相同的命令!test
,脚本将立即停止为之前激活它的用户,并开始执行它最近发出命令的用户。我评论出来的是我尝试实现这一目标的尝试。我该怎么办?
答案 0 :(得分:1)
您应该使用
而不是使用asyncio.sleep(1)
def check(message):
return message.channel == ctx.channel and message.content.lower().startswith("!test")
try:
await client.wait_for('message', timeout=1, check=check)
except:
continue
唯一的缺点是如果超时发生,那么在循环再次运行之前,机器人不会听命令。
答案 1 :(得分:0)
您可以使用全局变量来设置您关注的用户。如果用户更改,您可以打破while循环并停止。