Skip to content
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
lib
tool
.gitignore
Gemfile
LICENSE.txt
README.md
Rakefile
tgbot.gemspec

README.md

Tgbot

Gem Version Bot API Version

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

Install

gem install tgbot

Usage

Tgbot.run TOKEN, proxy: 'http://127.0.0.1:1080' do
  on 'start' do
    reply "#{name}, at your service."
  end
end
# or
bot = Tgbot.new TOKEN, proxy: 'http://127.0.0.1:1080'
bot.on('start'){ reply "#{name}, at your service." }
bot.run # will block current thread

Tgbot.run 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 '127.0.0.1:1080'

and in that (block):

method_missing

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."
end

finish do (do sth when Ctrl-C) end

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

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
true

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. File.new("a.png")
option type notes example
media false set to false to force sendDocument '127.0.0.1:1080'
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.

Contribute

PRs/issues are welcome.

You can’t perform that action at this time.