Пишу регистрацию боту в телеграм с помощью библиотеки Aiogram с использованием SQLite.
Регистрация проходит успешно, но при повторном "входе" пользователя, когда система должна проверить наличие его уникального ID в базе данных и, если этот ID есть в базе, то перекинуть пользователя на меню, минуя регистрацию, выдается ошибка:
cur.execute("INSERT INTO 'users' ('user_id', 'username', 'first_name', 'last_name') VALUES (?, ?, ?, ?)",
sqlite3.IntegrityError: UNIQUE constraint failed: users.user_id
Прилагаю код бота:
async def cmd_start(message: types.Message):
isreg = await sqlite_db.user_exists(message.from_user.id)
if not isreg:
await sqlite_db.add_user(message.from_user.id,
message.from_user.username,
message.from_user.first_name,
message.from_user.last_name)
await message.answer(text=TEXT_CMD_START1, parse_mode='HTML')
await message.answer(text=TEXT_CMD_START2, reply_markup=kb_start1, parse_mode='HTML', disable_web_page_preview=True)
else:
await message.answer(text=TEXT_CMD_MENU, reply_markup=kb_menu, parse_mode='HTML')
Код базы данных:
async def add_user(user_id, username, first_name, last_name):
cur.execute("INSERT INTO 'users' ('user_id', 'username', 'first_name', 'last_name') VALUES (?, ?, ?, ?)",
(user_id, username, first_name, last_name,))
db.commit()
async def user_exists(user_id):
result = cur.execute("SELECT * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
return bool(len(result))
Скорее всего проблема в том, что, даже если пользователь зарегистрирован, то условие IF все равно пропускает его на регистрацию почему-то.
Не уверен на 100%, что это так, но вероятно, что так и есть.