discorb 0.16.0 → 0.17.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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/build_main.yml +2 -2
  4. data/.github/workflows/build_version.yml +1 -1
  5. data/.github/workflows/codeql-analysis.yml +1 -1
  6. data/.github/workflows/lint-push.yml +3 -5
  7. data/.github/workflows/lint.yml +1 -1
  8. data/.github/workflows/spec.yml +30 -0
  9. data/.lefthook/commit-msg/validator.rb +5 -0
  10. data/.rspec +2 -0
  11. data/.rspec_parallel +2 -0
  12. data/.rubocop.yml +43 -6
  13. data/Changelog.md +14 -1
  14. data/Gemfile +14 -8
  15. data/Rakefile +41 -26
  16. data/bin/console +3 -3
  17. data/docs/Examples.md +1 -1
  18. data/docs/application_command.md +138 -46
  19. data/docs/cli/irb.md +2 -2
  20. data/docs/cli/new.md +14 -9
  21. data/docs/cli/run.md +7 -11
  22. data/docs/cli.md +17 -10
  23. data/docs/events.md +209 -211
  24. data/docs/extension.md +1 -2
  25. data/docs/faq.md +0 -1
  26. data/docs/tutorial.md +12 -12
  27. data/docs/voice_events.md +106 -106
  28. data/examples/commands/message.rb +63 -0
  29. data/examples/commands/permission.rb +18 -0
  30. data/examples/commands/slash.rb +44 -0
  31. data/examples/commands/user.rb +51 -0
  32. data/examples/components/authorization_button.rb +2 -2
  33. data/examples/components/select_menu.rb +2 -2
  34. data/examples/extension/main.rb +1 -1
  35. data/examples/extension/message_expander.rb +5 -2
  36. data/examples/simple/eval.rb +2 -2
  37. data/examples/simple/ping_pong.rb +1 -1
  38. data/examples/simple/rolepanel.rb +1 -1
  39. data/examples/simple/shard.rb +1 -1
  40. data/examples/simple/wait_for_message.rb +1 -1
  41. data/exe/discorb +31 -16
  42. data/lefthook.yml +45 -0
  43. data/lib/discorb/allowed_mentions.rb +1 -0
  44. data/lib/discorb/app_command/command.rb +127 -65
  45. data/lib/discorb/app_command/common.rb +25 -0
  46. data/lib/discorb/app_command/handler.rb +115 -33
  47. data/lib/discorb/app_command.rb +2 -1
  48. data/lib/discorb/application.rb +1 -0
  49. data/lib/discorb/asset.rb +1 -2
  50. data/lib/discorb/attachment.rb +1 -1
  51. data/lib/discorb/audit_logs.rb +11 -8
  52. data/lib/discorb/channel/base.rb +108 -0
  53. data/lib/discorb/channel/category.rb +32 -0
  54. data/lib/discorb/channel/container.rb +44 -0
  55. data/lib/discorb/channel/dm.rb +28 -0
  56. data/lib/discorb/channel/guild.rb +245 -0
  57. data/lib/discorb/channel/stage.rb +140 -0
  58. data/lib/discorb/channel/text.rb +345 -0
  59. data/lib/discorb/channel/thread.rb +321 -0
  60. data/lib/discorb/channel/voice.rb +79 -0
  61. data/lib/discorb/channel.rb +2 -1165
  62. data/lib/discorb/client.rb +38 -26
  63. data/lib/discorb/common.rb +2 -1
  64. data/lib/discorb/components/button.rb +2 -1
  65. data/lib/discorb/components/select_menu.rb +4 -2
  66. data/lib/discorb/components/text_input.rb +12 -2
  67. data/lib/discorb/components.rb +1 -1
  68. data/lib/discorb/embed.rb +22 -7
  69. data/lib/discorb/emoji.rb +30 -3
  70. data/lib/discorb/emoji_table.rb +4969 -3
  71. data/lib/discorb/event.rb +29 -4
  72. data/lib/discorb/exe/about.rb +1 -0
  73. data/lib/discorb/exe/irb.rb +2 -4
  74. data/lib/discorb/exe/new.rb +90 -23
  75. data/lib/discorb/exe/run.rb +8 -22
  76. data/lib/discorb/exe/setup.rb +25 -12
  77. data/lib/discorb/exe/show.rb +4 -3
  78. data/lib/discorb/extend.rb +1 -0
  79. data/lib/discorb/extension.rb +6 -3
  80. data/lib/discorb/flag.rb +11 -0
  81. data/lib/discorb/gateway.rb +67 -19
  82. data/lib/discorb/guild.rb +188 -56
  83. data/lib/discorb/guild_template.rb +10 -4
  84. data/lib/discorb/http.rb +16 -9
  85. data/lib/discorb/integration.rb +4 -1
  86. data/lib/discorb/intents.rb +1 -1
  87. data/lib/discorb/interaction/autocomplete.rb +28 -16
  88. data/lib/discorb/interaction/command.rb +36 -12
  89. data/lib/discorb/interaction/components.rb +5 -2
  90. data/lib/discorb/interaction/modal.rb +0 -1
  91. data/lib/discorb/interaction/response.rb +61 -22
  92. data/lib/discorb/interaction/root.rb +13 -13
  93. data/lib/discorb/interaction.rb +1 -0
  94. data/lib/discorb/invite.rb +5 -2
  95. data/lib/discorb/member.rb +25 -5
  96. data/lib/discorb/message.rb +47 -14
  97. data/lib/discorb/message_meta.rb +1 -0
  98. data/lib/discorb/modules.rb +56 -14
  99. data/lib/discorb/presence.rb +2 -2
  100. data/lib/discorb/rate_limit.rb +7 -2
  101. data/lib/discorb/reaction.rb +4 -4
  102. data/lib/discorb/role.rb +19 -4
  103. data/lib/discorb/shard.rb +1 -1
  104. data/lib/discorb/sticker.rb +8 -7
  105. data/lib/discorb/user.rb +2 -1
  106. data/lib/discorb/utils/colored_puts.rb +1 -0
  107. data/lib/discorb/voice_state.rb +10 -6
  108. data/lib/discorb/webhook.rb +36 -24
  109. data/lib/discorb.rb +5 -3
  110. data/po/yard.pot +9 -9
  111. data/sig/discorb.rbs +7232 -7235
  112. metadata +21 -5
  113. data/examples/commands/bookmarker.rb +0 -42
  114. data/examples/commands/hello.rb +0 -10
  115. data/examples/commands/inspect.rb +0 -25
@@ -85,7 +85,9 @@ module Discorb
85
85
  # @return [Boolean] Whether the message is pinned.
86
86
  attr_reader :pinned
87
87
  alias pinned? pinned
88
- @message_type = {
88
+ # @private
89
+ # @return [{Integer => Symbol}] The mapping of message type.
90
+ MESSAGE_TYPE = {
89
91
  0 => :default,
90
92
  1 => :recipient_add,
91
93
  2 => :recipient_remove,
@@ -257,8 +259,15 @@ module Discorb
257
259
  #
258
260
  # @return [Async::Task<void>] The task.
259
261
  #
260
- def edit(content = Discorb::Unset, embed: Discorb::Unset, embeds: Discorb::Unset, allowed_mentions: Discorb::Unset,
261
- attachments: Discorb::Unset, components: Discorb::Unset, supress: Discorb::Unset)
262
+ def edit(
263
+ content = Discorb::Unset,
264
+ embed: Discorb::Unset,
265
+ embeds: Discorb::Unset,
266
+ allowed_mentions: Discorb::Unset,
267
+ attachments: Discorb::Unset,
268
+ components: Discorb::Unset,
269
+ supress: Discorb::Unset
270
+ )
262
271
  Async do
263
272
  channel.edit_message(@id, content, embed: embed, embeds: embeds, allowed_mentions: allowed_mentions,
264
273
  attachments: attachments, components: components, supress: supress).wait
@@ -331,7 +340,10 @@ module Discorb
331
340
  #
332
341
  def add_reaction(emoji)
333
342
  Async do
334
- @client.http.request(Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me", "//channels/:channel_id/messages/:message_id/reactions/:emoji/@me", :put), nil).wait
343
+ @client.http.request(
344
+ Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me",
345
+ "//channels/:channel_id/messages/:message_id/reactions/:emoji/@me", :put), nil
346
+ ).wait
335
347
  end
336
348
  end
337
349
 
@@ -347,7 +359,11 @@ module Discorb
347
359
  #
348
360
  def remove_reaction(emoji)
349
361
  Async do
350
- @client.http.request(Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me", "//channels/:channel_id/messages/:message_id/reactions/:emoji/@me", :delete)).wait
362
+ @client.http.request(
363
+ Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me",
364
+ "//channels/:channel_id/messages/:message_id/reactions/:emoji/@me",
365
+ :delete)
366
+ ).wait
351
367
  end
352
368
  end
353
369
 
@@ -364,7 +380,17 @@ module Discorb
364
380
  #
365
381
  def remove_reaction_of(emoji, member)
366
382
  Async do
367
- @client.http.request(Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/#{member.is_a?(Member) ? member.id : member}", "//channels/:channel_id/messages/:message_id/reactions/:emoji/:user_id", :delete)).wait
383
+ @client.http.request(
384
+ Route.new(
385
+ "/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/#{if member.is_a?(Member)
386
+ member.id
387
+ else
388
+ member
389
+ end}",
390
+ "//channels/:channel_id/messages/:message_id/reactions/:emoji/:user_id",
391
+ :delete
392
+ )
393
+ ).wait
368
394
  end
369
395
  end
370
396
 
@@ -386,7 +412,13 @@ module Discorb
386
412
  after = 0
387
413
  users = []
388
414
  loop do
389
- _resp, data = @client.http.request(Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}?limit=100&after=#{after}", "//channels/:channel_id/messages/:message_id/reactions/:emoji", :get)).wait
415
+ _resp, data = @client.http.request(
416
+ Route.new(
417
+ "/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}?limit=100&after=#{after}",
418
+ "//channels/:channel_id/messages/:message_id/reactions/:emoji",
419
+ :get
420
+ )
421
+ ).wait
390
422
  break if data.empty?
391
423
 
392
424
  users += data.map { |r| guild&.members&.[](r[:id]) || @client.users[r[:id]] || User.new(@client, r) }
@@ -397,7 +429,13 @@ module Discorb
397
429
  end
398
430
  next users
399
431
  else
400
- _resp, data = @client.http.request(Route.new("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}?limit=#{limit}&after=#{after}", "//channels/:channel_id/messages/:message_id/reactions/:emoji", :get)).wait
432
+ _resp, data = @client.http.request(
433
+ Route.new(
434
+ "/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}?limit=#{limit}&after=#{after}",
435
+ "//channels/:channel_id/messages/:message_id/reactions/:emoji",
436
+ :get
437
+ )
438
+ ).wait
401
439
  next data.map { |r| guild&.members&.[](r[:id]) || @client.users[r[:id]] || User.new(@client, r) }
402
440
  end
403
441
  end
@@ -487,7 +525,7 @@ module Discorb
487
525
  @embeds = data[:embeds] ? data[:embeds].map { |e| Embed.from_hash(e) } : []
488
526
  @reactions = data[:reactions] ? data[:reactions].map { |r| Reaction.new(self, r) } : []
489
527
  @pinned = data[:pinned]
490
- @type = self.class.message_type[data[:type]]
528
+ @type = MESSAGE_TYPE[data[:type]]
491
529
  @activity = data[:activity] && Activity.new(data[:activity])
492
530
  @application_id = data[:application_id]
493
531
  @message_reference = data[:message_reference] && Reference.from_hash(data[:message_reference])
@@ -500,10 +538,5 @@ module Discorb
500
538
  @data.update(data)
501
539
  @deleted = false
502
540
  end
503
-
504
- class << self
505
- # @private
506
- attr_reader :message_type
507
- end
508
541
  end
509
542
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Discorb
3
4
  #
4
5
  # Represents a message in Discord.
@@ -21,8 +21,17 @@ module Discorb
21
21
  #
22
22
  # @return [Async::Task<Discorb::Message>] The message sent.
23
23
  #
24
- def post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil,
25
- reference: nil, components: nil, attachment: nil, attachments: nil)
24
+ def post(
25
+ content = nil,
26
+ tts: false,
27
+ embed: nil,
28
+ embeds: nil,
29
+ allowed_mentions: nil,
30
+ reference: nil,
31
+ components: nil,
32
+ attachment: nil,
33
+ attachments: nil
34
+ )
26
35
  Async do
27
36
  payload = {}
28
37
  payload[:content] = content if content
@@ -47,7 +56,10 @@ module Discorb
47
56
  }
48
57
  end
49
58
 
50
- _resp, data = @client.http.multipart_request(Route.new("/channels/#{channel_id.wait}/messages", "//channels/:channel_id/messages", :post), payload, attachments).wait
59
+ _resp, data = @client.http.multipart_request(
60
+ Route.new("/channels/#{channel_id.wait}/messages", "//channels/:channel_id/messages",
61
+ :post), payload, attachments
62
+ ).wait
51
63
  Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
52
64
  end
53
65
  end
@@ -70,8 +82,16 @@ module Discorb
70
82
  #
71
83
  # @return [Async::Task<void>] The task.
72
84
  #
73
- def edit_message(message_id, content = Discorb::Unset, embed: Discorb::Unset, embeds: Discorb::Unset, allowed_mentions: Discorb::Unset,
74
- attachments: Discorb::Unset, components: Discorb::Unset, supress: Discorb::Unset)
85
+ def edit_message(
86
+ message_id,
87
+ content = Discorb::Unset,
88
+ embed: Discorb::Unset,
89
+ embeds: Discorb::Unset,
90
+ allowed_mentions: Discorb::Unset,
91
+ attachments: Discorb::Unset,
92
+ components: Discorb::Unset,
93
+ supress: Discorb::Unset
94
+ )
75
95
  Async do
76
96
  payload = {}
77
97
  payload[:content] = content if content != Discorb::Unset
@@ -81,8 +101,11 @@ module Discorb
81
101
  embeds
82
102
  end
83
103
  payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
84
- payload[:allowed_mentions] =
85
- allowed_mentions == Discorb::Unset ? @client.allowed_mentions.to_hash : allowed_mentions.to_hash(@client.allowed_mentions)
104
+ payload[:allowed_mentions] = if allowed_mentions == Discorb::Unset
105
+ @client.allowed_mentions.to_hash
106
+ else
107
+ allowed_mentions.to_hash(@client.allowed_mentions)
108
+ end
86
109
  payload[:components] = Component.to_payload(components) if components != Discorb::Unset
87
110
  payload[:flags] = (supress ? 1 << 2 : 0) if supress != Discorb::Unset
88
111
  if attachments != Discorb::Unset
@@ -95,7 +118,8 @@ module Discorb
95
118
  end
96
119
  end
97
120
  @client.http.multipart_request(
98
- Route.new("/channels/#{channel_id.wait}/messages/#{message_id}", "//channels/:channel_id/messages/:message_id", :patch),
121
+ Route.new("/channels/#{channel_id.wait}/messages/#{message_id}",
122
+ "//channels/:channel_id/messages/:message_id", :patch),
99
123
  payload,
100
124
  attachments == Discorb::Unset ? [] : attachments
101
125
  ).wait
@@ -113,7 +137,12 @@ module Discorb
113
137
  #
114
138
  def delete_message!(message_id, reason: nil)
115
139
  Async do
116
- @client.http.request(Route.new("/channels/#{channel_id.wait}/messages/#{message_id}", "//channels/:channel_id/messages/:message_id", :delete), audit_log_reason: reason).wait
140
+ @client.http.request(
141
+ Route.new(
142
+ "/channels/#{channel_id.wait}/messages/#{message_id}", "//channels/:channel_id/messages/:message_id",
143
+ :delete
144
+ ), {}, audit_log_reason: reason,
145
+ ).wait
117
146
  end
118
147
  end
119
148
 
@@ -130,7 +159,8 @@ module Discorb
130
159
  #
131
160
  def fetch_message(id)
132
161
  Async do
133
- _resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/messages/#{id}", "//channels/:channel_id/messages/:message_id", :get)).wait
162
+ _resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/messages/#{id}",
163
+ "//channels/:channel_id/messages/:message_id", :get)).wait
134
164
  Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
135
165
  end
136
166
  end
@@ -154,7 +184,12 @@ module Discorb
154
184
  after: Discorb::Utils.try(around, :id),
155
185
  around: Discorb::Utils.try(before, :id),
156
186
  }.filter { |_k, v| !v.nil? }.to_h
157
- _resp, messages = @client.http.request(Route.new("/channels/#{channel_id.wait}/messages?#{URI.encode_www_form(params)}", "//channels/:channel_id/messages", :get)).wait
187
+ _resp, messages = @client.http.request(
188
+ Route.new(
189
+ "/channels/#{channel_id.wait}/messages?#{URI.encode_www_form(params)}", "//channels/:channel_id/messages",
190
+ :get
191
+ )
192
+ ).wait
158
193
  messages.map { |m| Message.new(@client, m.merge({ guild_id: @guild_id.to_s })) }
159
194
  end
160
195
  end
@@ -167,7 +202,8 @@ module Discorb
167
202
  #
168
203
  def fetch_pins
169
204
  Async do
170
- _resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/pins", "//channels/:channel_id/pins", :get)).wait
205
+ _resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/pins",
206
+ "//channels/:channel_id/pins", :get)).wait
171
207
  data.map { |pin| Message.new(@client, pin) }
172
208
  end
173
209
  end
@@ -183,7 +219,10 @@ module Discorb
183
219
  #
184
220
  def pin_message(message, reason: nil)
185
221
  Async do
186
- @client.http.request(Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id", :put), {}, audit_log_reason: reason).wait
222
+ @client.http.request(
223
+ Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id",
224
+ :put), {}, audit_log_reason: reason,
225
+ ).wait
187
226
  end
188
227
  end
189
228
 
@@ -198,7 +237,10 @@ module Discorb
198
237
  #
199
238
  def unpin_message(message, reason: nil)
200
239
  Async do
201
- @client.http.request(Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id", :delete), audit_log_reason: reason).wait
240
+ @client.http.request(
241
+ Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id",
242
+ :delete), {}, audit_log_reason: reason,
243
+ ).wait
202
244
  end
203
245
  end
204
246
 
@@ -113,8 +113,8 @@ module Discorb
113
113
  @details = data[:details]
114
114
  @state = data[:state]
115
115
  @emoji = if data[:emoji]
116
- data[:emoji][:id].nil? ? UnicodeEmoji.new(data[:emoji][:name]) : PartialEmoji.new(data[:emoji])
117
- end
116
+ data[:emoji][:id].nil? ? UnicodeEmoji.new(data[:emoji][:name]) : PartialEmoji.new(data[:emoji])
117
+ end
118
118
  @party = data[:party] && Party.new(data[:party])
119
119
  @assets = data[:assets] && Asset.new(data[:assets])
120
120
  @instance = data[:instance]
@@ -48,7 +48,8 @@ module Discorb
48
48
  return if (bucket[:remaining]).positive?
49
49
 
50
50
  time = bucket[:reset_at] - Time.now.to_f
51
- @client.logger.info("rate limit for #{path.identifier} with #{path.major_param} reached, waiting #{time.round(4)} seconds")
51
+ @client.logger.info("rate limit for #{path.identifier} with #{path.major_param} reached, " \
52
+ "waiting #{time.round(4)} seconds")
52
53
  sleep(time)
53
54
  end
54
55
 
@@ -59,8 +60,12 @@ module Discorb
59
60
  # @param [Net::HTTPResponse] resp The response.
60
61
  #
61
62
  def save(path, resp)
62
- @global = Time.now.to_f + JSON.parse(resp.body, symbolize_names: true)[:retry_after] if resp["X-Ratelimit-Global"] == "true"
63
+ if resp["X-Ratelimit-Global"] == "true"
64
+ @global = Time.now.to_f + JSON.parse(resp.body,
65
+ symbolize_names: true)[:retry_after]
66
+ end
63
67
  return unless resp["X-RateLimit-Remaining"]
68
+
64
69
  @path_ratelimit_hash[path.identifier] = resp["X-Ratelimit-Bucket"]
65
70
  @path_ratelimit_bucket[resp["X-Ratelimit-Bucket"] + path.major_param] = {
66
71
  remaining: resp["X-RateLimit-Remaining"].to_i,
@@ -45,10 +45,10 @@ module Discorb
45
45
  @count = data[:count]
46
46
  @me = data[:me]
47
47
  @emoji = if data[:emoji][:id].nil?
48
- UnicodeEmoji.new(data[:emoji][:name])
49
- else
50
- PartialEmoji.new(data[:emoji])
51
- end
48
+ UnicodeEmoji.new(data[:emoji][:name])
49
+ else
50
+ PartialEmoji.new(data[:emoji])
51
+ end
52
52
  end
53
53
  end
54
54
  end
data/lib/discorb/role.rb CHANGED
@@ -106,7 +106,8 @@ module Discorb
106
106
  #
107
107
  def move(position, reason: nil)
108
108
  Async do
109
- @client.http.request(Route.new("/guilds/#{@guild.id}/roles", "//guilds/:guild_id/roles", :patch), { id: @id, position: position }, audit_log_reason: reason).wait
109
+ @client.http.request(Route.new("/guilds/#{@guild.id}/roles", "//guilds/:guild_id/roles", :patch),
110
+ { id: @id, position: position }, audit_log_reason: reason).wait
110
111
  end
111
112
  end
112
113
 
@@ -125,7 +126,15 @@ module Discorb
125
126
  #
126
127
  # @return [Async::Task<void>] The task.
127
128
  #
128
- def edit(name: Discorb::Unset, position: Discorb::Unset, color: Discorb::Unset, hoist: Discorb::Unset, mentionable: Discorb::Unset, icon: Discorb::Unset, reason: nil)
129
+ def edit(
130
+ name: Discorb::Unset,
131
+ position: Discorb::Unset,
132
+ color: Discorb::Unset,
133
+ hoist: Discorb::Unset,
134
+ mentionable: Discorb::Unset,
135
+ icon: Discorb::Unset,
136
+ reason: nil
137
+ )
129
138
  Async do
130
139
  payload = {}
131
140
  payload[:name] = name if name != Discorb::Unset
@@ -140,7 +149,10 @@ module Discorb
140
149
  payload[:unicode_emoji] = icon.to_s
141
150
  end
142
151
  end
143
- @client.http.request(Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id", :patch), payload, audit_log_reason: reason).wait
152
+ @client.http.request(
153
+ Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id",
154
+ :patch), payload, audit_log_reason: reason,
155
+ ).wait
144
156
  end
145
157
  end
146
158
 
@@ -155,7 +167,10 @@ module Discorb
155
167
  #
156
168
  def delete!(reason: nil)
157
169
  Async do
158
- @client.http.request(Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id", :delete), audit_log_reason: reason).wait
170
+ @client.http.request(
171
+ Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id",
172
+ :delete), {}, audit_log_reason: reason,
173
+ ).wait
159
174
  end
160
175
  end
161
176
 
data/lib/discorb/shard.rb CHANGED
@@ -41,7 +41,7 @@ module Discorb
41
41
  Thread.current.thread_variable_set("shard", self)
42
42
  if @index.positive?
43
43
  Thread.stop
44
- sleep 5 # Somehow discord disconnects the shard without a little sleep.
44
+ sleep 5 # Somehow discord disconnects the shard without a little sleep.
45
45
  end
46
46
  client.send(:main_loop, id)
47
47
  end
@@ -85,7 +85,10 @@ module Discorb
85
85
  payload[:name] = name unless name == Discorb::Unset
86
86
  payload[:description] = description unless description == Discorb::Unset
87
87
  payload[:tags] = tag.name unless tag == Discorb::Unset
88
- @client.http.request(Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id", :patch), payload, audit_log_reason: reason).wait
88
+ @client.http.request(
89
+ Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
90
+ :patch), payload, audit_log_reason: reason
91
+ ).wait
89
92
  end
90
93
  end
91
94
 
@@ -99,7 +102,10 @@ module Discorb
99
102
  #
100
103
  def delete!(reason: nil)
101
104
  Async do
102
- @client.http.request(Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id", :delete), audit_log_reason: reason).wait
105
+ @client.http.request(
106
+ Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
107
+ :delete), {}, audit_log_reason: reason
108
+ ).wait
103
109
  end
104
110
  end
105
111
 
@@ -161,10 +167,5 @@ module Discorb
161
167
  @user = data[:user] && (@client.users[data[:user][:id]] || User.new(@client, data[:user]))
162
168
  end
163
169
  end
164
-
165
- class << self
166
- # @private
167
- attr_reader :sticker_type, :sticker_format
168
- end
169
170
  end
170
171
  end
data/lib/discorb/user.rb CHANGED
@@ -95,7 +95,8 @@ module Discorb
95
95
  Async do
96
96
  next @dm_channel_id if @dm_channel_id
97
97
 
98
- _resp, dm_channel = @client.http.request(Route.new("/users/@me/channels", "//users/@me/channels", :post), { recipient_id: @id }).wait
98
+ _resp, dm_channel = @client.http.request(Route.new("/users/@me/channels", "//users/@me/channels", :post),
99
+ { recipient_id: @id }).wait
99
100
  @dm_channel_id = dm_channel[:id]
100
101
  @dm_channel_id
101
102
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # @private
3
4
  def sputs(text)
4
5
  puts "\e[92m#{text}\e[m"
@@ -95,10 +95,10 @@ module Discorb
95
95
  @user_id = data[:user_id]
96
96
  unless guild.nil?
97
97
  @member = if data.key?(:member)
98
- guild.members[data[:user_id]] || Member.new(@client, @guild_id, data[:member][:user], data[:member])
99
- else
100
- guild.members[data[:user_id]]
101
- end
98
+ guild.members[data[:user_id]] || Member.new(@client, @guild_id, data[:member][:user], data[:member])
99
+ else
100
+ guild.members[data[:user_id]]
101
+ end
102
102
  end
103
103
  @session_id = data[:session_id]
104
104
  @deaf = data[:deaf]
@@ -197,7 +197,8 @@ module Discorb
197
197
  payload[:topic] = topic if topic != Discorb::Unset
198
198
  payload[:privacy_level] = PRIVACY_LEVEL.key(privacy_level) if privacy_level != Discorb::Unset
199
199
  @client.http.request(
200
- Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:channel_id", :patch), payload, audit_log_reason: reason,
200
+ Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:channel_id",
201
+ :patch), payload, audit_log_reason: reason,
201
202
  ).wait
202
203
  self
203
204
  end
@@ -214,7 +215,10 @@ module Discorb
214
215
  #
215
216
  def delete!(reason: nil)
216
217
  Async do
217
- @client.http.request(Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:stage_instance_id", :delete), audit_log_reason: reason).wait
218
+ @client.http.request(
219
+ Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:stage_instance_id",
220
+ :delete), {}, audit_log_reason: reason
221
+ ).wait
218
222
  self
219
223
  end
220
224
  end
@@ -66,22 +66,23 @@ module Discorb
66
66
  # @return [Async::Task<nil>] If `wait` is false.
67
67
  #
68
68
  def post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil,
69
- file: nil, files: nil, username: nil, avatar_url: Discorb::Unset, wait: true)
69
+ file: nil, files: nil, username: nil, avatar_url: Discorb::Unset, wait: true)
70
70
  Async do
71
71
  payload = {}
72
72
  payload[:content] = content if content
73
73
  payload[:tts] = tts
74
74
  tmp_embed = if embed
75
- [embed]
76
- elsif embeds
77
- embeds
78
- end
75
+ [embed]
76
+ elsif embeds
77
+ embeds
78
+ end
79
79
  payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
80
80
  payload[:allowed_mentions] = allowed_mentions&.to_hash
81
81
  payload[:username] = username if username
82
82
  payload[:avatar_url] = avatar_url if avatar_url != Discorb::Unset
83
83
  files = [file]
84
- _resp, data = @http.multipart_request(Route.new("#{url}?wait=#{wait}", "//webhooks/:webhook_id/:token", :post), files, payload, headers: headers).wait
84
+ _resp, data = @http.multipart_request(Route.new("#{url}?wait=#{wait}", "//webhooks/:webhook_id/:token", :post),
85
+ files, payload, headers: headers).wait
85
86
  data && Webhook::Message.new(self, data)
86
87
  end
87
88
  end
@@ -157,7 +158,10 @@ module Discorb
157
158
  payload[:attachments] = attachments.map(&:to_hash) if attachments != Discorb::Unset
158
159
  payload[:allowed_mentions] = allowed_mentions if allowed_mentions != Discorb::Unset
159
160
  files = [file] if file != Discorb::Unset
160
- _resp, data = @http.multipart_request(Route.new("#{url}/messages/#{Utils.try(message, :id)}", "//webhooks/:webhook_id/:token/messages/:message_id", :patch), payload, files).wait
161
+ _resp, data = @http.multipart_request(
162
+ Route.new("#{url}/messages/#{Utils.try(message, :id)}", "//webhooks/:webhook_id/:token/messages/:message_id",
163
+ :patch), payload, files
164
+ ).wait
161
165
  message.send(:_set_data, data)
162
166
  message
163
167
  end
@@ -173,9 +177,9 @@ module Discorb
173
177
  def delete_message!(message)
174
178
  Async do
175
179
  @http.request(Route.new(
176
- "#{url}/messages/#{Utils.try(message, :id)}",
177
- "//webhooks/:webhook_id/:token/messages/:message_id", :delete
178
- )).wait
180
+ "#{url}/messages/#{Utils.try(message, :id)}",
181
+ "//webhooks/:webhook_id/:token/messages/:message_id", :delete
182
+ )).wait
179
183
  message
180
184
  end
181
185
  end
@@ -447,25 +451,33 @@ module Discorb
447
451
  # @return [Discorb::Webhook::URLWebhook] The URLWebhook.
448
452
  #
449
453
  def new(url)
450
- if self != Webhook
451
- return super(*url) if url.is_a?(Array)
452
-
453
- return super
454
- end
455
- if url.is_a?(String)
454
+ if self == Webhook
456
455
  URLWebhook.new(url)
457
456
  else
458
- case url[1][:type]
459
- when 1
460
- IncomingWebhook
461
- when 2
462
- FollowerWebhook
463
- when 3
464
- ApplicationWebhook
465
- end.new(url)
457
+ super
466
458
  end
467
459
  end
468
460
 
461
+ #
462
+ # Creates Webhook with discord data.
463
+ # @private
464
+ #
465
+ # @param [Discorb::Client] client The client.
466
+ # @param [Hash] data The data of the webhook.
467
+ #
468
+ # @return [Discorb::Webhook] The Webhook.
469
+ #
470
+ def from_data(client, data)
471
+ case data[:type]
472
+ when 1
473
+ IncomingWebhook
474
+ when 2
475
+ FollowerWebhook
476
+ when 3
477
+ ApplicationWebhook
478
+ end.new(client, data)
479
+ end
480
+
469
481
  def from_url(url)
470
482
  URLWebhook.new(url)
471
483
  end
data/lib/discorb.rb CHANGED
@@ -9,7 +9,8 @@ module Discorb
9
9
  # @private
10
10
  #
11
11
  # @!macro [new] async
12
- # @note This is an asynchronous method, it will return a `Async::Task` object. Use `Async::Task#wait` to get the result.
12
+ # @note This is an asynchronous method, it will return a `Async::Task` object.
13
+ # Use `Async::Task#wait` to get the result.
13
14
  #
14
15
  # @!macro [new] client_cache
15
16
  # @note This method returns an object from client cache. it will return `nil` if the object is not in cache.
@@ -19,7 +20,8 @@ module Discorb
19
20
  # @note You must enable `GUILD_MEMBERS` intent to use this method.
20
21
  #
21
22
  # @!macro edit
22
- # @note The arguments of this method are defaultly set to `Discorb::Unset`. Specify value to set the value, if not don't specify or specify `Discorb::Unset`.
23
+ # @note The arguments of this method are defaultly set to `Discorb::Unset`.
24
+ # Specify value to set the value, if not don't specify or specify `Discorb::Unset`.
23
25
  #
24
26
  # @!macro http
25
27
  # @note This method calls HTTP request.
@@ -42,7 +44,7 @@ module Discorb
42
44
  end
43
45
 
44
46
  require_order = %w[common flag dictionary error rate_limit http intents emoji_table modules] +
45
- %w[message_meta allowed_mentions] +
47
+ %w[channel/container message_meta allowed_mentions] +
46
48
  %w[user member guild emoji channel embed message] +
47
49
  %w[application audit_logs color components event event_handler] +
48
50
  %w[attachment guild_template image integration interaction invite permission] +