@kirka2022

Что делать если при попытке выдачи роли через бота дискорд появляется ошибка?

Здравствуйте я пишу бота на python для дискорд который будет использоваться для получения роли на любом сервере но при вводе команды бота для выдачи в консоли бота выскакивает ошибка :
Ignoring exception in command protect:
Traceback (most recent call last):
  File "C:\Users\Kirill-pc\AppData\Local\Programs\Python\Python37\lib\site-packa
ges\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\Kirill-pc\Desktop\admin\bot.py", line 23, in protect
    await author.add_roles(role)
  File "C:\Users\Kirill-pc\AppData\Local\Programs\Python\Python37\lib\site-packa
ges\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 "C:\Users\Kirill-pc\AppData\Local\Programs\Python\Python37\lib\site-packa
ges\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Kirill-pc\AppData\Local\Programs\Python\Python37\lib\site-packa
ges\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Kirill-pc\AppData\Local\Programs\Python\Python37\lib\site-packa
ges\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Att
ributeError: 'NoneType' object has no attribute 'id'

вот код бота:
import discord
from discord.ext import commands

TOKEN = "OTUwMjIxNTUyMDkwMjM0OTAw.YiVwyA.TGXuUXTYpH80ujpqqLa0B9UI4Gk"

bot = commands.Bot(command_prefix=('ab.'))
bot.remove_command( 'help' )

@bot.event
async def on_ready():
    print("Я запущен!")

@bot.command()
async def pro(ctx):
    await ctx.send('Недостаточно прав')

@bot.command()
async def protect(ctx):
    author = ctx.message.author
    guild = bot.get_guild(805137789661872129)
    role = guild.get_role(940997266100064316)

    await author.add_roles(role)


bot.run(TOKEN)
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Что делать? Открыть глаза, прочитать ошибку, понять ошибку. Мыслить логически.
await req(guild_id, user_id, role.id, reason=reason)
AttributeError: 'NoneType' object has no attribute 'id'

"У None нет атрибута id". Т.е. вместо некоего объекта с атрибутом id передали None.
Смотрим на строку кода и ищем обращение к атрибуту id. Это role.id, т.е. вместо параметра роли в метод передали None.
Смотрим выше, пока не найдём ссылку на строку не из discord.py.
await author.add_roles(role)
Т.е. твоя переменная role имеет значение None.
Ищем эту строку в коде, потом смотрим выше откуда взялось role.
role = guild.get_role(940997266100064316)
Смотрим документацию на get_role().
Returns the role or None if not found.

Т.е. role может содержать None, если переданный id не соответствует роли в этом сервере.
Вот тебе и ответ. Перепроверь id, который ты передаёшь в get_role().
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы