Авто выдача ролей по эмоджи
Что я дела не так? я нашел статью (https://question-it.com/questions/1160222/discordpy-kak-dat-konkretnuju-rol-pri-dobavlenii-reaktsii-na-konkretnoe-soobschenie)
@client.event
async def on_raw_reaction_add(payload):
channel = client.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = client.get_guild(payload.guild_id)
reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
# only work if it is the client
if payload.member.id == client.user.id:
return
if payload.message_id == 750089806872314038 and reaction.emoji == '✅':
role = discord.utils.get(guild.roles, name='ROLE NAME HERE')
await payload.member.add_roles(role)
await reaction.remove(payload.member)
но тут написано @client.event а у меня @bot.event
мой код выглядит так
@bot.event
async def on_raw_reaction_add(payload):
channel = bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = bot.get_guild(payload.guild_id)
reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
# only work if it is the client
if payload.member.id == bot.user.id:
return
if payload.message_id == 877636512682880 and reaction.emoji == '✅ ':
role = discord.utils.get(guild.roles, name='? drugalek')
await payload.member.add_roles(role)
await reaction.remove(payload.member)
но он не работает
Ответы (2 шт):
Для работы с участниками серверов боту нужно выдать намерения (intents)
bot = commands.Bot(command_prefix='!', intents = discord.Intents.all())
В этой строке у вас стоит пробел после эмоджи:
if payload.message_id == 877636512682880 and reaction.emoji == '✅ ':
Этот пробел мешает правильно сравнить значения строк. Правильно не так '✅ ', а так '✅'.
Ну и вполне возможно, что ошибка в id сообщения
if payload.message_id == 877636512682880
У вас точно указан id именно того сообщения, с которого нужно считывать реакцию?
Точно ли здесь указано правильное название роли?
name='? drugalek'
Вместо этого можете взять id роли и получить ее объект так:
roleid = # id роли
role = discord.utils.get(guild.roles, id=roleid)
id объектов discord можно получать нажав правой кнопкой мыши на объект - Копировать ID.
Для этого в настройках нужно включить режим разработчика
@bot.event
async def on_raw_reaction_add(payload):
if payload.channel_id == channel_id:
member = payload.member
guild = bot.get_guild(guild_ID)
emoji=payload.emoji
if payload.emoji.name == 'emoji':
role = member.guild.get_role(role_id)
await member.add_roles(role)
guild_ID-это id сервера