Class: Telegram::Bot::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/telegram/bot/api.rb

Overview

rubocop:disable ClassLength

Constant Summary collapse

ENDPOINTS =
%w[
  getUpdates setWebhook deleteWebhook getWebhookInfo getMe sendMessage
  forwardMessage sendPhoto sendAudio sendDocument sendVideo sendVoice
  sendVideoNote sendMediaGroup sendLocation editMessageLiveLocation
  stopMessageLiveLocation sendVenue sendContact sendChatAction
  getUserProfilePhotos getFile kickChatMember unbanChatMember
  restrictChatMember promoteChatMember leaveChat getChat
  getChatAdministrators exportChatInviteLink setChatPhoto deleteChatPhoto
  setChatTitle setChatDescription pinChatMessage unpinChatMessage
  getChatMembersCount getChatMember setChatStickerSet deleteChatStickerSet
  answerCallbackQuery editMessageText editMessageCaption
  editMessageReplyMarkup deleteMessage sendSticker getStickerSet
  uploadStickerFile createNewStickerSet addStickerToSet
  setStickerPositionInSet deleteStickerFromSet answerInlineQuery
  sendInvoice answerShippingQuery answerPreCheckoutQuery
  sendGame setGameScore getGameHighScores setPassportDataErrors
  editMessageMedia sendAnimation sendPoll stopPoll setChatPermissions
  setChatAdministratorCustomTitle sendDice getMyCommands setMyCommands
  setStickerSetThumb logOut close copyMessage createChatInviteLink
  editChatInviteLink revokeChatInviteLink
].freeze
REPLY_MARKUP_TYPES =
[
  Telegram::Bot::Types::ReplyKeyboardMarkup,
  Telegram::Bot::Types::ReplyKeyboardRemove,
  Telegram::Bot::Types::ForceReply,
  Telegram::Bot::Types::InlineKeyboardMarkup
].freeze
INLINE_QUERY_RESULT_TYPES =
[
  Telegram::Bot::Types::InlineQueryResultArticle,
  Telegram::Bot::Types::InlineQueryResultPhoto,
  Telegram::Bot::Types::InlineQueryResultGif,
  Telegram::Bot::Types::InlineQueryResultMpeg4Gif,
  Telegram::Bot::Types::InlineQueryResultVideo,
  Telegram::Bot::Types::InlineQueryResultAudio,
  Telegram::Bot::Types::InlineQueryResultVoice,
  Telegram::Bot::Types::InlineQueryResultDocument,
  Telegram::Bot::Types::InlineQueryResultLocation,
  Telegram::Bot::Types::InlineQueryResultVenue,
  Telegram::Bot::Types::InlineQueryResultContact,
  Telegram::Bot::Types::InlineQueryResultGame,
  Telegram::Bot::Types::InlineQueryResultCachedPhoto,
  Telegram::Bot::Types::InlineQueryResultCachedGif,
  Telegram::Bot::Types::InlineQueryResultCachedMpeg4Gif,
  Telegram::Bot::Types::InlineQueryResultCachedSticker,
  Telegram::Bot::Types::InlineQueryResultCachedDocument,
  Telegram::Bot::Types::InlineQueryResultCachedVideo,
  Telegram::Bot::Types::InlineQueryResultCachedVoice,
  Telegram::Bot::Types::InlineQueryResultCachedAudio
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(token, url: 'https://api.telegram.org') ⇒ Api

Returns a new instance of Api.



56
57
58
59
# File 'lib/telegram/bot/api.rb', line 56

def initialize(token, url: 'https://api.telegram.org')
  @token = token
  @url = url
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



61
62
63
64
65
66
# File 'lib/telegram/bot/api.rb', line 61

def method_missing(method_name, *args, &block)
  endpoint = method_name.to_s
  endpoint = camelize(endpoint) if endpoint.include?('_')

  ENDPOINTS.include?(endpoint) ? call(endpoint, *args) : super
end

Instance Attribute Details

#tokenObject (readonly)

Returns the value of attribute token.



54
55
56
# File 'lib/telegram/bot/api.rb', line 54

def token
  @token
end

#urlObject (readonly)

Returns the value of attribute url.



54
55
56
# File 'lib/telegram/bot/api.rb', line 54

def url
  @url
end

Instance Method Details

#call(endpoint, raw_params = {}) ⇒ Object



75
76
77
78
79
80
81
82
83
84
# File 'lib/telegram/bot/api.rb', line 75

def call(endpoint, raw_params = {})
  params = build_params(raw_params)
  response = conn.post("/bot#{token}/#{endpoint}", params)
  if response.status == 200
    JSON.parse(response.body)
  else
    raise Exceptions::ResponseError.new(response),
          'Telegram API has returned the error.'
  end
end

#respond_to_missing?(*args) ⇒ Boolean

Returns:

  • (Boolean)


68
69
70
71
72
73
# File 'lib/telegram/bot/api.rb', line 68

def respond_to_missing?(*args)
  method_name = args[0].to_s
  method_name = camelize(method_name) if method_name.include?('_')

  ENDPOINTS.include?(method_name) || super
end