Почему не снимается роль?
У меня есть бот в дискорде. Если убрать эмодзи, а то есть реакцию - должна убраться роль, но вместо этого я получаю:
AttributeError: 'NoneType' object has no attribute 'remove_roles'
Не знаю, как можно обойти данную ошибку
Код:
@bot.event
async def on_raw_reaction_remove(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)
if payload.message_id == 969645670610907146 and reaction.emoji == '?':
role = discord.utils.get(guild.roles, id=968944234046562424)
await payload.member.remove_roles(role)
Помогите пожалуйста
Ответы (1 шт):
Автор решения: Universall
→ Ссылка
Ну во первых нужно использовать не on_raw_reaction_add, а on_raw_reaction_remove. А во вторых (по непонятной причине) payload.member возвращает None из за чего приходится доставать объект пользователя вручную. Как-то так:
async def on_raw_reaction_remove(payload: discord.RawReactionActionEvent) -> None:
roles = {"?": "the_best_role"}
message_id = id_сообщения
role_name = roles.get(payload.emoji.name)
guild = bot.get_guild(payload.guild_id)
member = await guild.fetch_member(payload.user_id)
if role_name:
if payload.message_id == message_id:
role = discord.utils.get(guild.roles, name=role_name)
await member.remove_roles(role)
При добавлении тоже самое, но заместо remove_roles нужен add_roles.