weeb 0.0.2 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9915938edda957206ae587f49a1dd536f113558ca866dffc10133dd2a4d2f43
4
- data.tar.gz: 99cac3b5e83da4655a2539d115a1c5e921189e7d845c2f9c654dc5c78c4e2372
3
+ metadata.gz: 48e8ce683d4a3c5bd5cef4074be39d9e39c39a15e067271d5832cd2163d6d016
4
+ data.tar.gz: 7b297145af275b2670b67347662b4082122882e19d93aaa7cea930cbcbcb263f
5
5
  SHA512:
6
- metadata.gz: 85d0d2efebbc6747a5e3f93c57e29411aa148e99385a50e82849f68d5dcafb93ae31abc6067f2b100b626710cfe323dccf7e0245dce36b2036b0f9556f91fde4
7
- data.tar.gz: dfeb4ac2515f3c2803349e9afcb32a96ab43d3adbf0d74490645e6639599174543dae06c0e3cab68caede164a08241baf7e9c7608f5355184bf0219977cc11db
6
+ metadata.gz: 93c342bdbf155da57880b061eb7d8f349b44682f40b1df9b84ac2f9bc1f75b0d6be0348635321dccdc27aa194ccbf2a988ae27e9c69bef601093f9dab1d6f0a8
7
+ data.tar.gz: 4f0a455d913de4a60d86246b64307d49f900237f456ae81018425b48cb079f7c6ab3ba5d88393220a0952c5f0c772eeb15b5be1d225909524172c22499764af4
@@ -9,6 +9,7 @@ module WeebSh
9
9
  module API
10
10
  module_function
11
11
 
12
+ # Request an endpoint easily
12
13
  def request(type, *attributes)
13
14
  parse_json(RestClient.send(type, *attributes))
14
15
  rescue RestClient::RequestEntityTooLarge
@@ -39,12 +40,14 @@ module WeebSh
39
40
  raise e
40
41
  end
41
42
 
43
+ # @!visibility private
42
44
  def format_user_agent(user_agent)
43
45
  user_agent = "#{user_agent['botname']}/#{user_agent['version']}#{"/#{user_agent['env']}" if user_agent['env']}" if user_agent.is_a?(Hash)
44
46
  return nil unless user_agent.is_a?(String) && !user_agent.empty?
45
47
  user_agent
46
48
  end
47
49
 
50
+ # @!visibility private
48
51
  def parse_json(raw)
49
52
  JSON.parse(raw)
50
53
  rescue JSON::ParserError
@@ -6,7 +6,74 @@ module WeebSh
6
6
  # API endpoints for Korra
7
7
  module Korra
8
8
  BASE = '/auto-image'.freeze
9
- # module_function
9
+
10
+ module_function
11
+
12
+ def discord_status(interface, query)
13
+ WeebSh::API.request(
14
+ :get,
15
+ "#{interface.api_url}#{BASE}/discord-status?#{URI.encode_www_form(query)}",
16
+ {
17
+ Authorization: interface.auth,
18
+ 'User-Agent': interface.user_agent
19
+ }
20
+ )
21
+ end
22
+
23
+ def simple(interface, query)
24
+ WeebSh::API.request(
25
+ :get,
26
+ "#{interface.api_url}#{BASE}/generate?#{URI.encode_www_form(query)}",
27
+ {
28
+ Authorization: interface.auth,
29
+ 'User-Agent': interface.user_agent
30
+ }
31
+ )
32
+ end
33
+
34
+ def license(interface, title, avatar, badges, widgets)
35
+ WeebSh::API.request(
36
+ :post,
37
+ "#{interface.api_url}#{BASE}/license",
38
+ {
39
+ title: title,
40
+ avatar: avatar,
41
+ badges: badges,
42
+ widgets: widgets
43
+ }.to_json,
44
+ {
45
+ Authorization: interface.auth,
46
+ 'User-Agent': interface.user_agent
47
+ }
48
+ )
49
+ end
50
+
51
+ def waifu_insult(interface, url)
52
+ WeebSh::API.request(
53
+ :post,
54
+ "#{interface.api_url}#{BASE}/waifu-insult",
55
+ { avatar: url }.to_json,
56
+ {
57
+ Authorization: interface.auth,
58
+ 'User-Agent': interface.user_agent
59
+ }
60
+ )
61
+ end
62
+
63
+ def love_ship(interface, target1, target2)
64
+ WeebSh::API.request(
65
+ :post,
66
+ "#{interface.api_url}#{BASE}/love-ship",
67
+ {
68
+ targetOne: target1,
69
+ targetTwo: target2
70
+ }.to_json,
71
+ {
72
+ Authorization: interface.auth,
73
+ 'User-Agent': interface.user_agent
74
+ }
75
+ )
76
+ end
10
77
  end
11
78
  end
12
79
  end
@@ -6,7 +6,98 @@ module WeebSh
6
6
  # API endpoints for Shimakaze
7
7
  module Shimakaze
8
8
  BASE = '/reputation'.freeze
9
- # module_function
9
+
10
+ module_function
11
+
12
+ def get(interface, bot, user)
13
+ WeebSh::API.request(
14
+ :get,
15
+ "#{interface.api_url}#{BASE}/#{bot}/#{user}",
16
+ {
17
+ Authorization: interface.auth,
18
+ 'User-Agent': interface.user_agent
19
+ }
20
+ )
21
+ end
22
+
23
+ def give(interface, bot, from, to)
24
+ WeebSh::API.request(
25
+ :post,
26
+ "#{interface.api_url}#{BASE}/#{bot}/#{to}",
27
+ {
28
+ source_user: from
29
+ }.to_json,
30
+ {
31
+ Authorization: interface.auth,
32
+ 'User-Agent': interface.user_agent
33
+ }
34
+ )
35
+ end
36
+
37
+ def reset(interface, bot, user, reset_cooldown = true)
38
+ WeebSh::API.request(
39
+ :post,
40
+ "#{interface.api_url}#{BASE}/#{bot}/#{user}/reset",
41
+ {
42
+ cooldown: reset_cooldown
43
+ }.to_json,
44
+ {
45
+ Authorization: interface.auth,
46
+ 'User-Agent': interface.user_agent
47
+ }
48
+ )
49
+ end
50
+
51
+ def increase(interface, bot, user, amount)
52
+ WeebSh::API.request(
53
+ :post,
54
+ "#{interface.api_url}#{BASE}/#{bot}/#{user}/increase",
55
+ {
56
+ increase: amount
57
+ }.to_json,
58
+ {
59
+ Authorization: interface.auth,
60
+ 'User-Agent': interface.user_agent
61
+ }
62
+ )
63
+ end
64
+
65
+ def decrease(interface, bot, user, amount)
66
+ WeebSh::API.request(
67
+ :post,
68
+ "#{interface.api_url}#{BASE}/#{bot}/#{user}/decrease",
69
+ {
70
+ decrease: amount
71
+ }.to_json,
72
+ {
73
+ Authorization: interface.auth,
74
+ 'User-Agent': interface.user_agent
75
+ }
76
+ )
77
+ end
78
+
79
+ def get_settings(interface)
80
+ WeebSh::API.request(
81
+ :get,
82
+ "#{interface.api_url}#{BASE}/settings",
83
+ {
84
+ Authorization: interface.auth,
85
+ 'User-Agent': interface.user_agent
86
+ }
87
+ )
88
+ end
89
+
90
+ def set_settings(interface, settings)
91
+ WeebSh::API.request(
92
+ :post,
93
+ settings.to_json,
94
+ "#{interface.api_url}#{BASE}/settings",
95
+ {
96
+ Authorization: interface.auth,
97
+ 'User-Agent': interface.user_agent
98
+ }
99
+ )
100
+ end
10
101
  end
11
102
  end
12
103
  end
@@ -1,4 +1,5 @@
1
1
  require 'weeb/api'
2
+ require 'time'
2
3
 
3
4
  module WeebSh
4
5
  # Mixin for objects with IDs
@@ -25,9 +26,10 @@ module WeebSh
25
26
  # @return [String] the URL being used for weeb.sh.
26
27
  attr_reader :api_url
27
28
 
28
- # @param token [String] the token required to use weeb.sh.
29
+ # @param auth [String] the authentication required to use weeb.sh.
29
30
  # @param user_agent [String, Hash] the user agent to use on endpoints.
30
31
  # @param api_url [String] the URL to use when using the weeb.sh API.
32
+ # @param client [Client] the client this is tied to.
31
33
  def initialize(auth, user_agent = nil, api_url: 'https://api.weeb.sh', client: nil)
32
34
  @user_agent = WeebSh::API.format_user_agent(user_agent)
33
35
  @auth = auth
@@ -40,6 +42,7 @@ module WeebSh
40
42
  puts "[#{self.class.name}] Your User Agent is not ideal. Please consider adding a user agent to help identify issues easier." if !user_agent.nil? && user_agent.split('/').count < 2
41
43
  end
42
44
 
45
+ # @!visibility private
43
46
  def inspect
44
47
  "#<#{self.class.name} @api_url=#{@api_url.inspect} @user_agent=#{@user_agent.inspect}>"
45
48
  end
@@ -67,6 +70,7 @@ module WeebSh
67
70
  @url = data['url']
68
71
  end
69
72
 
73
+ # @!visibility private
70
74
  def inspect
71
75
  "#<WeebSh::PreviewImage @url=#{@url.inspect} @type=#{@type.inspect}>"
72
76
  end
@@ -131,7 +135,7 @@ module WeebSh
131
135
  end
132
136
 
133
137
  # Remove a tag to the image
134
- # @param tags [String, Tag] the affected tag
138
+ # @param tag [String, Tag] the affected tag
135
139
  def remove_tag(tag)
136
140
  @interface.remove_tags_to_image(self, [tag])
137
141
  end
@@ -142,6 +146,7 @@ module WeebSh
142
146
  end
143
147
  alias_method :remove, :delete
144
148
 
149
+ # @!visibility private
145
150
  def inspect
146
151
  "#<WeebSh::WeebImage @url=#{@url.inspect} @type=#{@type.inspect} @nsfw=#{@nsfw.inspect}>"
147
152
  end
@@ -169,8 +174,161 @@ module WeebSh
169
174
  @account = data['account']
170
175
  end
171
176
 
177
+ # @!visibility private
172
178
  def inspect
173
179
  "#<WeebSh::Tag @name=#{@name.inspect} @hidden=#{@hidden.inspect} @account=#{@account.inspect}>"
174
180
  end
175
181
  end
182
+
183
+ # Represents a user for shimakaze
184
+ class User
185
+ include IDObject
186
+
187
+ # @return [Integer] the reputation of the user
188
+ attr_reader :reputation
189
+ alias_method :rep, :reputation
190
+
191
+ # @return [String] the ID of the bot that issues reputation
192
+ attr_reader :bot_id
193
+
194
+ # @return [String] the ID of the account from the token
195
+ attr_reader :account
196
+
197
+ # @return [Array<Time>] the last time(s) this user has given reputation to another user
198
+ attr_reader :cooldown
199
+ alias_method :taken_reputation, :cooldown
200
+
201
+ # @return [Array<Time>] the last time(s) this user has received reputation from another user
202
+ attr_reader :given_reputation
203
+
204
+ # @return [Integer, nil] the amount to times the user may give reputation
205
+ attr_reader :available_reputation
206
+
207
+ # @return [Array<Time>, nil] the timestamps referring to the remaining cooldown time until the user can give out reputation from now
208
+ attr_reader :next_available_reputation
209
+
210
+ # @!visibility private
211
+ def initialize(data, interface)
212
+ @interface = interface
213
+ patch(data)
214
+ @available_reputation = data['availableReputation']
215
+ @next_available_reputation = data['nextAvailableReputation'] ? data['nextAvailableReputation'].map { |t| Time.parse(t) } : nil
216
+ end
217
+
218
+ # Increases the user's reputation
219
+ # @param amount [Integer] the amount of reputation that will increase
220
+ # @return [User] the class itself
221
+ def increase(amount)
222
+ response = WeebSh::API::Shimakaze.increase(@interface, @bot_id, @id, amount)
223
+ patch(response['user'])
224
+ self
225
+ end
226
+
227
+ # Decreases the user's reputation
228
+ # @param amount [Integer] the amount of reputation that will decrease
229
+ # @return [User] the class itself
230
+ def decrease(amount)
231
+ response = WeebSh::API::Shimakaze.decrease(@interface, @bot_id, @id, amount)
232
+ patch(response['user'])
233
+ self
234
+ end
235
+
236
+ # Resets the user
237
+ # @return [User] the class itself
238
+ def reset
239
+ response = WeebSh::API::Shimakaze.reset(@interface, @bot_id, @id)
240
+ patch(response['user'])
241
+ self
242
+ end
243
+
244
+ # Gives reputation to another user
245
+ # @Param user [User, String, #resolve_id] the user to give reputation to
246
+ # @return [User] the class itself
247
+ def give(user)
248
+ user_id = user.resolve_id if user.respond_to?(:resolve_id)
249
+ response = API::Shimakaze.give(@interface, @bot_id, @id, user_id || user)
250
+ patch(response['sourceUser'])
251
+ user.patch(response['targetUser']) if user.is_a?(User)
252
+ self
253
+ end
254
+
255
+ # Recieves reputation to another user
256
+ # @Param user [User, String, #resolve_id] the user to get reputation from
257
+ # @return [User] the class itself
258
+ def recieve(user)
259
+ user_id = user.resolve_id if user.respond_to?(:resolve_id)
260
+ response = API::Shimakaze.give(@interface, @bot_id, user_id || user, @id)
261
+ patch(response['targetUser'])
262
+ user.patch(response['sourceUser']) if user.is_a?(User)
263
+ self
264
+ end
265
+
266
+ # @!visibility private
267
+ def patch(data)
268
+ @reputation = data['reputation']
269
+ @id = data['userId']
270
+ @bot_id = data['botId']
271
+ @account = data['account']
272
+ @cooldown = data['cooldown'].map { |t| Time.parse(t) }
273
+ @given_reputation = data['givenReputation'].map { |t| Time.parse(t) }
274
+ @available_reputation = data['availableReputation'] if data['availableReputation'].nil?
275
+ @next_available_reputation = data['nextAvailableReputation'].map { |t| Time.parse(t) } if data['nextAvailableReputation'].nil?
276
+ end
277
+
278
+ # @!visibility private
279
+ def inspect
280
+ "#<WeebSh::User @reputation=#{@reputation.inspect} @id=#{@id.inspect} @bot_id=#{@bot_id.inspect}>"
281
+ end
282
+ end
283
+
284
+ # Represents a reputation settings object for shimakaze
285
+ class ReputationSettings
286
+ include IDObject
287
+
288
+ # @return [Integer] the number of reputations a user may give out per cooldown
289
+ attr_accessor :reputation_per_day
290
+ alias_method :rep_per_day, :reputation_per_day
291
+
292
+ # @return [Integer] the maximum reputation a user may receive
293
+ attr_accessor :max_reputation
294
+ alias_method :max_rep, :max_reputation
295
+
296
+ # @return [Integer] the maximum reputation a user may receive per day
297
+ attr_accessor :max_reputation_per_day
298
+ alias_method :max_rep_per_day, :max_reputation_per_day
299
+
300
+ # @return [Integer] the cooldown per reputation, this is set to time in seconds
301
+ attr_accessor :reputation_cooldown
302
+ alias_method :rep_cooldown, :reputation_cooldown
303
+
304
+ # @return [String, nil] the ID of the account from the token
305
+ attr_accessor :account
306
+
307
+ # @!visibility private
308
+ def initialize(data, interface)
309
+ @interface = interface
310
+ @reputation_per_day = data['reputationPerDay']
311
+ @max_reputation = data['maximumReputation']
312
+ @max_reputation_per_day = data['maximumReputationReceivedDay']
313
+ @reputation_cooldown = data['reputationCooldown']
314
+ @account = data['account']
315
+ end
316
+
317
+ # Save the settings on this object
318
+ # @return [ReputationSettings] the class itself
319
+ def save
320
+ WeebSh::API::Shimakaze.set_settings(@interface, {
321
+ reputationPerDay: @reputation_per_day,
322
+ maximumReputation: @max_reputation,
323
+ maximumReputationReceivedDay: @max_reputation_per_day,
324
+ reputationCooldown: @reputation_cooldown
325
+ })
326
+ self
327
+ end
328
+
329
+ # @!visibility private
330
+ def inspect
331
+ "#<WeebSh::ReputationSettings @reputation_per_day=#{@reputation_per_day.inspect} @max_reputation=#{@max_reputation.inspect} @max_reputation_per_day=#{@max_reputation_per_day.inspect} @reputation_cooldown=#{@reputation_cooldown.inspect}>"
332
+ end
333
+ end
176
334
  end
@@ -3,6 +3,7 @@ module WeebSh
3
3
  module Err
4
4
  # Raised when a token is invalid or incorrect.
5
5
  class BadAuth < RuntimeError
6
+ # The default message for the error
6
7
  def message
7
8
  'Token invalid'
8
9
  end
@@ -10,6 +11,7 @@ module WeebSh
10
11
 
11
12
  # Raised when too many files were uploaded.
12
13
  class MissingScope < RuntimeError
14
+ # The default message for the error
13
15
  def message
14
16
  'Too many files requested!'
15
17
  end
@@ -17,6 +19,7 @@ module WeebSh
17
19
 
18
20
  # Raised when a server error occurs
19
21
  class ServerFail < RuntimeError
22
+ # The default message for the error
20
23
  def message
21
24
  'Server tried to do a thing and borked!'
22
25
  end
@@ -24,6 +27,7 @@ module WeebSh
24
27
 
25
28
  # Raised when requested file(s) have too much bytes.
26
29
  class TooLarge < RuntimeError
30
+ # The default message for the error
27
31
  def message
28
32
  'File(s) are too large!'
29
33
  end
@@ -31,6 +35,7 @@ module WeebSh
31
35
 
32
36
  # Raised when an invalid mime type was given.
33
37
  class InvalidMIME < RuntimeError
38
+ # The default message for the error
34
39
  def message
35
40
  'You gave an unsupported MIME type!'
36
41
  end
@@ -38,6 +43,7 @@ module WeebSh
38
43
 
39
44
  # Raised when trying to add an existing tag to an image
40
45
  class TagExists < RuntimeError
46
+ # The default message for the error
41
47
  def message
42
48
  'Tags existed already or had no content!'
43
49
  end
@@ -45,6 +51,7 @@ module WeebSh
45
51
 
46
52
  # Raised when trying to interact with a non-existant image
47
53
  class InvalidImage < RuntimeError
54
+ # The default message for the error
48
55
  def message
49
56
  'Non-existant image!'
50
57
  end
@@ -52,6 +59,7 @@ module WeebSh
52
59
 
53
60
  # Raised when loading a file recieves an error
54
61
  class FileError < RuntimeError
62
+ # The default message for the error
55
63
  def message
56
64
  'Unknown'
57
65
  end
@@ -35,8 +35,9 @@ module WeebSh
35
35
  alias_method :settings, :tama
36
36
 
37
37
  # Groups all interfaces into one.
38
- # @param token [String] the token required to use weeb.sh.
38
+ # @param auth [String] the authentication required to use weeb.sh.
39
39
  # @param user_agent [String, Hash] the user agent to use with requests.
40
+ # @param api_url [String] the URL to use when using the weeb.sh API.
40
41
  def initialize(auth, user_agent = nil, api_url: 'https://api.weeb.sh')
41
42
  @user_agent = WeebSh::API.format_user_agent(user_agent)
42
43
  @auth = auth
@@ -4,5 +4,46 @@ require 'weeb/data'
4
4
  module WeebSh
5
5
  # Reputation API
6
6
  class Shimakaze < Interface
7
+ # Makes a class with your bot ID to do requests easier
8
+ # @param bot [String] the ID of the bot
9
+ # @return [ShimakazeBot] the bot class
10
+ def bot(bot)
11
+ ShimakazeBot.new(bot, self)
12
+ end
13
+
14
+ # Get's a user
15
+ # @param bot [String] the ID of the bot
16
+ # @Param user [User, String, #resolve_id] the user to get
17
+ # @return [User] the user requested
18
+ def get(bot, user)
19
+ user_id = user.resolve_id if user.respond_to?(:resolve_id)
20
+ response = API::Shimakaze.get(self, bot, user_id || user)
21
+ user.patch(response['user']) if user.is_a?(User)
22
+ new User(response['user'], self)
23
+ end
24
+
25
+ # Gets the currentyly used settings
26
+ # @return [ReputationSettings] the user requested
27
+ def settings
28
+ new ReputationSettings(response['settings'], self)
29
+ end
30
+ end
31
+
32
+ # Bot class for shimakaze
33
+ class ShimakazeBot
34
+ include IDObject
35
+
36
+ # @!visibility private
37
+ def initialize(id, interface)
38
+ @interface = interface
39
+ @id = id
40
+ end
41
+
42
+ # Get's a user
43
+ # @Param user [User, String, #resolve_id] the user to get
44
+ # @return [User] the user requested
45
+ def get(user)
46
+ @interface.get(@id, user)
47
+ end
7
48
  end
8
49
  end
@@ -99,7 +99,7 @@ module WeebSh
99
99
  # @param tags [Array<String, Tag>] the affected tags
100
100
  # @return [WeebImage] Returns the image with the given ID.
101
101
  def add_tags_to_image(image, tags)
102
- image = image.resolve_id if id.respond_to?(:resolve_id)
102
+ image = image.resolve_id if image.respond_to?(:resolve_id)
103
103
  tags = tags.map { |t| t.name if t.is_a(Tag) }
104
104
  WeebImage.new(API::Toph.add_tags_to_image(self, image, tags), self)
105
105
  end
@@ -109,7 +109,7 @@ module WeebSh
109
109
  # @param tags [Array<String, Tag>] the affected tags
110
110
  # @return [WeebImage] Returns the image with the given ID.
111
111
  def remove_tags_to_image(image, tags)
112
- image = image.resolve_id if id.respond_to?(:resolve_id)
112
+ image = image.resolve_id if image.respond_to?(:resolve_id)
113
113
  tags = tags.map { |t| t.name if t.is_a(Tag) }
114
114
  WeebImage.new(API::Toph.remove_tags_to_image(self, image, tags), self)
115
115
  end
@@ -120,7 +120,7 @@ module WeebSh
120
120
  # @param hidden [true, false] if true, you can only get back hidden tags you added
121
121
  # @param nsfw [true, false, String] whether or not preview images could be NSFW. Setting this to "only" restricts it to NSFW images.
122
122
  # @param file_type [String] the file type an image is required to be for selection
123
- # @param page [Number] the page number of images to use
123
+ # @param page [Integer] the page number of images to use
124
124
  # @param account [String] the account ID to get images from
125
125
  # @return [WeebImage] Returns image that was randomly selected.
126
126
  def list(type: nil, tags: [], hidden: false, nsfw: false, file_type: nil, page: 0, account: nil)
@@ -139,5 +139,5 @@ module WeebSh
139
139
  end
140
140
 
141
141
  # Alias for the class {Toph}
142
- Image = Toph
142
+ Images = Toph
143
143
  end
@@ -1,3 +1,3 @@
1
1
  module WeebSh
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weeb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Snazzah
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.49.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: inch
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rest-client
43
57
  requirement: !ruby/object:Gem::Requirement