Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Последовательность диалогов Telegram

#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)

Комментариев нет:

Отправить комментарий