Вероятно, причина заключается в том, что при каждом запросе команды /start бот сохраняет только последний идентификатор пользователя в базу данных, перезаписывая предыдущий.
Для того чтобы модифицировать код бота и сохранять идентификаторы всех пользователей, вам следует внести следующие изменения:
1. Создать новую таблицу в базе данных для хранения идентификаторов и имен пользователей. Например, таблицу `users` с полями `user_id` (идентификатор пользователя) и `username` (имя пользователя).
2. В коде бота необходимо изменить логику сохранения пользователя в базу данных. При каждом запросе команды /start нужно проверять, существует ли уже запись с идентификатором текущего пользователя в таблице `users`. Если запись с таким идентификатором уже существует, можно обновить имя пользователя. Если записи нет, то нужно добавить новую запись.
Пример измененной функции для сохранения пользователя в базе данных:
```python
def save_user_to_db(user_id, username):
# Подключение к базе данных
connection = sqlite3.connect('database.db')
cursor = connection.cursor()
# Проверка наличия записи с текущим идентификатором пользователя
cursor.execute("SELECT * FROM users WHERE user_id=?", (user_id,))
result = cursor.fetchone()
# Если запись существует, обновляем имя пользователя
if result:
cursor.execute("UPDATE users SET username=? WHERE user_id=?", (username, user_id))
# Если записи нет, добавляем новую запись
else:
cursor.execute("INSERT INTO users (user_id, username) VALUES (?, ?)", (user_id, username))
connection.commit()
connection.close()
```
3. Внесите изменения в основную функцию бота для вызова функции `save_user_to_db` с идентификатором и именем пользователя:
```python
@bot.message_handler(commands=['start'])
def handle_start(message):
user_id = message.from_user.id
username = message.from_user.username
save_user_to_db(user_id, username)
# Добавьте остальной функционал обработки команды /start
bot.reply_to(message, f"Привет, {username}! Добро пожаловать!")
```
Таким образом, после проведенных изменений ваш бот будет корректно сохранять идентификатор и имя каждого пользователя при каждом запросе команды /start.