mohovoy
@mohovoy
Что-то там программирую, кто бы знал что именно?

Не выводит названия роли в чат, ошибка AttributeError: 'NoneType' object has no attribute 'mention', но id всех ролей выводит. В чем ошибка?

Делаю своего экономического бота. Создал команду !sc-shop, она была выводить все роли из базы данных. Но при её выполнении, выдаётся ошибка AttributeError: 'NoneType' object has no attribute 'mention'
@client.command(aliases=['shop'])
async def __shop(ctx):
    embed = discord.Embed(
        title='Магазин',
        description='Здесь вы можете приобрести роль на сервере за **SCoins**',
        color=0xCC33FF
    )

    for row in cursor.execute(f'SELECT role_id, cost FROM shop WHERE id = {ctx.guild.id} ORDER BY cost'):
        embed.add_field(
            name=f'Стоимость: **{row[1]} SCoins**',
            value=f'Роль - {ctx.guild.get_role(row[0]).mention}',
            inline=False
        )

    await ctx.send(embed = embed)

Как я понял, он не нашел id роли, поэтому он возвращает NoneType, а в следствии не может найти mention. Но если переписать команду, что бы выводился только id ролей:
@client.command(aliases=['shop'])
async def __shop(ctx):
    embed = discord.Embed(
        title='Магазин',
        description='Здесь вы можете приобрести роль на сервере за **SCoins**',
        color=0xCC33FF
    )

    for row in cursor.execute(f'SELECT role_id, cost FROM shop WHERE id = {ctx.guild.id} ORDER BY cost'):
        embed.add_field(
            name=f'Стоимость: **{row[1]} SCoins**',
            value=f'Роль - {row[0]}',
            inline=False
        )

    await ctx.send(embed = embed)

То она отобразит все роли с id
Помогите решить проблему, что бы выводилась названия каждой из ролей
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Проверьте type(row[0]), скорее всего вы храните/БД возвращает ID в виде строки, get_role принимает ID в виде int
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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