所以我有类似的东西:
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
,则该脚本将立即停止为先前激活的用户而停止,并开始为发行的最新用户使用它命令。我评论的台词是我尝试实现这一目标的尝试。我该怎么做?
而不是使用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
这唯一的缺点是,如果发生超时,则直到循环再次运行bot不会收听命令。
您可以使用一个全局变量a设置您正在关注的用户。如果用户更改,则可以打破WALE循环并停止。