Discord Bot#4 Reaction Role
幫機器人創一個身分組

創一個你要自動新增的身分組

在Cog資料夾底下新增role. py
| import discord |
| from discord.ext import commands |
| |
| class Role(commands.Cog): |
| def __init__(self, bot): |
| self.bot = bot |
| |
| def setup(bot): |
| bot.add_cog(Role(bot)) |
Reaction
- on_reaction_add vs on_raw_reaction_add
Sum up
- on_reaction_add: 重開機器人之後的發出的訊息有效
- on_raw_reaction_add: 只要有人點reaction就會觸發
自定義emoji
在輸入欄打一個表情符號,之後在前面加上一個反斜線,按下enter,就會顯示自定義emoji的格式
- 格式類似這樣 <:emoji_name:emoji_id>
<:energy_emmo:953329973702316072>
Example
| @commands.Cog.listener() |
| async def on_raw_reaction_add(self, payload): |
| |
| if str(payload.emoji) == '\U0001F914': |
| print('TEST') |
add_roles
- 從payload中抓到發出訊息的伺服器(guild)
- 從這個伺服器物件用role_id抓到我們想要加的身分組
- 把這個按表情的成員新增一個身分組
取得role_id
伺服器設定->身分組->右鍵身分組->複製id

Example
| @commands.Cog.listener() |
| async def on_raw_reaction_add(self, payload): |
| if str(payload.emoji) == '\U0001F914': |
| guild = self.bot.get_guild(payload.guild_id) |
| role = guild.get_role(roleID) |
| member = await guild.fetch_member(payload.user_id) |
| await member.add_roles(role) |
移除身分組也是一樣的作法
| @commands.Cog.listener() |
| async def on_raw_reaction_remove(self, payload): |
| if str(payload.emoji) == '\U0001F914': |
| guild = self.bot.get_guild(payload.guild_id) |
| role = guild.get_role(roleID) |
| member = await guild.fetch_member(payload.user_id) |
| await member.remove_roles(role) |
Dictionary
| roleDict = {'\U0001F914': 953334015652417596, |
| '<:energy_emmo:953329973702316072>': 953462476723347476} |
Example
| @commands.Cog.listener() |
| async def on_raw_reaction_add(self, payload): |
| for emoji, roleID in roleDict.items(): |
| if str(payload.emoji) == emoji: |
| guild = self.bot.get_guild(payload.guild_id) |
| role = guild.get_role(roleID) |
| member = await guild.fetch_member(payload.user_id) |
| await member.add_roles(role) |
新增提示
| @commands.command() |
| async def role(self, ctx): |
| msg = '' |
| for emoji, roleID in roleDict.items(): |
| role = ctx.guild.get_role(roleID) |
| msg += f'{emoji} : {role}\n' |
| await ctx.send(msg) |
| msg_obj = await ctx.send(msg) |
| for emoji in roleDict: |
| await msg_obj.add_reaction(emoji) |
Discord Bot#4 Reaction Role
{"metaMigratedAt":"2023-06-16T21:24:51.406Z","metaMigratedFrom":"YAML","title":"Discord Bot#4 Reaction Role","breaks":true,"contributors":"[{\"id\":\"e66eff6e-ecb8-470a-a384-ea2a02e04747\",\"add\":3911,\"del\":768}]"}