以下是我的案例的当前工作代码
我正在为我的 Discord 服务器开发一个机器人,并尝试为有反应的用户分配角色。
我现在的状态是这样的:(我用的是最新的 Python/Discord.py 版本)
import discord
from discord.ext import commands
bot = commands.Bot(intents=intents)
class GetRole(commands.Cog):
def __init__(self, bot):
self.bot = bot
@bot.event
async def on_raw_reacion_add(payload):
ourMessageID = YourMessageID
if ourMessageID == payload.message_id:
member = payload.member
guild = member.guild
if payload.emoji.name == '<:YouTube:864980517630902302>':
role = discord.utils.get(guild.roles, name="YouTube")
elif payload.emoji.name == '<:Twitch:864980843176787988>':
role = discord.utils.get(guild.roles, name="Twitch")
elif payload.emoji.name == '<:Discord:864980938068852757>':
role = discord.utils.get(guild.roles, name="Discord")
elif payload.emoji.name == '<a:alert:864983948987990081>':
role = discord.utils.get(guild.roles, name="Community-Events")
await member.add_roles(role)
(MessageID所指的消息已经发送)
它不会在 Visual Studio 代码中产生错误,但仍不会向对消息做出反应的用户添加角色。
也许是因为 Discord.py 的版本,但我不知道。
答案 0 :(得分:0)
确保启用了适当的意图。根据 Discord.py API Reference,成员和反应意图都需要使用 on_raw_reaction_add
事件。在 developer portal 中启用它们,并在您的代码中添加意图,如下所示:
intents = discord.Intents.default()
intents.members = True
intents.reactions = True
bot = commands.Bot(intents=intents)
答案 1 :(得分:0)
这是现在的工作代码:
@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
print("test")
print(payload.emoji.name)
ourMessageID = 867876893411508234
if ourMessageID == payload.message_id:
member = payload.member
guild = member.guild
if payload.emoji.name == 'YouTube':
role = discord.utils.get(guild.roles, name="YouTube")
elif payload.emoji.name == 'Twitch':
role = discord.utils.get(guild.roles, name="Twitch")
elif payload.emoji.name == 'Discord':
role = discord.utils.get(guild.roles, name="Discord")
elif payload.emoji.name == 'alert':
role = discord.utils.get(guild.roles, name="Community-Events")
await member.add_roles(role)
我有错别字并使用了(我认为)过时的 evets 等。现在至少对我来说一切都恢复了