class Botkit::Telegram::Bot

Attributes

api_token[R]
booted_at[R]
offset[RW]

Public Class Methods

new(api_token:) click to toggle source
# File lib/botkit/telegram/bot.rb, line 9
def initialize(api_token:)
  @api_token = api_token
  @booted_at = Time.now.utc.to_i
  @offset = 0
end

Public Instance Methods

call() click to toggle source
# File lib/botkit/telegram/bot.rb, line 15
def call
  context = self

  response = Aitch.post do
    url "https://api.telegram.org/bot#{context.api_token}/getUpdates"
    params offset: context.offset,
           allowed_updates: "message"
    options expect: 200
  end

  messages = response.data["result"]
  return if messages.empty?

  self.offset = messages.last["update_id"] + 1
  messages
    .reject {|message| message.key?("edited_message") }
    .select {|message| message.dig("message", "date") >= booted_at }
    .map(&method(:prepare_message))
    .each(&method(:handle_incoming_message))
end
prepare_message(message) click to toggle source
# File lib/botkit/telegram/bot.rb, line 36
def prepare_message(message)
  params = parse_message(message.dig("message", "text"))
  params = params.merge(raw: message,
                        channel_id: message.dig("message", "chat", "id"))
  Message.new(**params)
end
reply_message(message, reply, options = {}) click to toggle source
# File lib/botkit/telegram/bot.rb, line 58
def reply_message(message, reply, options = {})
  send_message(reply, options.merge(reply_to_message_id: message.id))
end
send_message(message, options = {}) click to toggle source
# File lib/botkit/telegram/bot.rb, line 43
def send_message(message, options = {})
  context = self

  message_params = {
    text: message.text,
    chat_id: message.channel_id
  }.merge(options)

  Aitch.post do
    url "https://api.telegram.org/bot#{context.api_token}/sendMessage"
    params message_params
    options expect: 200
  end
end