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
identity()
Alias for: me
me()
Also aliased as: identity
Alias for: get_me
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