lib/telegram/bot/api.rb in telegram-bot-ruby-0.2.0 vs lib/telegram/bot/api.rb in telegram-bot-ruby-0.2.1
- old
+ new
@@ -6,10 +6,15 @@
ENDPOINTS = %w(
getMe sendMessage forwardMessage sendPhoto sendAudio sendDocument
sendSticker sendVideo sendLocation sendChatAction getUserProfilePhotos
getUpdates setWebhook
).freeze
+ REPLY_MARKUP_TYPES = [
+ Telegram::Bot::Types::ReplyKeyboardMarkup,
+ Telegram::Bot::Types::ReplyKeyboardHide,
+ Telegram::Bot::Types::ForceReply
+ ].freeze
attr_reader :token
base_uri 'https://api.telegram.org'
persistent_connection_adapter
@@ -20,11 +25,30 @@
def method_missing(method_name, *args, &block)
ENDPOINTS.include?(method_name.to_s) ? call(method_name, *args) : super
end
- def call(endpoint, params = {})
- self.class.get("/bot#{token}/#{endpoint}", query: params).to_h
+ def call(endpoint, raw_params = {})
+ params = build_params(raw_params)
+ response = self.class.get("/bot#{token}/#{endpoint}", query: params)
+ response.code == 200 ? response.to_h : {}
+ end
+
+ private
+
+ def build_params(h)
+ h.each_with_object({}) do |(key, value), params|
+ params[key] = sanitize_value(value)
+ end
+ end
+
+ def sanitize_value(value)
+ jsonify_reply_markup(value)
+ end
+
+ def jsonify_reply_markup(value)
+ return value unless REPLY_MARKUP_TYPES.include?(value.class)
+ value.to_h.to_json
end
end
end
end