Задать вопрос
@leet896

Не работает Inline keyboards Ruby telegram Bot, Как сделать правильно?

Приветствую всех, делаю кнопки Inline keyboards для бота, но ни не работают все равно..уже который час мучаюсь
брал с офф github https://github.com/atipugin/telegram-bot-ruby#Usag...

Ребят скажите , что и где заменить , чтобы код заработал, заранее во многом благодарен!

require 'telegram/bot'

token = ''


Telegram::Bot::Client.run(token) do |bot|
bot.listen do |message|
  case message.text
  when Telegram::Bot::Types::CallbackQuery
	    if message.data == 'touch'
      bot.api.send_message(chat_id: message.from.id, text: "Don't touch me!")
	  end
	  if message.data == 'test'
      bot.api.send_message(chat_id: message.from.id, text: "Don't touch me!")
	  end
  when '/start'
    kb = [
      Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Test', callback_data: 'test1'),
      Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Touch me', callback_data: 'touch'),
      Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Switch to inline', switch_inline_query: 'some text') 
	  ]
    markup = Telegram::Bot::Types::InlineKeyboardMarkup.new(inline_keyboard: kb)
    bot.api.send_message(chat_id: message.chat.id, text: 'Make a choice', reply_markup: markup)
  end
end
end
  • Вопрос задан
  • 1013 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
triopsidae
@triopsidae
Проблема в том что у Вас case принимает message.text из-за этого оно будет выдавать ошибку при нажатии на кнопку. Пример решения:
Telegram::Bot::Client.run(token) do |bot|
    bot.listen do |message|
        case message
        when Telegram::Bot::Types::CallbackQuery
            case message.data
            when 'touch'
                bot.api.send_message(chat_id: message.from.id, text: "Don't touch me!")
            when 'test'
                bot.api.send_message(chat_id: message.from.id, text: "Don't test me!")
            end
        when Telegram::Bot::Types::Message
            case message.text
            when '/start'
                kb = [
                    Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Test', callback_data: 'test'),
                    Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Touch me', callback_data: 'touch'),
                    Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Switch to inline', switch_inline_query: 'some text') 
                ]
                markup = Telegram::Bot::Types::InlineKeyboardMarkup.new(inline_keyboard: kb)
                bot.api.send_message(chat_id: message.chat.id, text: 'Make a choice', reply_markup: markup)
            end
        end
    end
end

Код не идеальный, надеюсь хотя бы понятен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы