S
S
sychev_322021-02-14 10:00:21
Python
sychev_32, 2021-02-14 10:00:21

Why does the bot not issue roles?

Mistake:

AttributeError("'NoneType' object has no attribute 'remove_roles'")

The code
import discord
from discord import utils

import config

class MyClient(discord.Client):
  async def on_ready(self):
    print('Logged on as {0}!'.format(self.user))

  async def on_raw_reaction_add(self, payload):
    if payload.message_id == config.POST_ID:
      channel = self.get_channel(payload.channel_id) # получаем объект канала
      message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
      member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию

      try:
        emoji = str(payload.emoji) # эмоджик который выбрал юзер
        role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)
      
        if(len([i for i in member.roles if i.id not in config.EXCROLES]) <= config.MAX_ROLES_PER_USER):
          await member.add_roles(role)
          print('[SUCCESS] User {0.display_name} has been granted with role {1.name}'.format(member, role))
        else:
          await message.remove_reaction(payload.emoji, member)
          print('[ERROR] Too many roles for user {0.display_name}'.format(member))
      
      except KeyError as e:
        print('[ERROR] KeyError, no role found for ' + emoji)
      except Exception as e:
        print(repr(e))

  async def on_raw_reaction_remove(self, payload):
    channel = self.get_channel(payload.channel_id) # получаем объект канала
    message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
    member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию

    try:
      emoji = str(payload.emoji) # эмоджик который выбрал юзер
      role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)

      await member.remove_roles(role)
      print('[SUCCESS] Role {1.name} has been remove for user {0.display_name}'.format(member, role))

    except KeyError as e:
      print('[ERROR] KeyError, no role found for ' + emoji)
    except Exception as e:
      print(repr(e))
# RUN
client = MyClient()
client.run(config.TOKEN) 
import discord
from discord import utils

import config

class MyClient(discord.Client):
  async def on_ready(self):
    print('Logged on as {0}!'.format(self.user))

  async def on_raw_reaction_add(self, payload):
    if payload.message_id == config.POST_ID:
      channel = self.get_channel(payload.channel_id) # получаем объект канала
      message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
      member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию

      try:
        emoji = str(payload.emoji) # эмоджик который выбрал юзер
        role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)
      
        if(len([i for i in member.roles if i.id not in config.EXCROLES]) <= config.MAX_ROLES_PER_USER):
          await member.add_roles(role)
          print('[SUCCESS] User {0.display_name} has been granted with role {1.name}'.format(member, role))
        else:
          await message.remove_reaction(payload.emoji, member)
          print('[ERROR] Too many roles for user {0.display_name}'.format(member))
      
      except KeyError as e:
        print('[ERROR] KeyError, no role found for ' + emoji)
      except Exception as e:
        print(repr(e))

  async def on_raw_reaction_remove(self, payload):
    channel = self.get_channel(payload.channel_id) # получаем объект канала
    message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
    member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию

    try:
      emoji = str(payload.emoji) # эмоджик который выбрал юзер
      role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)

      await member.remove_roles(role)
      print('[SUCCESS] Role {1.name} has been remove for user {0.display_name}'.format(member, role))

    except KeyError as e:
      print('[ERROR] KeyError, no role found for ' + emoji)
    except Exception as e:
      print(repr(e))

# RUN
client = MyClient()
client.run(config.TOKEN)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexander, 2021-02-14
@Alexandre888

perhaps the answer to your question is here

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question