Как изменить код для кнопок таким образом, чтобы они отображались под сообщением в виде клавиатуры "replyKeyboard", а не встроенной клавиатуры "InlineKeyboard"?

Как правильно переписать код, чтобы он работал с кнопками на клавиатуре, и не вызывал ошибку "invalid literal for int() with base 10" в функции `def echo_message2 (message)`. При этом код не должен обрабатывать данное сообщение.
  • 10 октября 2023 г. 9:47
Ответы на вопрос 1
Чтобы кнопки отображались в виде клавиатуры "replyKeyboard", а не "InlineKeyboard", необходимо использовать метод `ReplyKeyboardMarkup` из модуля `telegram` для создания клавиатуры с кнопками. 

Для переписывания кода таким образом, чтобы не вызывалась ошибка "invalid literal for int() with base 10" в функции `def echo_message2 (message)`, можно воспользоваться проверкой типа сообщения на равенство "text" и игнорировать сообщения других типов.

Приведу пример кода, который решает обе задачи:

```python
from telegram import ReplyKeyboardMarkup
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# Функция, которая будет обрабатывать команду /start
def start(update, context):
    # Отправляем приветственное сообщение
    context.bot.send_message(chat_id=update.effective_chat.id, text="Привет! Я бот с кнопками.")
    # Создаем клавиатуру с кнопками
    keyboard = ReplyKeyboardMarkup([["Кнопка 1"], ["Кнопка 2"]])
    # Отправляем клавиатуру
    context.bot.send_message(chat_id=update.effective_chat.id, text="Выбери кнопку:", reply_markup=keyboard)

# Функция, которая будет обрабатывать сообщения с текстом
def echo_message(update, context):
    # Получаем текст сообщения
    text = update.message.text
    # Отправляем сообщение
    context.bot.send_message(chat_id=update.effective_chat.id, text=f"Ты написал: {text}")

# Функция, которая будет игнорировать сообщения других типов (фото, видео и т.д.)
def echo_message2(update, context):
    pass

def main():
    # Создаем экземпляр класса Updater
    updater = Updater(token='YOUR_BOT_TOKEN', use_context=True)

    # Получаем экземпляр класса Dispatcher
    dispatcher = updater.dispatcher

    # Регистрируем обработчики команд
    dispatcher.add_handler(CommandHandler("start", start))

    # Регистрируем обработчик для текстовых сообщений
    dispatcher.add_handler(MessageHandler(Filters.text, echo_message))

    # Регистрируем обработчик для остальных типов сообщений
    dispatcher.add_handler(MessageHandler(Filters.all, echo_message2))

    # Запускаем бота
    updater.start_polling()

    # Останавливаем бота при нажатии Ctrl + C
    updater.idle()

if __name__ == '__main__':
    main()
```

Замените `'YOUR_BOT_TOKEN'` на токен вашего бота. Убедитесь, что у вас установлена библиотека `python-telegram-bot` версии 13.0 или выше, для поддержки клавиатур "replyKeyboard".
Похожие вопросы