Как заменить предыдущее сообщение Inlinekeyboard обычным сообщением - PullRequest
0 голосов
/ 17 марта 2019

В моем боте пользователь должен взаимодействовать в основном с помощью Inlinekeyboard сообщений.

Так что, если пользователь пишет какое-то "обычное" сообщение или отправляет что-то, я должен каким-то образом изменить последнее Inlinekeyboardсообщение, чтобы продолжить процесс или дать ему некоторое сообщение.

См. рисунок ниже:

enter image description here

Пользователь написал какое-то сообщение, но яМне пришлось создать новую кнопку Inlinekeyboard с новым сообщением, потому что я не смог найти способ получить message_id предыдущей кнопки "Добро пожаловать" и изменить его.

Мой код:

HELP = range(1)

def start(bot, update):
    keyboard = [
                 [InlineKeyboardButton('Help', callback_data='help')]
               ]

    # Create initial message:
    message = 'Welcome.'

    update.message.reply_text(message, reply_markup=InlineKeyboardMarkup(keyboard))

def help(bot, update):

    keyboard = [
                 [InlineKeyboardButton('Help', callback_data='help')]
               ]

    bot.edit_message_text(
        text='Help ... help..',
        chat_id=update.callback_query.message.chat_id,
        message_id=update.callback_query.message.message_id,
        reply_markup=InlineKeyboardMarkup(keyboard)
    )
    bot.answer_callback_query(update.callback_query.id, text='')

def unknown(bot, update):

    message = 'Please press the Help button for more instructions.'

    keyboard = [
                 [InlineKeyboardButton('Help', callback_data='help')]
               ]

    update.message.reply_text(message, reply_markup=InlineKeyboardMarkup(keyboard))



# Create the EventHandler and pass it your bot's token.
updater = Updater(token=config.TELEGRAM_API_TOKEN)

# Get the dispatcher to register handlers:
dispatcher = updater.dispatcher

dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CallbackQueryHandler(help, pattern='help'))
dispatcher.add_handler(MessageHandler(Filters.all, unknown))

updater.start_polling()

updater.idle()    

С наилучшими пожеланиями.Клейсон Риос.

1 Ответ

0 голосов
/ 19 марта 2019

Если вы хотите редактировать предыдущие сообщения, которые бот отправил , вам необходимо сохранить их message_id (что вы уже знаете).

Так что вы можете просто сделать это:

sent_message = update.message.reply_text(
    message,
    reply_markup=InlineKeyboardMarkup(keyboard)
)

И тогда вы можете получить к нему доступ, как sent_message.message_id

Теперь для переменной sent_message вы можете сделать ее global или создать отдельный файл для обработки этих переменных, или в большем масштабе вы можете сохранить ее в база .

...