#python #telegram_api
Как я могу реализовать диалог с ботом? (должна быть последовательность)
К примеру, при вводе /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*
нужна последовательность. помогите, пожалуйста.
желательно, с примерам
Ответы
Ответ 1
Вот мой вариант 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)
Комментариев нет:
Отправить комментарий