Pull to refresh

Пишем Telegram бота на Ruby в 10 строк

Instant Messaging *Ruby *
Tutorial

После выпуска Telegram Bot Platform многие задумывались о написании своего бота. Этот пост описывает минимальные шаги, необходимые для написания собственного бота на Ruby. Для этого потребуется только аккаунт в Telegram и машина с установленным Ruby на ней.

Я выбрал Ruby из за удобного гема для работы с Telegram bot api.

Первое, что нужно сделать, это создать .rb файл, в котором будет храниться логика бота, к примеру, start_bot.rb, и добавить туда минимальный код, необходимый для работы бота:
require 'telegram/bot'
token = 'YOUR_TELEGRAM_BOT_API_TOKEN'
Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
    case message.text
    when '/start'
      bot.api.sendMessage(chat_id: message.chat.id, text: "Hello, #{message.from.first_name}")
    end
  end
end

Для работы сервера не хватает только установки гема. Установку можно совершить двумя способами:
1. Установка гема непосредственно на машину:
gem install telegram-bot-ruby

2. Используя Gemfile
gem 'telegram-bot-ruby'

с последующим выполнением
bundle

Я для простоты примера использовал первый способ.

Теперь необходимо получить токен для бота.
Заходим в Telegram, добавляем бота @BotFather, и создаем бота:


Далее добавляем токен в файл и получаем готовый сервер для бота:
require 'telegram/bot'
token = '118997426:AAFVFtYa15Z7ckyDUIHb578NazgepL4kmU8'
Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
    case message.text
    when '/start'
      bot.api.sendMessage(chat_id: message.chat.id, text: "Hello, #{message.from.first_name}")
    end
  end
end


Для проверки работы бота в начале запускаем сервер:
ruby start_bot.rb

А после пишем боту в Telegram:


Как видно, все работает.

PS: Бота после я удалил, поэтому мой токен, как и бот, недоступны.

UPD:
3 строки на Ruby
require 'telegram/bot'
token = '<>'
Telegram::Bot::Client.run(token) { |bot| bot.listen { |message| bot.api.sendMessage(chat_id: message.chat.id, text: 'Hi!') if message.text == '/start' } }


За Python спасибо lybin
3 строки на Python
from twx.botapi import TelegramBot
token = '<>'
while True: [lambda update: TelegramBot(token).send_message(update.message.chat.id, 'test message body') if update.message.text.startswith('/start') else None for update in TelegramBot(token).get_updates().wait()]

Tags:
Hubs:
Total votes 38: ↑22 and ↓16 +6
Views 52K
Comments Comments 35