2016-12-17 21 views
6

Python telgraf botu sarıcısıyla birden fazla geri arama sorgu işleyicisi kullanmak mümkün mü?Birden fazla geri arama sorgu işleyicisi?

Birden çok benzersiz işleyiciye sahip olmak isterim ancak anlayabildiğim kadarıyla yalnızca bir tane olabilir. Bu, başlatan mesaj metninde gösterdiğim satır içi klavyeleri temel almam gerektiği anlamına geliyor.

Eksik olduğum bir şey var mı?

cevap

6

Bunun için ConversationHandler sarıcısını kullanabilirsiniz. Kod feryat edin:

from telegram import InlineKeyboardButton, InlineKeyboardMarkup 
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler 

TELEGRAM_HTTP_API_TOKEN = 'PASTE_TELEGRAM_HTTP_API_TOKEN' 

FIRST, SECOND = range(2) 

def start(bot, update): 
    keyboard = [ 
     [InlineKeyboardButton(u"Next", callback_data=str(FIRST))] 
    ] 
    reply_markup = InlineKeyboardMarkup(keyboard) 
    update.message.reply_text(
     u"Start handler, Press next", 
     reply_markup=reply_markup 
    ) 
    return FIRST 

def first(bot, update): 
    query = update.callback_query 
    keyboard = [ 
     [InlineKeyboardButton(u"Next", callback_data=str(SECOND))] 
    ] 
    reply_markup = InlineKeyboardMarkup(keyboard) 
    bot.edit_message_text(
     chat_id=query.message.chat_id, 
     message_id=query.message.message_id, 
     text=u"First CallbackQueryHandler, Press next" 
    ) 

    reply_markup = InlineKeyboardMarkup(keyboard) 

    bot.edit_message_reply_markup(
     chat_id=query.message.chat_id, 
     message_id=query.message.message_id, 
     reply_markup=reply_markup 
    ) 
    return SECOND 

def second(bot, update): 
    query = update.callback_query 
    bot.edit_message_text(
     chat_id=query.message.chat_id, 
     message_id=query.message.message_id, 
     text=u"Second CallbackQueryHandler" 
    ) 
    return 

updater = Updater(TELEGRAM_HTTP_API_TOKEN) 

conv_handler = ConversationHandler(
    entry_points=[CommandHandler('start', start)], 
    states={ 
     FIRST: [CallbackQueryHandler(first)], 
     SECOND: [CallbackQueryHandler(second)] 
    }, 
    fallbacks=[CommandHandler('start', start)] 
) 

updater.dispatcher.add_handler(conv_handler) 

updater.start_polling() 

updater.idle() 
0

Sen CallbackQueryHandler pattern argüman kullanabilirsiniz. Telegram.CallbackQuery.data karşı test Regex desen.

def motd(bot, update): 
    motd_keyboard = [[InlineKeyboardButton('I agree', 
     callback_data='motd_callback_button')]] 
    motd_markup = InlineKeyboardMarkup(motd_keyboard) 
    update.message.reply_text('Message of the day', 
     reply_markup=motd_markup) 

def motd_callback_button(bot, update): 
    pass 

def main(): 
    dp = DjangoTelegramBot.dispatcher 
    dp.add_handler(CallbackQueryHandler(motd_callback_button, 
     pattern='^motd_callback_button$')) 
İlgili konular