lib/telegram/bot.rb in telegram-bot-0.3.0 vs lib/telegram/bot.rb in telegram-bot-0.4.0
- old
+ new
@@ -1,98 +1,18 @@
-require 'httpclient'
-require 'json'
-require 'active_support/core_ext/string/inflections'
-require 'active_support/core_ext/hash/keys'
-require 'active_support/core_ext/array/wrap'
-require 'telegram/bottable'
+require 'telegram/bot/config_methods'
module Telegram
- extend Bottable
+ extend Bot::ConfigMethods
- class Bot
+ module Bot
class Error < StandardError; end
class NotFound < Error; end
+ autoload :Client, 'telegram/bot/client'
+ autoload :ClientStub, 'telegram/bot/client_stub'
autoload :Middleware, 'telegram/bot/middleware'
autoload :UpdatesController, 'telegram/bot/updates_controller'
autoload :UpdatesPoller, 'telegram/bot/updates_poller'
-
- URL_TEMPLATE = 'https://api.telegram.org/bot%s/'.freeze
-
- class << self
- # Accepts different options to initialize bot.
- def wrap(input)
- case input
- when self then input
- when Array then input.map(&method(__callee__))
- when Hash then
- input = input.stringify_keys
- new input['token'], input['username']
- else
- new(input)
- end
- end
- end
-
- attr_reader :client, :token, :username, :base_uri
-
- def initialize(token, username = nil)
- @client = HTTPClient.new
- @token = token
- @username = username
- @base_uri = format URL_TEMPLATE, token
- end
-
- def debug!(dev = STDOUT)
- client.debug_dev = dev
- end
-
- def debug_off!
- client.debug_dev = nil
- end
-
- def request(action, data = {})
- res = http_request("#{base_uri}#{action}", data)
- status = res.status
- return JSON.parse(res.body) if 300 > status
- result = JSON.parse(res.body) rescue nil # rubocop:disable RescueModifier
- err_msg = "#{res.reason}: #{result && result['description'] || '-'}"
- # NotFound is raised only for valid responses from Telegram
- raise NotFound, err_msg if 404 == status && result
- raise Error, err_msg
- end
-
- %w(
- answerInlineQuery
- forwardMessage
- getFile
- getMe
- getUpdates
- getUserProfilePhotos
- sendAudio
- sendChatAction
- sendDocument
- sendLocation
- sendMessage
- sendPhoto
- sendSticker
- sendVideo
- sendVoice
- setWebhook
- ).each do |method|
- define_method(method.underscore) { |*args| request(method, *args) }
- end
-
- # Endpoint for low-level request. For easy host highjacking & instrumentation.
- # Params are not used directly but kept for instrumentation purpose.
- # You probably don't want to use this method directly.
- def http_request(uri, body)
- client.post(uri, body)
- end
-
- def inspect
- "#<Telegram::Bot##{object_id}(#{@username})>"
- end
end
end
require 'telegram/bot/railtie' if defined?(Rails)