class Telegruby::Bot

Attributes

id[RW]

Public Class Methods

new(api_token) click to toggle source
# File lib/telegruby.rb, line 8
def initialize(api_token)
  @token = api_token
  @endpoint = "https://api.telegram.org/bot#{@token}/"
  @id = 0
end

Public Instance Methods

answer_inline_query(id, results, cache_time: 300, is_personal: false, next_offset: nil) click to toggle source
# File lib/telegruby.rb, line 271
def answer_inline_query(id, results, cache_time: 300, is_personal: false, next_offset: nil)
  options = {
    :inline_query_id => id,
    :results => results,
    :cache_time => cache_time,
    :is_personal => is_personal,
  }
  if !next_offset.nil?
    options.merge!(:next_offset => next_offset)
  end
  return self.get_request("answerInlineQuery", options)
end
forward_message(id, from_id, message_id) click to toggle source
# File lib/telegruby.rb, line 63
def forward_message(id, from_id, message_id)
  options = {
    :chat_id => id,
    :from_chat_id => from_id,
    :message_id => message_id
  }

  self.get_request("forwardMessage", options)
end
get_file(file_id) click to toggle source
# File lib/telegruby.rb, line 264
def get_file(file_id)
  options = {
    :file_id => file_id
  }
  return self.get_request("getFile", options)
end
get_updates(on_error: nil) click to toggle source

See core.telegram.org/bots/api for the full method list

# File lib/telegruby.rb, line 16
def get_updates(on_error: nil)
  options = {
    :offset => @id
  }

  request = self.get_request("getUpdates", options)
  if request.code != 200
    if on_error.nil?
      puts "Failed to get updates: #{request}"
      return nil
    else
      return on_error(request)
    end
  end
  update = Update.new(JSON.parse(request.body, object_class: OpenStruct))
  
  if !update.result.empty?
    # there are updates, so mark them as 'seen'
    @id = (update.result.last.update_id + 1)
  end
  
  return update.result.map { |m| Message.new(m) }
end
get_userphotos(id, offset: nil, limit: nil) click to toggle source
# File lib/telegruby.rb, line 243
def get_userphotos(id, offset: nil, limit: nil)
  options = {
    :user_id => id,
    :offset => offset,
    :limit => limit
  }
  
  return self.get_request("getUserProfilePhotos", options)
end
send_action(id, action) click to toggle source
# File lib/telegruby.rb, line 211
def send_action(id, action)
  options = {
    :chat_id => id,
    :action => action
  }
  
  return self.post_request("sendChatAction", options)
end
send_audio(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil) click to toggle source
# File lib/telegruby.rb, line 151
def send_audio(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id,
  } 
  if file_id
    options.merge!(:audio => file_id)
  else
    options.merge!(:audio => File.new(filename))
  end

  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  self.post_request("sendAudio", options)
end
send_document(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil) click to toggle source

Sends a document by filename or file ID

# File lib/telegruby.rb, line 221
def send_document(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id
  }
  
  if file_id
    options.merge!(:document => file_id)
  else
    options.merge!(:document => File.new(filename))
  end

  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  return self.post_request("sendDocument", options)
end
send_location(id, lat, long, reply: nil, reply_markup: nil) click to toggle source
# File lib/telegruby.rb, line 193
def send_location(id, lat, long, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id,
    :latitude => lat,
    :longitude => long
  }
  
  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  self.post_request("sendLocation", options)
end
send_message(id, text, reply: nil, parse_mode: nil, disable_preview: nil, reply_markup: nil) click to toggle source

Send a plaintext message to a chat id

# File lib/telegruby.rb, line 41
def send_message(id, text, reply: nil, parse_mode: nil, disable_preview: nil, reply_markup: nil)
  options = {
    :chat_id => id,
    :text => text
  }

  if !parse_mode.nil?
    options.merge!(:parse_mode => parse_mode)
  end
  if !disable_preview.nil?
    options.merge!(:disable_preview => disable_preview)
  end
  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end
  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup.to_json)
  end

  self.get_request("sendMessage", options)
end
send_photo(id, filename: nil, file_id: nil, reply: nil, caption: nil, reply_markup: nil) click to toggle source

Sends a photo message to a chat id

# File lib/telegruby.rb, line 74
def send_photo(id, filename: nil, file_id: nil, reply: nil, caption: nil, reply_markup: nil)
  options = {
    :chat_id => id,
  }
  if file_id
    options.merge!(:photo => file_id)
  else
    options.merge!(:photo => File.new(filename))
  end
 
  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !caption.nil?
    options.merge!(:caption => caption)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end
  
  self.post_request("sendPhoto", options)
end
send_photo_bytestring(id, str, reply: nil) click to toggle source

Sends a photo from a byte string

# File lib/telegruby.rb, line 100
def send_photo_bytestring(id, str, reply: nil)
  Tempfile.open(["img", ".jpg"]) { |f|
    f.binmode
    f.write(str)
   
    self.send_photo(id, filename: f.path, reply: reply)
  }
end
send_sticker(id, file_id: nil, filename: nil, reply: nil, reply_markup: nil) click to toggle source
# File lib/telegruby.rb, line 130
def send_sticker(id, file_id: nil, filename: nil, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id,
  }
  if file_id
    options.merge!(:sticker => file_id)
  else
    options.merge!(:sticker => File.new(filename))
  end

  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  self.post_request("sendSticker", options)
end
send_video(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil) click to toggle source
# File lib/telegruby.rb, line 172
def send_video(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id,
  }
  if file_id
    options.merge!(:video => file_id)
  else
    options.merge!(:video => File.new(filename))
  end

  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  self.post_request("sendVideo", options)
end
send_voice(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil) click to toggle source
# File lib/telegruby.rb, line 109
def send_voice(id, filename: nil, file_id: nil, reply: nil, reply_markup: nil)
  options = {
    :chat_id => id,
  }
  if file_id
    options.merge!(:audio => file_id)
  else
    options.merge!(:audio => File.new(filename))
  end
 
  if !reply.nil?
    options.merge!(:reply_to_message_id => reply)
  end

  if !reply_markup.nil?
    options.merge!(:reply_markup => reply_markup)
  end

  self.post_request("sendVoice", options)
end
set_webhook(url = nil, certificate = nil) click to toggle source
# File lib/telegruby.rb, line 253
def set_webhook(url = nil, certificate = nil)
  options = {
    :url => nil,
  }
  if certificate
    options.merge!(:certificate => File.new(certificate))
  end
  
  return self.get_request("setWebhook", options)
end

Protected Instance Methods

get_request(name, options = {}) click to toggle source

Provides a generic method for GET requests.

# File lib/telegruby.rb, line 287
def get_request(name, options = {})
  HTTMultiParty::get(@endpoint + name, query: options)
end
post_request(name, options = {}) click to toggle source

Provides a generic method for POST requests.

# File lib/telegruby.rb, line 292
def post_request(name, options = {})
  HTTMultiParty::post(@endpoint + name, query: options).body
end