Не работает функция для выдачи роли при реакции
Суть в чем. Человек пишет сообщение и только когда на сообщение поставят реакцию бот выдает роли этому человеку
@bot.event
async def on_raw_reaction_add(payload): #отлов реакции на сообщение
channel = bot.get_channel(payload.channel_id) #отлов канала, где произошла реакция
message = await channel.fetch_message(payload.message_id)
role = discord.utils.get(message.guild.roles, name="test") #находим роль по имени на сервере
await message.author.add_roles(role) #выдаём роль пользователю
Почему-то не работает
AttributeError: 'User' object has no attribute 'add_roles'
Ответы (1 шт):
Автор решения: nyekitka
→ Ссылка
Проблема тут в том, что message.author может вернуть объект класса User, у которого нет метода add_roles, вместо объекта класса Member. Произойти это может из-за того, что сообщение, которое вы ловите, находится либо в приватном канале, либо человек, который его написал, вышел из сервера. Поэтому нужно обработать данную ситуацию и сделать так:
if isinstance(message.author, discord.Member):
await message.author.add_roles(role)
Если же вернулся User, то тут уж ничего не поделаешь.