dbots 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/dbots.rb +2 -0
- data/lib/dbots/api.rb +79 -0
- data/lib/dbots/data.rb +65 -0
- data/lib/dbots/err.rb +28 -0
- data/lib/dbots/lists/discordbotsgg.rb +29 -0
- data/lib/dbots/poster.rb +23 -0
- data/lib/dbots/ver.rb +3 -0
- metadata +111 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a98618d6b8cd4b3f88e78ce4673abc7fbca9d420053dfb53f40c8b828829dee3
|
4
|
+
data.tar.gz: 6b87cbc42a0526618b07a73f28ecdcc283b1bcaea110e7eb1b55ba57a02a652b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fcf4b19edec97311b83524c05e398e976d5a427b7b73d46dce800455c18c389f93c906dc477bcf1d83d02761397740ecc9e8017d88e67aa0209b4111ae463875
|
7
|
+
data.tar.gz: 7c8fa35c66e8c996ebba1bf0104f5691b9b0bb9d2eae71feb2ee42efd89295112b818a0ef892e9c0167c6ea12252f5214e671d0919b02cd552e810aaa7ff4eac
|
data/lib/dbots.rb
ADDED
data/lib/dbots/api.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'dbots/err'
|
2
|
+
require 'dbots/ver'
|
3
|
+
require 'uri'
|
4
|
+
require 'json'
|
5
|
+
require 'rest-client'
|
6
|
+
|
7
|
+
module DBots
|
8
|
+
# Main API functions
|
9
|
+
module API
|
10
|
+
module_function
|
11
|
+
|
12
|
+
def get(url, headers = {})
|
13
|
+
headers['User-Agent'] = user_agent
|
14
|
+
request(:get, url, headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(url, body, headers = {})
|
18
|
+
headers['User-Agent'] = user_agent
|
19
|
+
request(:post, url, body, headers)
|
20
|
+
end
|
21
|
+
|
22
|
+
def user_agent
|
23
|
+
"dbots (https://github.com/dbots-pkg/dbots.rb #{DBots::VERSION}) rest-client/#{RestClient::VERSION} #{RUBY_ENGINE}/#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Request an endpoint easily
|
27
|
+
def request(type, *attributes)
|
28
|
+
response = RestClient.send(type, *attributes)
|
29
|
+
Response.new(response, parse_json(response.body))
|
30
|
+
rescue RestClient::Unauthorized
|
31
|
+
raise DBots::Err::Unauthorized
|
32
|
+
rescue RestClient::InternalServerError
|
33
|
+
raise DBots::Err::ServerFail
|
34
|
+
end
|
35
|
+
|
36
|
+
# @!visibility private
|
37
|
+
def parse_json(raw)
|
38
|
+
JSON.parse(raw)
|
39
|
+
rescue JSON::ParserError
|
40
|
+
raw
|
41
|
+
end
|
42
|
+
|
43
|
+
# The nested response from rest-client
|
44
|
+
class Response
|
45
|
+
# @return [String] the HTTP response body.
|
46
|
+
attr_reader :body
|
47
|
+
|
48
|
+
# @return [Integer] HTTP status code.
|
49
|
+
attr_reader :code
|
50
|
+
alias_method :status, :code
|
51
|
+
|
52
|
+
# @return [Hash] a hash of the headers, beautified with symbols and underscores.
|
53
|
+
attr_reader :headers
|
54
|
+
|
55
|
+
# @return [Hash] cookie jar extracted from response headers.
|
56
|
+
attr_reader :cookies
|
57
|
+
|
58
|
+
# @return [Hash, nil] the parsed JSON of the response
|
59
|
+
attr_reader :json
|
60
|
+
|
61
|
+
# @return [RestClient::Response] the raw response given from rest-client
|
62
|
+
attr_reader :raw
|
63
|
+
|
64
|
+
# @!visibility private
|
65
|
+
def initialize(response, json = nil)
|
66
|
+
@raw = response
|
67
|
+
@code = response.code
|
68
|
+
@headers = response.headers
|
69
|
+
@cookies = response.cookies
|
70
|
+
@json = json
|
71
|
+
end
|
72
|
+
|
73
|
+
# @!visibility private
|
74
|
+
def inspect
|
75
|
+
"<DBots::API::Response #{@code} #{@raw.body_truncated(10).inspect}>"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/lib/dbots/data.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'dbots/api'
|
2
|
+
require 'dbots/err'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
# The main dbots module
|
6
|
+
module DBots
|
7
|
+
# Represents a basic service.
|
8
|
+
class Service
|
9
|
+
BASE_URL = ''.freeze
|
10
|
+
AUTH_HEADER = 'Authorization'.freeze
|
11
|
+
|
12
|
+
# @return [String, nil] the token that will be used for the service
|
13
|
+
attr_accessor :token
|
14
|
+
alias_method :key, :token
|
15
|
+
alias_method :api_key, :token
|
16
|
+
|
17
|
+
# @param token [String] the token/key for the service.
|
18
|
+
def initialize(token = nil)
|
19
|
+
@token = token
|
20
|
+
end
|
21
|
+
|
22
|
+
def token?
|
23
|
+
@token != nil
|
24
|
+
end
|
25
|
+
|
26
|
+
# @!visibility private
|
27
|
+
def get(path, query = {}, headers = {})
|
28
|
+
DBots::API.get("#{self.class::BASE_URL}#{path}?#{URI.encode_www_form(query)}", headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @!visibility private
|
32
|
+
def get_authed(path, query = {}, headers = {})
|
33
|
+
raise DBots::Err::RequiresToken unless token?
|
34
|
+
|
35
|
+
headers[self.class::AUTH_HEADER] = @token
|
36
|
+
DBots::API.get("#{self.class::BASE_URL}#{path}?#{URI.encode_www_form(query)}", headers)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @!visibility private
|
40
|
+
def post_authed(path, body, query = {}, headers = {})
|
41
|
+
raise DBots::Err::RequiresToken unless token?
|
42
|
+
|
43
|
+
headers[self.class::AUTH_HEADER] = @token
|
44
|
+
DBots::API.post("#{self.class::BASE_URL}#{path}?#{URI.encode_www_form(query)}", body, headers)
|
45
|
+
end
|
46
|
+
|
47
|
+
# @!visibility private
|
48
|
+
def inspect
|
49
|
+
"<#{self.class.name} @token?=#{token?}>"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Gets a service class based on a key
|
54
|
+
# @param key [String] the service key to get
|
55
|
+
# @returns [Service, nil]
|
56
|
+
def self.get_service(key)
|
57
|
+
services = DBots::Service.constants.select { |c| DBots::Service.const_get(c).is_a? Class }
|
58
|
+
services.each do |service|
|
59
|
+
service = DBots::Service.const_get(service)
|
60
|
+
return service if service::ALIASES.include?(key.to_s)
|
61
|
+
end
|
62
|
+
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
end
|
data/lib/dbots/err.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module DBots
|
2
|
+
# Custom errors raised in various places
|
3
|
+
module Err
|
4
|
+
# Raised when an API key is invalid or incorrect.
|
5
|
+
class Unauthorized < RuntimeError
|
6
|
+
# The default message for the error
|
7
|
+
def message
|
8
|
+
'Invalid API key!'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Raised when an authorized endpoint does not have a token
|
13
|
+
class RequiresToken < RuntimeError
|
14
|
+
# The default message for the error
|
15
|
+
def message
|
16
|
+
'This endpoint requires a token.'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Raised when a server error occurs
|
21
|
+
class ServerFail < RuntimeError
|
22
|
+
# The default message for the error
|
23
|
+
def message
|
24
|
+
'Internal server error!'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'dbots/data'
|
2
|
+
|
3
|
+
module DBots
|
4
|
+
class Service
|
5
|
+
# Represents the Discord Bots service.
|
6
|
+
# @see https://discord.bots.gg/docs
|
7
|
+
class DiscordBotsGG < Service
|
8
|
+
BASE_URL = 'https://discord.bots.gg/api/v1'.freeze
|
9
|
+
ALIASES = ['discordbotsgg', 'discord.bots.gg', 'botsgg', 'bots.gg', 'dbots'].freeze
|
10
|
+
|
11
|
+
# Gets the bot listed on this service.
|
12
|
+
# @Param id [String, Integer, #resolve_id] the bot's ID
|
13
|
+
# @Param sanitied [true, false] whether to sanitize descriptions
|
14
|
+
# @return [RestClient::Response]
|
15
|
+
def get_bot(id, sanitied = false)
|
16
|
+
id = id.respond_to?(:resolve_id) ? id.resolve_id.to_s : id.to_s
|
17
|
+
get_authed("/bots/#{id}", { sanitied: sanitied })
|
18
|
+
end
|
19
|
+
|
20
|
+
# Gets a list of bots on this service.
|
21
|
+
# @Param query [Hash] the query string that will be used in the request
|
22
|
+
# @return [RestClient::Response]
|
23
|
+
def get_bots(query = {})
|
24
|
+
id = id.respond_to?(:resolve_id) ? id.resolve_id.to_s : id.to_s
|
25
|
+
get_authed("/bots/#{id}", query)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/dbots/poster.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module DBots
|
2
|
+
# A class that posts server count to listing site(s).
|
3
|
+
class Poster
|
4
|
+
# @return [Hash] the API keys that the poster is using
|
5
|
+
attr_accessor :api_keys
|
6
|
+
alias_method :tokens, :api_keys
|
7
|
+
alias_method :keys, :api_keys
|
8
|
+
|
9
|
+
# @return [String] the client ID used for posting to a service
|
10
|
+
attr_accessor :client_id
|
11
|
+
|
12
|
+
# @param [String, Integer, #resolve_id] the client ID used for posting to a service
|
13
|
+
def initialize(client_id, api_keys: {})
|
14
|
+
@client_id = client_id.respond_to?(:resolve_id) ? client_id.resolve_id.to_s : client_id.to_s
|
15
|
+
@api_keys = api_keys
|
16
|
+
end
|
17
|
+
|
18
|
+
# @!visibility private
|
19
|
+
def inspect
|
20
|
+
"<#{self.class.name} @client_id=#{@client_id}>"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/dbots/ver.rb
ADDED
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dbots
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Snazzah
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-03-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: inch
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.49.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.49.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rest-client
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.0.0
|
62
|
+
- - "~>"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '2.0'
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 2.0.0
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2.0'
|
75
|
+
description: A stats poster and API wrapper for all botlists.
|
76
|
+
email: suggesttosnazzy@gmail.com
|
77
|
+
executables: []
|
78
|
+
extensions: []
|
79
|
+
extra_rdoc_files: []
|
80
|
+
files:
|
81
|
+
- lib/dbots.rb
|
82
|
+
- lib/dbots/api.rb
|
83
|
+
- lib/dbots/data.rb
|
84
|
+
- lib/dbots/err.rb
|
85
|
+
- lib/dbots/lists/discordbotsgg.rb
|
86
|
+
- lib/dbots/poster.rb
|
87
|
+
- lib/dbots/ver.rb
|
88
|
+
homepage: https://github.com/dbots-pkg/dbots.rb
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubygems_version: 3.0.3
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: Stats poster & API wrapper for botlists.
|
111
|
+
test_files: []
|