Помогите с callback telegram telebot
Подскажите пожалуйста, что не так с этим кодом. Не изменяется состояние пользователя.
@bot.callback_query_handler(func=lambda call: True, state=UserInfoState.user_city)
def period(call: CallbackQuery):
if call.data == 'today':
bot.set_state(call.from_ user.id , UserInfoState.today )
bot.send_message(call.from_ user.id , 'Вы выбрали погоду на сегодня.')
elif call.data == 'five_day':
bot.set_state(call.from_ user.id , UserInfoState.five_day)
bot.send_message(call.from_ user.id , 'Вы выбрали погоду на 5 дней.')
В вашем коде есть несколько ошибок, которые могут влиять на изменение состояния пользователя:
**1. Неверный импорт:**
Убедитесь, что вы правильно импортировали `CallbackQuery` и `UserInfoState`.
**2. Отсутствует проверка:**
В функции `period` не проверяется, является ли `call.data` одним из ожидаемых значений (`'today'` или `'five_day'`).
**3. Ошибка в имени:**
В строке `bot.set_state(call.from_ user.id , UserInfoState.today )`
* **`from_ user`** - содержит пробел, который может вызывать ошибку.
**4. Неверный порядок:**
* Вызов `bot.send_message` должен быть **после** `bot.set_state`.
**Исправленный код:**
```python
from telebot.types import CallbackQuery, UserState
@bot.callback_query_handler(func=lambda call: True, state=UserState.user_city)
def period(call: CallbackQuery):
if call.data not in ('today', 'five_day'):
return
if call.data == 'today':
bot.set_state(call.from_ user.id , UserState.today )
bot.send_message(call.from_ user.id , 'Вы выбрали погоду на сегодня.')
elif call.data == 'five_day':
bot.set_state(call.from_ user.id , UserState.five_day)
bot.send_message(call.from_ user.id , 'Вы выбрали погоду на 5 дней.')
```
**Дополнительные советы:**
* Используйте `logging` для отслеживания ошибок и информации о выполнении кода.
* Добавьте проверки на `None` для `call.from_ user.id ` и других переменных, чтобы избежать ошибок.
* Изучите документацию TeleBot для более подробного ознакомления с обработчиками `callback_query` и состояниями пользователей.