Где найти бота discord.py в атрибутах self для назначения ролей

Я владелец сервера Discord, на котором не так много людей, поэтому я хочу, чтобы они представились, чтобы я мог отслеживать, кто есть кто. После присоединения участники имеют доступ только к #introductions каналу. Когда они вводят свое имя, им присваивается роль Member.

Нет никакой discord.py функции, которая делает это, поэтому я должен разделить это на две части: во-первых, получить автора самого последнего сообщения, а во-вторых, назначить им роль Member. Первая часть совсем не сложная, но вторая часть выдает ошибку.

Код

class UtilBot(commands.Bot):
    def __init__(self, *, command_prefix, name):
        commands.Bot.__init__(
            self, command_prefix=command_prefix, self_bot=False)
        with open(r'.\docs\channels.csv') as channels:
            channel_ids = list(csv.reader(channels, delimiter='\t'))
            for i, item in enumerate(channel_ids):
                channel_ids[i] = [int(item[0]), item[1]]
            self.channels = dict(channel_ids)
        self.channel_commands = {
            '#introductions': self.introduction,
            '#dev-build': self.introduction} #Allow for feature testing
        self.name = name

    async def on_ready(self):
        print(f"Utils is running")

    async def on_message(self, message):
        channel = self.channels[message.channel.id]
        print(channel)
        try:
            self.channel_commands[channel](message)
        except KeyError:
            pass

    def introduction(self, message):
        member = message.author
        role = discord.utils.get(member.guild.roles, name="Member")
        self.add_roles(member, role)

    def dev_build(self, message):
        print(f'{message.author.name} ({self.channels[message.channel.id]})')
        print(message.content)

Ошибка

AttributeError: 'UtilBot' object has no attribute 'add_roles'

Я спрашиваю, как исправить эту ошибку, сохранив структуру ООП, и есть ли альтернативный метод, выполняющий ту же задачу. Если я знаю, где найти атрибут self, соответствующий боту, я легко могу это исправить, но, глядя на self.__dict__, я не могу его найти.


person Jacob Lee    schedule 21.11.2020    source источник


Ответы (1)


Вместо self.add_roles(member, role) попробуйте member.add_roles(role)

person SavageUnicorn    schedule 24.11.2020
comment
Да, это почти единственное. Я искал ответы до того, как переписать discord.py, поэтому очевидно, что это не сработает. - person Jacob Lee; 24.11.2020