Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Gem Version Bot API Version

A tiny but easy-to-use wrapper of Telegram Bot API.


gem install tgbot

Usage TOKEN, proxy: '' do
  on 'start' do
    reply "#{name}, at your service."
# or
bot = TOKEN, proxy: ''
bot.on('start'){ reply "#{name}, at your service." } # will block current thread token, **options do (block) end

Start a long polling bot.

argument type notes example
token String ask BotFather for one '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
option type notes example
proxy String http only ''

and in that (block):


Just call the native bot api. e.g. getMe() send_message(chat_id: 123, text: 'hello').

Returns an OpenStruct of the replied object.

self.debug = true | false (default)

Show debug info (every message, matched command).

start do (do sth when it is connected) end

start do
  puts "\e[33m#{get_me&.first_name}\e[32m, at your service."

finish do (do sth when Ctrl-C) end

finish do
  puts "おやすみなさい"

on pattern=nil, **options do |match_data, update, task| (block) end

Match pattern and do something.

argument type notes example
pattern nil match all (including inline query etc.) on do ... end
- String | Regexp match all text1 /^r(\d*)d(\d*)(?:\+(\d*))?/

1: for convenience, the bot's @username is trimmed for easilier matching.

e.g. "hey bot, /r3d6@mybot+1 lol" => #<MatchData "/r3d6+1" 1:"3" 2:"6" 3:"1">.

option type notes example
name String just give it a name 'roll!'
before_all true set to run before other ons matching the same message true
after_all true set to run after other ons matching the same message3
you can't set both before_all and after_all on one command

3: order is * -> before2 -> before1 -> other -> after1 -> after2 -> *.

and in that (block):

debug message

Puts that message to STDERR when it is in debug mode.

reply *things, **options

Reply to the matched message.

argument type notes example
thing String | can .to_s will use parse_mode: Markdown 'hello world'
- IO will use sendPhoto if it is a photo, etc."a.png")
option type notes example
media false set to false to force sendDocument ''
style :none | :at | nil (default) reply style2 :at
parse_mode, etc. depends see sendMessage -

reply style2:

  • :none : don't add reply info, so the sender won't receive a prompting.
  • :at: use [inline mention of a user](tg://user?id=123456789) in replied message.
  • nil (default): include reply_to_message_id in replied message object.

interrupt! done!

Stop processing this message (if there be further blocks matching it). see before_all after_all.

retry! n=1

Enqueue this message again for at most n times.


PRs/issues are welcome.

You can’t perform that action at this time.