Как я могу реализовать диалог с ботом? (должна быть последовательность)
К примеру, при вводе /start
, бот выводит: » выбор: x или y», показывается клавиатура с x и y. Когда человек нажимает x, должны выполняться какие-то действия, при нажатии y — другие. после этого он уже не должен написать y, и инициировать выполнение уже других действий. ЛИБО X, ЛИБО Y. Чтобы выбрать y, надо писать заново /start
. Проверяю входящие сообщения так:
if text == '/start': bot.sendMessage(author, strings.starts) show_keyboard = {'keyboard': [["x", "y"], ["z"]]} bot.sendMessage(author, 'Please, choose', reply_markup=show_keyboard) if text == 'y': *some actions*
нужна последовательность. помогите, пожалуйста.
желательно, с примерам
Анонимный пользователь Изменен статус публикации
Вот мой вариант
import telebot #pyTelegramBotAPI from telebot import types import shelve bot = telebot.TeleBot('token') @bot.message_handler(command=['start']) def start(mess): chat_id = mess.chat.id storage = shelve.open('shelve') storage[str(chat_id)] = 'init' storage.close() markup = types.ReplyKeyboardMarkup() btn_x = types.KeyboardButton('x') btn_y = types.KeyboardButton('y') markup.add(btn_x, btn_y) bot.send_message(chat_id, 'x или y', reply_markup=markup) @bot.message_handler(func=lambda mess: mess.text == 'y' and mess.content_type == 'text') def y(mess): chat_id = mess.chat.id storage = shelve.open('shelve') state = storage[str(chat_id)] if state != 'init': pass storage.close() else: storage[str(chat_id)] = 'y' storage.close() #твой код @bot.message_handler(func=lambda mess: mess.text == 'x' and mess.content_type == 'text') def x(mess): chat_id = mess.chat.id storage = shelve.open('shelve') state = storage[str(chat_id)] if state != 'init': pass storage.close() else: storage[str(chat_id)] = 'y' storage.close() #твой код if __name__ == '__main__': bot.polling(True)