@KirillqqMenn

Как исправить эту ошибку при выдаче роли?

Код ошибки:
Traceback (most recent call last):
  File "D:\Bot\venv\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\Bot\bot\cogs\moder.py", line 148, in mute
    await member.add_roles(role)
  File "D:\Bot\venv\lib\site-packages\discord\member.py", line 777, in add_roles
    await req(guild_id, user_id, role.id, reason=reason)
AttributeError: 'NoneType' object has no attribute 'id'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\Bot\venv\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "D:\Bot\venv\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "D:\Bot\venv\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'id'


Мой код:
def get_role(self, ctx:commands.Context):
        cur.execute(f'SELECT role_id FROM mutes WHERE guild_id = {ctx.guild.id}')
        muteRole = cur.fetchone()
        db.commit()
        return muteRole

@commands.command(name='set_mute_role')
    @commands.has_permissions(manage_guild = True)
    async def set_mute_role(self, ctx, role: discord.Role, role_id: int = None):
        if role:
            cur.execute(f'UPDATE mutes SET role_id = ? WHERE guild_id = ?', (role.id, ctx.guild.id))
            db.commit()
        else:
            cur.execute(f'UPDATE mutes SET role_id = ? WHERE guild_id = ?', (role_id, ctx.guild.id))
            db.commit()
        
        emb = discord.Embed(title = 'Успешно!', description = f'{ctx.message.author.mention}, роль для мута изменена на {role.mention}', color = 0x82c617)
        await ctx.send(embed=emb)

@commands.command(name='mute')
    @commands.has_permissions(ban_members = True)
    async def mute(self, ctx, member : discord.Member, *, reason = 'Причина не указана.'):
        role = discord.utils.get(ctx.guild.roles, id = Moder.get_role)
        await member.add_roles(role)
  • Вопрос задан
  • 265 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Во-первых, делать блокирующие обращения к БД из асинхронного кода - плохая идея. Во-вторых, зачем вы в параметр id при получении роли передаёте ссылку на метод класса, а не результат вызова метода объекта?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы