es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Submenú de Telebot

Estoy creando un bot en Telegram y tengo un menú. El problema es que cada vez que alguien elige una opción se envía un nuevo mensaje en lugar de modificar el menú. Entiendo que esto se debe a la función send_message, pero no sé cómo hacerlo.
Comencé a programar hace unas semanas, les ruego su paciencia. Muchas gracias por su comprensión.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para modificar el menú en lugar de enviar un nuevo mensaje cada vez que un usuario elige una opción, necesitarás editar el mensaje original utilizando la función edit_message_reply_markup. Así es como puedes modificar tu código existente para lograr esto:

    @bot.message_handler(commands=['menu'])
    def menu(message):
       keyboard = telebot.types.InlineKeyboardMarkup()
       keyboard.add(telebot.types.InlineKeyboardButton('Reglas', callback_data='Reglas'))
       keyboard.add(telebot.types.InlineKeyboardButton('Consultas', callback_data='Consultas'))
       keyboard.add(telebot.types.InlineKeyboardButton('Historia', callback_data='Historia'))
       keyboard.add(telebot.types.InlineKeyboardButton('Tiradas', callback_data='Tiradas'))
       keyboard.add(telebot.types.InlineKeyboardButton('Admin', callback_data='adm'))
       bot.send_message(message.chat.id, 'Has llamado al menú?', reply_markup=keyboard)
    
    @bot.callback_query_handler(func=lambda c:True)
    def submenus(c):
        if c.data == 'Tiradas':
            keyboard = telebot.types.InlineKeyboardMarkup()
            keyboard.add(telebot.types.InlineKeyboardButton('Tirada suelta', callback_data='ts'))
            keyboard.add(telebot.types.InlineKeyboardButton('Tirada de personajes',callback_data='tp'))
            bot.edit_message_reply_markup(chat_id=c.message.chat.id, message_id=c.message.message_id, reply_markup=keyboard)
    

    La función edit_message_reply_markup toma el ID del chat y el ID del mensaje original, junto con el nuevo marcado de teclado. Esto reemplazará el teclado existente con el nuevo sin enviar un nuevo mensaje.

Comments are closed.