dbots 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|