试图做出“是/否”反应确认,但机器人对反应没有反应

2024-06-17 14:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对我的代码进行确认投票,这样我的机器人在没有确认我想这样做的情况下不会清除消息

我正试图通过一个反应民意测验来实现这一点,当我输入命令时,它将发送一条消息,同时显示勾选交叉反应。如果我用勾选表情符号(<:nonatick:803586318369292289>)进行反应,它将继续清除消息,而如果我用交叉表情符号(<:RedTick:801684348502933525>)进行反应,它将发送另一条消息,而不执行其他操作

我得到了它发送Are you sure you want to delete 1 messages?的部分以及机器人的反应。但是,如果我对其中任何一个表情做出反应,它都不会做出进一步的反应

@client.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def clear(ctx, number):
    number = int(number)
    moreoma = ctx.author.id
    message = await ctx.send("Are you sure you want to delete " + str(number) + " messages?")
# Adds reaction to above message
    for emoji in ('<:nonatick:803586318369292289>', '<:RedTick:801684348502933525>'):
        await message.add_reaction(emoji)

    def check(reaction, user):
        return user.id == moreoma and str(reaction.emoji) in ['<:nonatick:803586318369292289>',
                                                              '<:RedTick:801684348502933525>']

    reaction, user = await client.wait_for('reaction_add', timeout=5, check=check)
    if reaction.emoji == '<:nonatick:803586318369292289>':
        await ctx.channel.purge(limit=number + 2, check=lambda msg: not msg.pinned)
    elif reaction.emoji == '<:RedTick:801684348502933525>':
        await ctx.send("aight looks like we are not clearing messages as of now. ")

在我的代码中启用了意图:

intents = discord.Intents(messages=True, guilds=True)
intents.reactions = True
intents.members = True

这就是我使用命令时发生的情况。 This

它如何检查我是否有反应是个问题吗

提前谢谢你的帮助


Tags: toyoutrue消息numbermessagecheckawait
1条回答
网友
1楼 · 发布于 2024-06-17 14:47:35

您可以使用try/except来完成此操作

@client.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def clear(ctx, number):
    number = int(number)
    moreoma = ctx.author.id
    message = await ctx.send("Are you sure you want to delete " + str(number) + " messages?")

    emojis = ['<:nonatick:803586318369292289>', '<:RedTick:801684348502933525>']

    # Adds reaction to above message
    for emoji in (emojis):
        await message.add_reaction(emoji)

    def check(reaction, user):
        reacted = reaction.emoji
        return user.id == moreoma and str(reaction.emoji) in emojis

    try:
        reaction, user = await client.wait_for('reaction_add', timeout=10, check=check)
    except asyncio.TimeoutError:
        await ctx.send("timeout")
    else:
        if str(reacted) == '<:nonatick:803586318369292289>':
            await ctx.channel.purge(limit=number + 2, check=lambda msg: not msg.pinned)
        elif reaction.emoji == '<:RedTick:801684348502933525>':
            await ctx.send("aight looks like we are not clearing messages as of now. ")

相关问题 更多 >