如何在對不同消息做出反應時讓不和諧機器人刪除以前的角色? (How to make discord bot remove the previous role when reacting to a different message?)


問題描述

如何在對不同消息做出反應時讓不和諧機器人刪除以前的角色? (How to make discord bot remove the previous role when reacting to a different message?)

我已經讓我的不和諧機器人在反應和不反應方面給予和刪除角色。我該如何做到這一點,以便當用戶對錶情符號做出反應而之前已經對另一個表情做出反應時,前一個會被刪除?這樣角色就不會疊加...?

這是我添加角色的代碼:

@commands.Cog.listener()
    async def on_raw_reaction_add(self, payload):
        message_id = payload.message_id
        if message_id == 810784018953666580:
            guild_id = payload.guild_id
            guild = discord.utils.find(lambda g: g.id == guild_id, self.client.guilds)

            if payload.emoji.name == 'grey_B19FF9':
                role = guild.get_role(810471074500182036)
            elif payload.emoji.name == 'skyblue_11A7BB':
                role = guild.get_role(810471062449291296)
            else:
                role = discord.utils.get(guild.roles, name=payload.emoji.name)

            if role is not None:
                member = payload.member
                if member is not None:
                    await member.add_roles(role)
                    print("Done.")
                else:
                    print("Member not found.")
            else:
                print("Role not found")

這是用於刪除角色的:

@commands.Cog.listener()
    async def on_raw_reaction_remove(self, payload):
        message_id = payload.message_id
        if message_id == 810784018953666580:
            guild_id = payload.guild_id
            guild = discord.utils.find(lambda g: g.id == guild_id, self.client.guilds)

            if payload.emoji.name == 'grey_B19FF9':
                role = guild.get_role(810471074500182036)
            elif payload.emoji.name == 'skyblue_11A7BB':
                role = guild.get_role(810471062449291296)
            else:
                role = discord.utils.get(guild.roles, name=payload.emoji.name)

            if role is not None:
                guild = await self.client.fetch_guild(payload.guild_id)
                member = await guild.fetch_member(payload.user_id)
                if member is not None:
                    await member.remove_roles(role)
                    print("Done.")
                else:
                    print("Member not found.")
            else:
                print("Role not found")

任何幫助將不勝感激!


參考解法

方法 1:

What happens when this code runs ? I think the method remove_roles takes a list of roles so you should turn that role argument into a list before removing, same goes for add_roles

You should also look into member.roles to check the roles of a member, depending on what is inside that list, you should have enough information to be able to remove the role that you don't want

(by CrashtestEnigmaNathan Marotte)

參考文件

  1. How to make discord bot remove the previous role when reacting to a different message? (CC BY‑SA 2.5/3.0/4.0)

#discord #Python #discord.py






相關問題

如何讓不和諧的機器人提及用戶? (How to make a discord bot mention a user?)

如何計算表情符號並在不和諧的機器人反應中顯示它們? (How to count the emojis and display them in a discord bot reaction?)

每當機器人啟動時,它就會開始向控制台發送垃圾郵件,沒有明顯的問題 (Whenever the bot starts up, it just starts spamming the console with no visible issue)

Discord.js ReferenceError:嵌入未定義 (Discord.js ReferenceError: embed is not defined)

在 Discord.js 中查找所有具有角色的成員 (Finding all members with a role in Discord.js)

啟動兩個 CPU 阻塞偵聽器並等待其中一個完成 (Starting two cpu blocking listeners and wait until one of them finishes)

discord.py - 猜謎遊戲無響應(更新) (discord.py - Guessing game no response (updated))

\n 換行符不保留代碼塊文本樣式 (\n Line break does not preserve code block text style)

如何在對不同消息做出反應時讓不和諧機器人刪除以前的角色? (How to make discord bot remove the previous role when reacting to a different message?)

一段代碼阻礙了我在學校的 Discord 機器人 (One piece of code hindering my Discord bot for School)

如何使不和諧機器人隨機跳過響應 (How to make discord bot randomly skip a response)

我應該放什麼行,這樣當我寫東西時,Discord 機器人會以我想要的方式響應(discord.py)? (What lines should I put so that when I write something the Discord bot responds in a way that I want (discord.py)?)







留言討論