class TelegramBot::Bot
Constants
- ENDPOINT
Attributes
logger[R]
token[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/telegram_bot/bot.rb, line 5 def initialize(opts = {}) # compatibility with just passing a token if opts.is_a?(String) opts = { token: opts } end @token = opts.fetch(:token) @timeout = opts[:timeout] || 50 @offset = opts[:offset] || 0 @logger = opts[:logger] || NullLogger.new @proxy = opts[:proxy] || nil @connection = Excon.new(ENDPOINT, persistent: true, proxy: @proxy) end
Public Instance Methods
get_me()
click to toggle source
# File lib/telegram_bot/bot.rb, line 19 def get_me @me ||= begin response = request(:getMe) User.new(response.result) end end
Also aliased as: me
get_updates(opts = {}) { |message| ... }
click to toggle source
# File lib/telegram_bot/bot.rb, line 28 def get_updates(opts = {}, &block) return get_last_messages(opts) unless block_given? logger.info "starting get_updates loop" loop do messages = get_last_messages(opts) messages.compact.each do |message| next unless message logger.info "message from @#{message.chat.friendly_name}: #{message.text.inspect}" yield message end end end
remove_webhook()
click to toggle source
# File lib/telegram_bot/bot.rb, line 57 def remove_webhook set_webhook("") end
send_message(out_message)
click to toggle source
# File lib/telegram_bot/bot.rb, line 42 def send_message(out_message) logger.info "sending message: #{out_message.text.inspect} to #{out_message.chat_friendly_name}" response = request(:sendMessage, out_message.to_h) Message.new(response.result) end
set_webhook(url, allowed_updates: %i(message))
click to toggle source
# File lib/telegram_bot/bot.rb, line 48 def set_webhook(url, allowed_updates: %i(message)) logger.info "setting webhook url to #{url}, allowed_updates: #{allowed_updates}" settings = { url: url, allowed_updates: allowed_updates.map(&:to_s), } request(:setWebhook, settings) end
Private Instance Methods
get_last_messages(opts = {})
click to toggle source
# File lib/telegram_bot/bot.rb, line 82 def get_last_messages(opts = {}) get_last_updates(opts).map(&:message) end
get_last_updates(opts = {})
click to toggle source
# File lib/telegram_bot/bot.rb, line 71 def get_last_updates(opts = {}) response = request(:getUpdates, offset: opts[:offset] || @offset, timeout: opts[:timeout] || @timeout) if opts[:fail_silently] && (!response.ok? || !response.result) logger.warn "error when getting updates. ignoring due to fail_silently." return [] end updates = response.result.map{|raw_update| Update.new(raw_update) } @offset = updates.last.id + 1 if updates.any? updates end
request(action, query = {})
click to toggle source
# File lib/telegram_bot/bot.rb, line 65 def request(action, query = {}) path = "/bot#{@token}/#{action}" res = @connection.post(path: path, query: query) ApiResponse.new(res) end