discorb 0.13.0 → 0.13.4

Sign up to get free protection for your applications and to get access to all the features.
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