В вашем коде есть несколько проблем, которые могут вызывать неправильное поведение при проверке ID пользователя в базе данных. Давайте разберем ваш код и предложим исправления.
1. **Ошибка в определении функции `get_users_exist`**: У вас в коде вызывается функция `get_users_exist`, но вы не представили ее определение. Предположим, что эта функция возвращает `True`, если ID пользователя существует в базе данных. Убедитесь, что эта функция существует и правильно возвращает True/False.
2. **Проблема с возвращаемым значением `get_users`**: Функция `get_users` возвращает одну строку из базы данных, что может быть `None`, если пользователь не найден. Вам необходимо обработать это корректно.
3. **Сравнение ID**: Вам нужно правильно сравнивать ID пользователя из базы данных и ID из сообщения. У вас есть строки `db.get_users(message.chat.id)` и `message.chat.id`, которые могут не совпадать из-за неправильного обращения к возвращаемому значению. Метод `fetchone` возвращает кортеж, содержащий строку с ID пользователя, поэтому его нужно правильно разыменовать.
4. **Проверка на наличие ID**: Упрощаем условие. Вместо проверки на равенство вы можете проверить, содержится ли ID в результате запроса.
Вот возможный исправленный вариант вашего кода:
### db.py
```python
import sqlite3
def create_table():
db = sqlite3.connect('data.db', check_same_thread=False)
cursor = db.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS white(adduser_id INT)")
db.commit()
db.close()
def get_users(adduser_id):
db = sqlite3.connect('data.db', check_same_thread=False)
cursor = db.cursor()
cursor.execute("SELECT adduser_id FROM white WHERE adduser_id=?", (adduser_id,))
row = cursor.fetchone()
db.close()
return row is not None # Возвращаем True, если пользователь найден
```
### main.py
```python
@dp.message_handler(commands=['checkwhite'])
async def close_bot(message: types.Message):
if db.get_users(message.chat.id): # Проверяем, существует ли пользователь
await bot.send_message(chat_id=message.chat.id, text='Добро пожаловать')
print("Пользователь найден:", message.chat.id)
else:
await bot.send_message(chat_id=message.chat.id, text='У тебя нету прав')
print("Пользователь не найден:", message.chat.id)
```
### Что изменилось:
1. Функция `get_users` теперь просто проверяет, найден ли пользователь, и возвращает `True` или `False`, при этом закрывая соединение с базой данных после запроса.
2. В `main.py` мы больше не используем лишние условия – теперь с помощью одного условия мы проверяем существование пользователя и выполняем соответствующий ответ.
3. Рекомендуется добавлять `CREATE TABLE IF NOT EXISTS` в вашем коде для предотвращения ошибок, если таблица уже существует.
Проверьте, чтобы в базе данных действительно существовали ожидаемые значения и соответствующие типы данных. Это должно помочь вам правильно проверять доступы пользователей.