discorb 0.13.0 → 0.13.4

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_main.yml +1 -0
  3. data/.github/workflows/build_version.yml +4 -3
  4. data/.github/workflows/crowdin.yml +32 -0
  5. data/.gitignore +3 -1
  6. data/.yardopts +2 -0
  7. data/CODE_OF_CONDUCT.md +128 -0
  8. data/Changelog.md +420 -388
  9. data/Gemfile +5 -1
  10. data/README.md +2 -2
  11. data/Rakefile +131 -1
  12. data/crowdin.yml +2 -0
  13. data/discorb.gemspec +12 -1
  14. data/docs/Examples.md +2 -0
  15. data/docs/application_command.md +7 -5
  16. data/docs/cli/irb.md +2 -0
  17. data/docs/cli/new.md +2 -0
  18. data/docs/cli/run.md +3 -1
  19. data/docs/cli/setup.md +4 -2
  20. data/docs/cli.md +2 -0
  21. data/docs/events.md +6 -4
  22. data/docs/extension.md +2 -2
  23. data/docs/faq.md +4 -2
  24. data/docs/license.md +2 -0
  25. data/docs/tutorial.md +4 -3
  26. data/docs/voice_events.md +2 -0
  27. data/lib/discorb/app_command.rb +32 -9
  28. data/lib/discorb/application.rb +1 -1
  29. data/lib/discorb/asset.rb +1 -1
  30. data/lib/discorb/channel.rb +170 -125
  31. data/lib/discorb/client.rb +20 -22
  32. data/lib/discorb/common.rb +32 -1
  33. data/lib/discorb/dictionary.rb +10 -2
  34. data/lib/discorb/emoji.rb +7 -9
  35. data/lib/discorb/emoji_table.rb +3891 -3891
  36. data/lib/discorb/event.rb +12 -11
  37. data/lib/discorb/exe/show.rb +2 -0
  38. data/lib/discorb/extension.rb +1 -1
  39. data/lib/discorb/flag.rb +1 -1
  40. data/lib/discorb/gateway.rb +63 -17
  41. data/lib/discorb/guild.rb +110 -156
  42. data/lib/discorb/guild_template.rb +15 -12
  43. data/lib/discorb/http.rb +41 -136
  44. data/lib/discorb/integration.rb +34 -2
  45. data/lib/discorb/interaction/autocomplete.rb +1 -1
  46. data/lib/discorb/interaction/response.rb +34 -32
  47. data/lib/discorb/interaction/root.rb +8 -0
  48. data/lib/discorb/invite.rb +4 -3
  49. data/lib/discorb/log.rb +3 -2
  50. data/lib/discorb/member.rb +44 -15
  51. data/lib/discorb/message.rb +33 -22
  52. data/lib/discorb/modules.rb +28 -35
  53. data/lib/discorb/presence.rb +2 -2
  54. data/lib/discorb/rate_limit.rb +14 -18
  55. data/lib/discorb/role.rb +18 -14
  56. data/lib/discorb/sticker.rb +10 -14
  57. data/lib/discorb/user.rb +10 -10
  58. data/lib/discorb/voice_state.rb +12 -7
  59. data/lib/discorb/webhook.rb +44 -50
  60. data/lib/discorb.rb +1 -1
  61. data/po/yard.pot +7772 -5154
  62. data/sig/discorb.rbs +3316 -3819
  63. data/template-replace/scripts/locale_ja.rb +62 -0
  64. metadata +18 -5
data/lib/discorb/guild.rb CHANGED
@@ -28,7 +28,7 @@ module Discorb
28
28
  attr_reader :features
29
29
  # @return [:none, :elevated] The MFA level of the guild.
30
30
  attr_reader :mfa_level
31
- # @return [Discorb::Guild::SystemChannelFlag] The flag for the system channel.
31
+ # @return [Discorb::SystemChannelFlag] The flag for the system channel.
32
32
  attr_reader :system_channel_flags
33
33
  # @return [Time] Time that representing when bot has joined the guild.
34
34
  attr_reader :joined_at
@@ -162,20 +162,20 @@ module Discorb
162
162
 
163
163
  #
164
164
  # Leave the guild.
165
- # @macro async
166
- # @macro http
165
+ # @async
166
+ #
167
+ # @return [Async::Task<void>] The task.
167
168
  #
168
169
  def leave!
169
170
  Async do
170
- @client.http.delete("/users/@me/guilds/#{@id}").wait
171
+ @client.http.request(Route.new("/users/@me/guilds/#{@id}", "//users/@me/guilds/:guild_id", :delete)).wait
171
172
  @client.guilds.delete(@id)
172
173
  end
173
174
  end
174
175
 
175
176
  #
176
177
  # Fetch scheduled events for the guild.
177
- # @macro async
178
- # @macro http
178
+ # @async
179
179
  #
180
180
  # @param [Boolean] with_user_count Whether to include the user count in the events.
181
181
  # Defaults to `true`.
@@ -184,24 +184,23 @@ module Discorb
184
184
  #
185
185
  def fetch_scheduled_events(with_user_count: true)
186
186
  Async do
187
- _resp, events = @client.http.get("/guilds/#{@id}/scheduled-events?with_user_count=#{with_user_count}").wait
187
+ _resp, events = @client.http.request(Route.new("/guilds/#{@id}/scheduled-events?with_user_count=#{with_user_count}", "//guilds/:guild_id/scheduled-events", :get)).wait
188
188
  @scheduled_events = events.map { |e| ScheduledEvent.new(@client, e) }
189
189
  end
190
190
  end
191
191
 
192
192
  #
193
193
  # Fetch the scheduled event by ID.
194
- # @macro async
195
- # @macro http
194
+ # @async
196
195
  #
197
196
  # @param [#to_s] id The ID of the scheduled event.
198
197
  #
199
- # @return [Discorb::ScheduledEvent] The event with the given ID.
200
- # @return [nil] If no event with the given ID exists.
198
+ # @return [Async::Task<Discorb::ScheduledEvent>] The event with the given ID.
199
+ # @return [Async::Task<nil>] If no event with the given ID exists.
201
200
  #
202
201
  def fetch_scheduled_event(id)
203
202
  Async do
204
- _resp, event = @client.http.get("/guilds/#{@id}/scheduled-events/#{id}").wait
203
+ _resp, event = @client.http.request(Route.new("/guilds/#{@id}/scheduled-events/#{id}", "//guilds/:guild_id/scheduled-events/:scheduled_event_id", :get)).wait
205
204
  rescue Discorb::NotFoundError
206
205
  return nil
207
206
  else
@@ -211,6 +210,7 @@ module Discorb
211
210
 
212
211
  #
213
212
  # Create a scheduled event for the guild.
213
+ # @async
214
214
  #
215
215
  # @param [:stage_instance, :voice, :external] type The type of event to create.
216
216
  # @param [String] name The name of the event.
@@ -221,7 +221,7 @@ module Discorb
221
221
  # @param [String, nil] location The location of the event. Defaults to `nil`.
222
222
  # @param [:guild_only] privacy_level The privacy level of the event. This must be `:guild_only`.
223
223
  #
224
- # @return [Discorb::ScheduledEvent] The created event.
224
+ # @return [Async::Task<Discorb::ScheduledEvent>] The created event.
225
225
  #
226
226
  def create_scheduled_event(
227
227
  type,
@@ -274,22 +274,21 @@ module Discorb
274
274
  else
275
275
  raise ArgumentError, "Invalid scheduled event type: #{type}"
276
276
  end
277
- _resp, event = @client.http.post("/guilds/#{@id}/scheduled-events", payload).wait
277
+ _resp, event = @client.http.request(Route.new("/guilds/#{@id}/scheduled-events", "//guilds/:guild_id/scheduled-events", :post), payload).wait
278
278
  Discorb::ScheduledEvent.new(@client, event)
279
279
  end
280
280
  end
281
281
 
282
282
  #
283
283
  # Fetch emoji list of the guild.
284
- # @macro async
285
- # @macro http
284
+ # @async
286
285
  # @note This querys the API every time. We recommend using {#emojis} instead.
287
286
  #
288
287
  # @return [Async::Task<Discorb::Dictionary{Discorb::Snowflake => Discorb::CustomEmoji}>] A dictionary of emoji in the guild.
289
288
  #
290
289
  def fetch_emoji_list
291
290
  Async do
292
- _resp, data = @client.http.get("/guilds/#{@id}/emojis").wait
291
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/emojis", "//guilds/:guild_id/emojis", :get)).wait
293
292
  @emojis = Dictionary.new
294
293
  ids = @emojis.map(&:id).map(&:to_s)
295
294
  data.map do |e|
@@ -305,8 +304,7 @@ module Discorb
305
304
 
306
305
  #
307
306
  # Fetch emoji id of the guild.
308
- # @macro async
309
- # @macro http
307
+ # @async
310
308
  # @note This querys the API every time. We recommend using {#emojis} instead.
311
309
  #
312
310
  # @param [#to_s] id The emoji id.
@@ -314,14 +312,13 @@ module Discorb
314
312
  # @return [Async::Task<Discorb::CustomEmoji>] The emoji with the given id.
315
313
  #
316
314
  def fetch_emoji(id)
317
- _resp, data = @client.http.get("/guilds/#{@id}/emojis/#{id}").wait
315
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/emojis/#{id}", "//guilds/:guild_id/emojis/:emoji_id", :get)).wait
318
316
  @emojis[e[:id]] = CustomEmoji.new(@client, self, data)
319
317
  end
320
318
 
321
319
  #
322
320
  # Create a custom emoji.
323
- # @macro async
324
- # @macro http
321
+ # @async
325
322
  #
326
323
  # @param [#to_s] name The name of the emoji.
327
324
  # @param [Discorb::Image] image The image of the emoji.
@@ -330,63 +327,57 @@ module Discorb
330
327
  # @return [Async::Task<Discorb::CustomEmoji>] The created emoji.
331
328
  #
332
329
  def create_emoji(name, image, roles: [])
333
- _resp, data = @client.http.post(
334
- "/guilds/#{@id}/emojis",
335
- {
336
- name: name,
337
- image: image.to_s,
338
- roles: roles.map { |r| Discorb::Utils.try(r, :id) },
339
- }
340
- ).wait
330
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/emojis", "//guilds/:guild_id/emojis", :post),
331
+ {
332
+ name: name,
333
+ image: image.to_s,
334
+ roles: roles.map { |r| Discorb::Utils.try(r, :id) },
335
+ }).wait
341
336
  @emojis[data[:id]] = CustomEmoji.new(@client, self, data)
342
337
  end
343
338
 
344
339
  #
345
340
  # Fetch webhooks of the guild.
346
- # @macro async
347
- # @macro http
341
+ # @async
348
342
  #
349
343
  # @return [Async::Task<Array<Discorb::Webhook>>] A list of webhooks in the guild.
350
344
  #
351
345
  def fetch_webhooks
352
346
  Async do
353
- _resp, data = @client.http.get("/guilds/#{@id}/webhooks").wait
347
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/webhooks", "//guilds/:guild_id/webhooks", :get)).wait
354
348
  data.map { |webhook| Webhook.new([@client, webhook]) }
355
349
  end
356
350
  end
357
351
 
358
352
  #
359
353
  # Fetch audit log of the guild.
360
- # @macro async
361
- # @macro http
354
+ # @async
362
355
  #
363
356
  # @return [Async::Task<Discorb::AuditLog>] The audit log of the guild.
364
357
  #
365
358
  def fetch_audit_log
366
359
  Async do
367
- _resp, data = @client.http.get("/guilds/#{@id}/audit-logs").wait
360
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/audit-logs", "//guilds/:guild_id/audit-logs", :get)).wait
368
361
  AuditLog.new(@client, data, self)
369
362
  end
370
363
  end
371
364
 
372
365
  #
373
366
  # Fetch channels of the guild.
374
- # @macro async
375
- # @macro http
367
+ # @async
376
368
  #
377
369
  # @return [Async::Task<Array<Discorb::Channel>>] A list of channels in the guild.
378
370
  #
379
371
  def fetch_channels
380
372
  Async do
381
- _resp, data = @client.http.get("/guilds/#{@id}/channels").wait
373
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :get)).wait
382
374
  data.map { |c| Channel.make_channel(@client, c) }
383
375
  end
384
376
  end
385
377
 
386
378
  #
387
379
  # Create a new text channel.
388
- # @macro async
389
- # @macro http
380
+ # @async
390
381
  #
391
382
  # @param [String] name The name of the channel.
392
383
  # @param [String] topic The topic of the channel.
@@ -422,9 +413,7 @@ module Discorb
422
413
  end
423
414
  end
424
415
  payload[:parent_id] = parent.id if parent
425
- _resp, data = @client.http.post(
426
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
427
- ).wait
416
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
428
417
  payload[:parent_id] = parent&.id
429
418
  Channel.make_channel(@client, data)
430
419
  end
@@ -432,8 +421,7 @@ module Discorb
432
421
 
433
422
  #
434
423
  # Create a new voice channel.
435
- # @macro async
436
- # @macro http
424
+ # @async
437
425
  #
438
426
  # @param [String] name The name of the channel.
439
427
  # @param [Integer] bitrate The bitrate of the channel.
@@ -465,17 +453,14 @@ module Discorb
465
453
  end
466
454
  end
467
455
  payload[:parent_id] = parent.id if parent
468
- _resp, data = @client.http.post(
469
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
470
- ).wait
456
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
471
457
  payload[:parent_id] = parent&.id
472
458
  Channel.make_channel(@client, data)
473
459
  end
474
460
  end
475
461
 
476
462
  # Create a new category channel.
477
- # @macro async
478
- # @macro http
463
+ # @async
479
464
  #
480
465
  # @param [String] name The name of the channel.
481
466
  # @param [Integer] position The position of the channel.
@@ -501,9 +486,7 @@ module Discorb
501
486
  end
502
487
  end
503
488
  payload[:parent_id] = parent&.id
504
- _resp, data = @client.http.post(
505
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
506
- ).wait
489
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
507
490
  Channel.make_channel(@client, data)
508
491
  end
509
492
  end
@@ -512,8 +495,7 @@ module Discorb
512
495
 
513
496
  #
514
497
  # Create a new stage channel.
515
- # @macro async
516
- # @macro http
498
+ # @async
517
499
  #
518
500
  # @param [String] name The name of the channel.
519
501
  # @param [Integer] bitrate The bitrate of the channel.
@@ -541,17 +523,14 @@ module Discorb
541
523
  end
542
524
  end
543
525
  payload[:parent_id] = parent&.id
544
- _resp, data = @client.http.post(
545
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
546
- ).wait
526
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
547
527
  Channel.make_channel(@client, data)
548
528
  end
549
529
  end
550
530
 
551
531
  #
552
532
  # Create a new news channel.
553
- # @macro async
554
- # @macro http
533
+ # @async
555
534
  #
556
535
  # @param [String] name The name of the channel.
557
536
  # @param [String] topic The topic of the channel.
@@ -587,31 +566,27 @@ module Discorb
587
566
  end
588
567
  payload[:nsfw] = nsfw unless nsfw.nil?
589
568
  payload[:parent_id] = parent&.id
590
- _resp, data = @client.http.post(
591
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
592
- ).wait
569
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
593
570
  Channel.make_channel(@client, data)
594
571
  end
595
572
  end
596
573
 
597
574
  #
598
575
  # Fetch a list of active threads in the guild.
599
- # @macro async
600
- # @macro http
576
+ # @async
601
577
  #
602
578
  # @return [Async::Task<Array<Discorb::ThreadChannel>>] The list of threads.
603
579
  #
604
580
  def fetch_active_threads
605
581
  Async do
606
- _resp, data = @client.http.get("/guilds/#{@id}/threads/active").wait
582
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/threads/active", "//guilds/:guild_id/threads/active", :get)).wait
607
583
  data[:threads].map { |t| Channel.make_thread(@client, t) }
608
584
  end
609
585
  end
610
586
 
611
587
  #
612
588
  # Fetch a member in the guild.
613
- # @macro async
614
- # @macro http
589
+ # @async
615
590
  #
616
591
  # @param [#to_s] id The ID of the member to fetch.
617
592
  #
@@ -620,7 +595,7 @@ module Discorb
620
595
  #
621
596
  def fetch_member(id)
622
597
  Async do
623
- _resp, data = @client.http.get("/guilds/#{@id}/members/#{id}").wait
598
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/members/#{id}", "//guilds/:guild_id/members/:user_id", :get)).wait
624
599
  rescue Discorb::NotFoundError
625
600
  nil
626
601
  else
@@ -629,8 +604,7 @@ module Discorb
629
604
  end
630
605
 
631
606
  # Fetch members in the guild.
632
- # @macro async
633
- # @macro http
607
+ # @async
634
608
  # @macro members_intent
635
609
  #
636
610
  # @param [Integer] limit The maximum number of members to fetch, 0 for all.
@@ -641,14 +615,14 @@ module Discorb
641
615
  def fetch_members(limit: 0, after: nil)
642
616
  Async do
643
617
  unless limit == 0
644
- _resp, data = @client.http.get("/guilds/#{@id}/members?#{URI.encode_www_form({ after: after, limit: limit })}").wait
618
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/members?#{URI.encode_www_form({ after: after, limit: limit })}", "//guilds/:guild_id/members", :get)).wait
645
619
  next data[:members].map { |m| Member.new(@client, @id, m[:user], m) }
646
620
  end
647
621
  ret = []
648
622
  after = 0
649
623
  loop do
650
624
  params = { after: after, limit: 100 }
651
- _resp, data = @client.http.get("/guilds/#{@id}/members?#{URI.encode_www_form(params)}").wait
625
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/members?#{URI.encode_www_form(params)}", "//guilds/:guild_id/members", :get)).wait
652
626
  ret += data.map { |m| Member.new(@client, @id, m[:user], m) }
653
627
  after = data.last[:user][:id]
654
628
  if data.length != 1000
@@ -663,8 +637,7 @@ module Discorb
663
637
 
664
638
  #
665
639
  # Search for members by name in the guild.
666
- # @macro async
667
- # @macro http
640
+ # @async
668
641
  #
669
642
  # @param [String] name The name of the member to search for.
670
643
  # @param [Integer] limit The maximum number of members to return.
@@ -673,15 +646,14 @@ module Discorb
673
646
  #
674
647
  def fetch_members_named(name, limit: 1)
675
648
  Async do
676
- _resp, data = @client.http.get("/guilds/#{@id}/members/search?#{URI.encode_www_form({ query: name, limit: limit })}").wait
649
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/members/search?#{URI.encode_www_form({ query: name, limit: limit })}", "//guilds/:guild_id/members/search", :get)).wait
677
650
  data.map { |d| Member.new(@client, @id, d[:user], d) }
678
651
  end
679
652
  end
680
653
 
681
654
  #
682
655
  # Almost the same as {#fetch_members_named}, but returns a single member.
683
- # @macro async
684
- # @macro http
656
+ # @async
685
657
  #
686
658
  # @return [Async::Task<Discorb::Member>] The member.
687
659
  # @return [Async::Task<nil>] If the member is not found.
@@ -694,13 +666,16 @@ module Discorb
694
666
 
695
667
  #
696
668
  # Change nickname of client member.
669
+ # @async
697
670
  #
698
671
  # @param [String] nickname The nickname to set.
699
672
  # @param [String] reason The reason for changing the nickname.
700
673
  #
674
+ # @return [Async::Task<void>] The task.
675
+ #
701
676
  def edit_nickname(nickname, reason: nil)
702
677
  Async do
703
- @client.http.patch("/guilds/#{@id}/members/@me/nick", { nick: nickname }, audit_log_reason: reason).wait
678
+ @client.http.request(Route.new("/guilds/#{@id}/members/@me/nick", "//guilds/:guild_id/members/@me/nick", :patch), { nick: nickname }, audit_log_reason: reason).wait
704
679
  end
705
680
  end
706
681
 
@@ -710,36 +685,35 @@ module Discorb
710
685
 
711
686
  #
712
687
  # Kick a member from the guild.
713
- # @macro async
714
- # @macro http
688
+ # @async
715
689
  #
716
690
  # @param [Discorb::Member] member The member to kick.
717
691
  # @param [String] reason The reason for kicking the member.
718
692
  #
693
+ # @return [Async::Task<void>] The task.
694
+ #
719
695
  def kick_member(member, reason: nil)
720
696
  Async do
721
- @client.http.delete("/guilds/#{@id}/members/#{member.id}", audit_log_reason: reason).wait
697
+ @client.http.request(Route.new("/guilds/#{@id}/members/#{member.id}", "//guilds/:guild_id/members/:user_id", :delete), audit_log_reason: reason).wait
722
698
  end
723
699
  end
724
700
 
725
701
  #
726
702
  # Fetch a list of bans in the guild.
727
- # @macro async
728
- # @macro http
703
+ # @async
729
704
  #
730
705
  # @return [Async::Task<Array<Discorb::Guild::Ban>>] The list of bans.
731
706
  #
732
707
  def fetch_bans
733
708
  Async do
734
- _resp, data = @client.http.get("/guilds/#{@id}/bans").wait
709
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/bans", "//guilds/:guild_id/bans", :get)).wait
735
710
  data.map { |d| Ban.new(@client, self, d) }
736
711
  end
737
712
  end
738
713
 
739
714
  #
740
715
  # Fetch a ban in the guild.
741
- # @macro async
742
- # @macro http
716
+ # @async
743
717
  #
744
718
  # @param [Discorb::User] user The user to fetch.
745
719
  #
@@ -748,7 +722,7 @@ module Discorb
748
722
  #
749
723
  def fetch_ban(user)
750
724
  Async do
751
- _resp, data = @client.http.get("/guilds/#{@id}/bans/#{user.id}").wait
725
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/bans/#{user.id}", "//guilds/:guild_id/bans/:user_id", :get)).wait
752
726
  rescue Discorb::NotFoundError
753
727
  nil
754
728
  else
@@ -758,8 +732,7 @@ module Discorb
758
732
 
759
733
  #
760
734
  # Checks the user was banned from the guild.
761
- # @macro async
762
- # @macro http
735
+ # @async
763
736
  #
764
737
  # @param [Discorb::User] user The user to check.
765
738
  #
@@ -773,8 +746,7 @@ module Discorb
773
746
 
774
747
  #
775
748
  # Ban a member from the guild.
776
- # @macro async
777
- # @macro http
749
+ # @async
778
750
  #
779
751
  # @param [Discorb::Member] member The member to ban.
780
752
  # @param [Integer] delete_message_days The number of days to delete messages.
@@ -784,45 +756,42 @@ module Discorb
784
756
  #
785
757
  def ban_member(member, delete_message_days: 0, reason: nil)
786
758
  Async do
787
- _resp, data = @client.http.post(
788
- "/guilds/#{@id}/bans", { user: member.id, delete_message_days: delete_message_days }, audit_log_reason: reason,
789
- ).wait
759
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/bans", "//guilds/:guild_id/bans", :post), { user: member.id, delete_message_days: delete_message_days }, audit_log_reason: reason).wait
790
760
  Ban.new(@client, self, data)
791
761
  end
792
762
  end
793
763
 
794
764
  #
795
765
  # Unban a user from the guild.
796
- # @macro async
797
- # @macro http
766
+ # @async
798
767
  #
799
768
  # @param [Discorb::User] user The user to unban.
800
769
  # @param [String] reason The reason for unbanning the user.
801
770
  #
771
+ # @return [Async::Task<void>] The task.
772
+ #
802
773
  def unban_user(user, reason: nil)
803
774
  Async do
804
- @client.http.delete("/guilds/#{@id}/bans/#{user.id}", audit_log_reason: reason).wait
775
+ @client.http.request(Route.new("/guilds/#{@id}/bans/#{user.id}", "//guilds/:guild_id/bans/:user_id", :delete), audit_log_reason: reason).wait
805
776
  end
806
777
  end
807
778
 
808
779
  #
809
780
  # Fetch a list of roles in the guild.
810
- # @macro async
811
- # @macro http
781
+ # @async
812
782
  #
813
783
  # @return [Async::Task<Array<Discorb::Role>>] The list of roles.
814
784
  #
815
785
  def fetch_roles
816
786
  Async do
817
- _resp, data = @client.http.get("/guilds/#{@id}/roles").wait
787
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/roles", "//guilds/:guild_id/roles", :get)).wait
818
788
  data.map { |d| Role.new(@client, self, d) }
819
789
  end
820
790
  end
821
791
 
822
792
  #
823
793
  # Create a role in the guild.
824
- # @macro async
825
- # @macro http
794
+ # @async
826
795
  #
827
796
  # @param [String] name The name of the role.
828
797
  # @param [Discorb::Color] color The color of the role.
@@ -839,17 +808,14 @@ module Discorb
839
808
  payload[:color] = color.to_i if color
840
809
  payload[:hoist] = hoist if hoist
841
810
  payload[:mentionable] = mentionable if mentionable
842
- _resp, data = @client.http.post(
843
- "/guilds/#{@id}/roles", payload, audit_log_reason: reason,
844
- ).wait
811
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/roles", "//guilds/:guild_id/roles", :post), payload, audit_log_reason: reason).wait
845
812
  Role.new(@client, self, data)
846
813
  end
847
814
  end
848
815
 
849
816
  #
850
817
  # Fetch how many members will be pruned.
851
- # @macro async
852
- # @macro http
818
+ # @async
853
819
  #
854
820
  # @param [Integer] days The number of days to prune.
855
821
  # @param [Array<Discorb::Role>] roles The roles that include for pruning.
@@ -863,15 +829,14 @@ module Discorb
863
829
  include_roles: @id.to_s,
864
830
  }
865
831
  param[:include_roles] = roles.map(&:id).map(&:to_s).join(";") if roles.any?
866
- _resp, data = @client.http.get("/guilds/#{@id}/prune?#{URI.encode_www_form(params)}").wait
832
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/prune?#{URI.encode_www_form(params)}", "//guilds/:guild_id/prune", :get)).wait
867
833
  data[:pruned]
868
834
  end
869
835
  end
870
836
 
871
837
  #
872
838
  # Prune members from the guild.
873
- # @macro async
874
- # @macro http
839
+ # @async
875
840
  #
876
841
  # @param [Integer] days The number of days to prune.
877
842
  # @param [Array<Discorb::Role>] roles The roles that include for pruning.
@@ -881,115 +846,105 @@ module Discorb
881
846
  #
882
847
  def prune(days = 7, roles: [], reason: nil)
883
848
  Async do
884
- _resp, data = @client.http.post(
885
- "/guilds/#{@id}/prune", { days: days, roles: roles.map(&:id) }, audit_log_reason: reason,
886
- ).wait
849
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/prune", "//guilds/:guild_id/prune", :post), { days: days, roles: roles.map(&:id) }, audit_log_reason: reason).wait
887
850
  data[:pruned]
888
851
  end
889
852
  end
890
853
 
891
854
  #
892
855
  # Fetch voice regions that are available in the guild.
893
- # @macro async
894
- # @macro http
856
+ # @async
895
857
  #
896
858
  # @return [Async::Task<Array<Discorb::VoiceRegion>>] The available voice regions.
897
859
  #
898
860
  def fetch_voice_regions
899
861
  Async do
900
- _resp, data = @client.http.get("/guilds/#{@id}/voice").wait
862
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/voice", "//guilds/:guild_id/voice", :get)).wait
901
863
  data.map { |d| VoiceRegion.new(@client, d) }
902
864
  end
903
865
  end
904
866
 
905
867
  #
906
868
  # Fetch invites in the guild.
907
- # @macro async
908
- # @macro http
869
+ # @async
909
870
  #
910
871
  # @return [Async::Task<Array<Invite>>] The invites.
911
872
  #
912
873
  def fetch_invites
913
874
  Async do
914
- _resp, data = @client.http.get("/guilds/#{@id}/invites").wait
875
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/invites", "//guilds/:guild_id/invites", :get)).wait
915
876
  data.map { |d| Invite.new(@client, d) }
916
877
  end
917
878
  end
918
879
 
919
880
  #
920
881
  # Fetch integrations in the guild.
921
- # @macro async
922
- # @macro http
882
+ # @async
923
883
  #
924
884
  # @return [Async::Task<Array<Discorb::Integration>>] The integrations.
925
885
  #
926
886
  def fetch_integrations
927
887
  Async do
928
- _resp, data = @client.http.get("/guilds/#{@id}/integrations").wait
888
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/integrations", "//guilds/:guild_id/integrations", :get)).wait
929
889
  data.map { |d| Integration.new(@client, d) }
930
890
  end
931
891
  end
932
892
 
933
893
  #
934
894
  # Fetch the widget of the guild.
935
- # @macro async
936
- # @macro http
895
+ # @async
937
896
  #
938
897
  # @return [Async::Task<Discorb::Guild::Widget>] The widget.
939
898
  #
940
899
  def fetch_widget
941
900
  Async do
942
- _resp, data = @client.http.get("/guilds/#{@id}/widget").wait
901
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/widget", "//guilds/:guild_id/widget", :get)).wait
943
902
  Widget.new(@client, @id, data)
944
903
  end
945
904
  end
946
905
 
947
906
  #
948
907
  # Fetch the vanity URL of the guild.
949
- # @macro async
950
- # @macro http
908
+ # @async
951
909
  #
952
910
  # @return [Async::Task<Discorb::Guild::VanityInvite>] The vanity URL.
953
911
  #
954
912
  def fetch_vanity_invite
955
913
  Async do
956
- _resp, data = @client.http.get("/guilds/#{@id}/vanity-url").wait
914
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/vanity-url", "//guilds/:guild_id/vanity-url", :get)).wait
957
915
  VanityInvite.new(@client, self, data)
958
916
  end
959
917
  end
960
918
 
961
919
  #
962
920
  # Fetch the welcome screen of the guild.
963
- # @macro async
964
- # @macro http
921
+ # @async
965
922
  #
966
- # @return [Async::Task<Discorb::Guild::WelcomeScreen>] The welcome screen.
923
+ # @return [Async::Task<Discorb::WelcomeScreen>] The welcome screen.
967
924
  #
968
925
  def fetch_welcome_screen
969
926
  Async do
970
- _resp, data = @client.http.get("/guilds/#{@id}/welcome-screen").wait
927
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/welcome-screen", "//guilds/:guild_id/welcome-screen", :get)).wait
971
928
  WelcomeScreen.new(@client, self, data)
972
929
  end
973
930
  end
974
931
 
975
932
  #
976
933
  # Fetch stickers in the guild.
977
- # @macro async
978
- # @macro http
934
+ # @async
979
935
  #
980
936
  # @return [Async::Task<Array<Discorb::Sticker::GuildSticker>>] The stickers.
981
937
  #
982
938
  def fetch_stickers
983
939
  Async do
984
- _resp, data = @client.http.get("/guilds/#{@id}/stickers").wait
940
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/stickers", "//guilds/:guild_id/stickers", :get)).wait
985
941
  data.map { |d| Sticker::GuildSticker.new(@client, d) }
986
942
  end
987
943
  end
988
944
 
989
945
  #
990
946
  # Fetch the sticker by ID.
991
- # @macro async
992
- # @macro http
947
+ # @async
993
948
  #
994
949
  # @param [#to_s] id The ID of the sticker.
995
950
  #
@@ -998,7 +953,7 @@ module Discorb
998
953
  #
999
954
  def fetch_sticker(id)
1000
955
  Async do
1001
- _resp, data = @client.http.get("/guilds/#{@id}/stickers/#{id}").wait
956
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/stickers/#{id}", "//guilds/:guild_id/stickers/:sticker_id", :get)).wait
1002
957
  rescue Discorb::NotFoundError
1003
958
  nil
1004
959
  else
@@ -1008,14 +963,13 @@ module Discorb
1008
963
 
1009
964
  #
1010
965
  # Fetch templates in the guild.
1011
- # @macro async
1012
- # @macro http
966
+ # @async
1013
967
  #
1014
968
  # @return [Async::Task<Discorb::GuildTemplate>] The templates.
1015
969
  #
1016
970
  def fetch_templates
1017
971
  Async do
1018
- _resp, data = @client.http.get("/guilds/#{@id}/templates").wait
972
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/templates", "//guilds/:guild_id/templates", :get)).wait
1019
973
  data.map { |d| GuildTemplate.new(@client, d) }
1020
974
  end
1021
975
  end
@@ -1043,9 +997,7 @@ module Discorb
1043
997
  #
1044
998
  def create_template(name, description = nil, reason: nil)
1045
999
  Async do
1046
- _resp, data = @client.http.post(
1047
- "/guilds/#{@id}/templates", { name: name, description: description }, audit_log_reason: reason,
1048
- ).wait
1000
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/templates", "//guilds/:guild_id/templates", :post), { name: name, description: description }, audit_log_reason: reason).wait
1049
1001
  GuildTemplate.new(@client, data)
1050
1002
  end
1051
1003
  end
@@ -1111,20 +1063,21 @@ module Discorb
1111
1063
 
1112
1064
  #
1113
1065
  # Edit the widget.
1114
- # @macro async
1115
- # @macro http
1066
+ # @async
1116
1067
  # @macro edit
1117
1068
  #
1118
1069
  # @param [Boolean] enabled Whether the widget is enabled.
1119
1070
  # @param [Discorb::GuildChannel] channel The channel.
1120
1071
  # @param [String] reason The reason for editing the widget.
1121
1072
  #
1073
+ # @return [Async::Task<void>] The task.
1074
+ #
1122
1075
  def edit(enabled: nil, channel: nil, reason: nil)
1123
1076
  Async do
1124
1077
  payload = {}
1125
1078
  payload[:enabled] = enabled unless enabled.nil?
1126
1079
  payload[:channel_id] = channel.id if channel_id
1127
- @client.http.patch("/guilds/#{@guild_id}/widget", payload, audit_log_reason: reason).wait
1080
+ @client.http.request(Route.new("/guilds/#{@guild_id}/widget", "//guilds/:guild_id/widget", :patch), payload, audit_log_reason: reason).wait
1128
1081
  end
1129
1082
  end
1130
1083
 
@@ -1366,8 +1319,7 @@ module Discorb
1366
1319
 
1367
1320
  #
1368
1321
  # Edits the welcome screen.
1369
- # @macro async
1370
- # @macro http
1322
+ # @async
1371
1323
  # @macro edit
1372
1324
  #
1373
1325
  # @param [Boolean] enabled Whether the welcome screen is enabled.
@@ -1375,13 +1327,15 @@ module Discorb
1375
1327
  # @param [String] description The description of the welcome screen.
1376
1328
  # @param [String] reason The reason for editing the welcome screen.
1377
1329
  #
1378
- def edit(enabled: :unset, channels: :unset, description: :unset, reason: nil)
1330
+ # @return [Async::Task<void>] The task.
1331
+ #
1332
+ def edit(enabled: Discorb::Unset, channels: Discorb::Unset, description: Discorb::Unset, reason: nil)
1379
1333
  Async do
1380
1334
  payload = {}
1381
- payload[:enabled] = enabled unless enabled == :unset
1382
- payload[:welcome_channels] = channels.map(&:to_hash) unless channels == :unset
1383
- payload[:description] = description unless description == :unset
1384
- @client.http.patch("/guilds/#{@guild.id}/welcome-screen", payload, audit_log_reason: reason).wait
1335
+ payload[:enabled] = enabled unless enabled == Discorb::Unset
1336
+ payload[:welcome_channels] = channels.map(&:to_hash) unless channels == Discorb::Unset
1337
+ payload[:description] = description unless description == Discorb::Unset
1338
+ @client.http.request(Route.new("/guilds/#{@guild.id}/welcome-screen", "//guilds/:guild_id/welcome-screen", :patch), payload, audit_log_reason: reason).wait
1385
1339
  end
1386
1340
  end
1387
1341
  end