2017-09-23 1 views
0

Je veux envoyer des données via InlineKeyboardMarkup en fonction:Telebot InlineKeyboardMarkup rappel

def choosing_room(message): 
    keyboard = telebot.types.InlineKeyboardMarkup() 
    for room_id in imagi_room.get_room_ids(): 
     room = imagi_room.get_room_by_id(room_id) 
     keyboard.add(telebot.types.InlineKeyboardButton(text=room['master_name'], callback_data='room_' + str(room_id))) 
    bot.send_message(message.chat.id, text='Choose', reply_markup=keyboard) 

@bot.callback_query_handler(func=lambda c: 'room_' in c.data) 
def call_back_room(c): 
    ... 
    bot.register_next_step_handler(selected, get_select) # Not working 

ou

@bot.callback_query_handler(func=lambda c: 'room_' in c.data) 
def call_back_room(c): 
    ... 
    foo(c.message) 

def foo(message): 
    photo_mess = bot.send_message(message.chat.id, text='Send a photo') 
    photo_id = photo_mess.photo[-1].file_id #Error NonType... 

Pourquoi register_next_step_handler ou deuxième variante fonctionne pas dans la fonction de rappel? Comment puis-je envoyer des données comme ID?

Répondre

0

Je n'ai pas trouvé de solution avec rappel. Ma solution:

def choosing_room(message): 
    ... 
    message = bot.send_message(message.chat.id, text=rooms_str) 
    bot.register_next_step_handler(message, room_selected) 

def room_selected(message): 
    photo_mess = bot.send_message(message.chat.id, text='Send photo') 
    # Use functools.partial 
    bot.register_next_step_handler(photo_mess, partial(add_player_photo, room_id)) 

def add_player_photo(room_id, message): 
    ...