Задать вопрос
mikhail_II
@mikhail_II

Каким образом хэндлеры pyTelegramBotAPI обрабатывают входящие сообщения?

Суть в следующем:

Имеется простой бот на pyTelegramBotAPI. Есть база SQLite, в которой для каждой некоей группы хранятся данные, которые необходимо отправить пользователю по запросу.
Алгоритм такой: пользователь инициирует регистрацию себя в группе командой /register, потом отправляет номер группы, которая заносится в shelve-хранилище. После чего уже другой командой получает нужные данные для своей группы.

Вот пример хэндлера сообщений для /register:

@bot.message_handler(commands=['register'])
def register(message):
  bot.send_message(message.chat.id, "Please state your group number (looks something like 2xxx).")
  group = message.text
  match = re.match('2[1-5][1-5][1-5]', group, flags=0)
  if len(match)>0 :
        bot.send_message(message.chat.id, "Invalid group number, please register again.")
  else : 
    with shelve.open(slocal) as storage:
          storage[str(chat_id)] = group
    bot.send_message(message.chat.id, "Group updated successfully.")


Как работают хэндлеры сообщений, т.е. как внутри хэндлера последовательно "слушать сообщения"? Например, сейчас тут после команды /register сразу происходит обработка всего блока. Нужно создавать для каждого сообщения отдельный/вложенный хэндлер? Не могу понять каким образом лучше реализовать диалог с клиентом.
  • Вопрос задан
  • 3105 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@nllm
Надо фиксировать состояния пользователя и в зависимости от текущего состояния производить ту или иную операцию. Тогда сможете выстраивать диалог
Ответ написан
Комментировать
@AlmazKayum
Как можно фиксировать состояние пользователя?
Ответ написан
Комментировать
@N1GZ
В моём случае используется такая магия:
msg = bot.send_message(message.chat.id, config.start_auth_no_message)
bot.register_next_step_handler(msg, reg)

reg - функция, которая обработает следующее сообщение этого пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы