简体   繁体   中英

Discord.py | Avoid getting more than one reaction by a same user to a message sent by a bot

Im trying to make a command that will send in an embed and that has two reactions, a tick and a cross, i want to make the user just react to one of the reaction, rather than reacting to both of them. I also need some help in making a system to ensure that the person reacting has a specific role. Any help would be highly appreciated!

This is possible using the on_raw_reaction_add() event.

@bot.event
async def on_raw_reaction_add(payload): # checks whenever a reaction is added to a message
                                        # whether the message is in the cache or not

     # check which channel the reaction was added in
    if payload.channel_id == 112233445566778899:

        channel = await bot.fetch_channel(payload.channel_id)
        message = await channel.fetch_message(payload.message_id)

        # iterating through each reaction in the message
        for r in message.reactions:

            # checks the reactant isn't a bot and the emoji isn't the one they just reacted with
            if payload.member in await r.users().flatten() and not payload.member.bot and str(r) != str(payload.emoji):

                # removes the reaction
                await message.remove_reaction(r.emoji, payload.member)

References:

I think you can store the userId or something that is unique for all the user. And then create a function check this ID appeared more than once or other logic.

https://discordpy.readthedocs.io/en/latest/api.html#user User API

Here, you can get user ID from this object.

Further more, you can get author id from message your client receive.

def on_message(message):
    print(message.author.id)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM