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
  @name = get_me&.result&.first_name
  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 "#{get_me&.result&.first_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. Basically struct{ok=true,result=...}.

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&.result&.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

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 message2
you can't set both before_all and after_all on one command
true

2: 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
- 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)
parse_mode, etc. depends see sendMessage -

reply style3:

  • :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.