AttributeError: 'NoneType' object has no attribute 'id' disnake

class key(disnake.ui.Modal):
def __init__(bot):
    components = [
        disnake.ui.TextInput(
            label=f'Введите ID модератора',
            placeholder=f"1234567890",
            custom_id="id",
            style=TextInputStyle.short,
            max_length=18,
        ),
    ]
    super().__init__(title="CouponTools", components=components)

async def callback(self, inter: disnake.ModalInteraction):
    self.db = UserDataBasee()
    secret = ["CMC", "CMCT", "TCMC", "C", "MC", "T"]
    id = random.randint(0, 99)
    user2 = inter.guild.get_member(int(inter.text_values['id']))
    user3 = int(inter.text_values['id'])
    key = f"{user2}{id}{random.choice(secret)}"
    member = user2
    user = await self.db.get_user(member)
    await self.db.create_table()
    await self.db.add_user(member)
    await self.db.update_key_lvl(member, key, 1)
    embed = disnake.Embed(title="Tools CouponMC", description=f"Создание ключа для модератора...\n"\
                                   f"никнейм Модератора: <@{user3}> \n"\
                                   f"Ключ: {key}\n"\
                                   f"Уровень: 1\n"\
                                   ,color=0x04de66)
    await inter.response.send_message(embed=embed)


class UserDataBasee:
    def __init__(self):
        self.name = 'dbs/keytools.db'


    async def create_table(self):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = '''CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY,
                key INTEGER,
                lvl INTEGER
            )'''
            await cursor.execute(query)
            await db.commit()

    async def get_user(self, user: disnake.Member):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'SELECT * FROM users WHERE id = ?'
            await cursor.execute(query, (user.id,))
            return await cursor.fetchone()

    async def add_user(self, user: disnake.Member):
        async with aiosqlite.connect(self.name) as db:
            if not await self.get_user(user.id):
                cursor = await db.cursor()
                query = 'INSERT INTO users (id, key, lvl) VALUES (?, ?, ?)'
                await cursor.execute(query, (user.id, 0, 0))
                await db.commit()

    async def update_key_lvl(self, user: disnake.Member, key: int, lvl: int):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'UPDATE users SET key = ?, lvl = ? WHERE id = ?'
            await cursor.execute(query, (key, lvl, user.id))
            await db.commit()
    await self.callback(interaction)
  File "c:\Users\kazti\Desktop\CouponMC BOTS\cogs\modtools.py", line 339, in callback
    user = await self.db.get_user(member)
  File "c:\Users\kazti\Desktop\CouponMC BOTS\utils\dbkey.py", line 25, in get_user
    await cursor.execute(query, (user.id,))
AttributeError: 'NoneType' object has no attribute 'id'

Ответы (1 шт):

Автор решения: Justiks

Из документации disnake:

get_member(user_id, /)
...
Returns:
The member or None if not found.

Очевидно, что ошибка начинается со строки в user2 = inter.guild.get_member(int(inter.text_values['id'])).

guild.get_member() возвращает None, т.к. не может найти пользователя с таким id в вашей гильдии. Скорее всего человека с id, введенным в поле ввода, нету в вашем канале, либо его вообще не существует. Убедитесь что вы вводите правильный id.

Можете проверить правильность введенного id при помощи вспомогательной команды, к примеру:

@bot.command()
async def hello(ctx):
    member = await ctx.guild.get_member(<айди юзера, которого вы ищете>)
    print(member)  # Если возвращает None, то id неверный
→ Ссылка