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 неверный