Discord.py如果命令发送两次,则在true循环时停止



我编写了以下代码:

while True:
reaction = await self.client.wait_for('reaction_add')
emoji, user = reaction
if user.id != alwuid:
continue
if emoji.emoji == '◀️':
site = site - 1
if site < 0:
site = len(example_list) - 1
await msg.edit(embed=Embeds.txt("Side", example_list[site], ctx.author))
elif emoji.emoji == '▶️':
site = site + 1
if (site + 1) > len(example_list):
site = 0
await msg.edit(embed=Embeds.txt("Side", example_list[site], ctx.author))

现在我正在寻找一种方法来停止这个循环,如果第二个循环产生:谁把这个命令列出来,他就可以换页了……,如果他运行命令第二次我想,如果他使用的反应,而不是旧的消息也编辑,我只想要最新的消息…

如果您不希望命令触发对消息的任何反应,则需要使用检查:

def reaction_check(msg):
def check(reaction, user):
if reaction.message.id != msg.id:
return False
return True
return check

然后在wait_for中使用此检查:

reaction = await self.client.wait_for('reaction_add', check=reaction_check(msg))

现在wait_for()只有在经过的msg上加入反应时才会被触发。您还可以为该检查添加更多逻辑,例如,如果对该消息做出反应的用户是调用该命令的用户。

至于第二个问题,停止你的循环,如果另一个被触发,你将需要查看同步原语,但我建议只是添加timeout=xwait_for()和捕获asyncio.TimeoutError后x秒没有活动:https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Bot.wait_for

最新更新