discorb 0.13.1 → 0.14.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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/build_version.yml +3 -3
  4. data/.github/workflows/codeql-analysis.yml +70 -0
  5. data/.github/workflows/lint-push.yml +18 -0
  6. data/.github/workflows/lint.yml +16 -0
  7. data/.rubocop.yml +70 -0
  8. data/CODE_OF_CONDUCT.md +128 -0
  9. data/Changelog.md +33 -0
  10. data/Gemfile +7 -3
  11. data/README.md +1 -1
  12. data/Rakefile +35 -35
  13. data/discorb.gemspec +13 -1
  14. data/examples/commands/bookmarker.rb +2 -1
  15. data/examples/commands/hello.rb +1 -0
  16. data/examples/commands/inspect.rb +3 -2
  17. data/examples/components/authorization_button.rb +2 -1
  18. data/examples/components/select_menu.rb +2 -1
  19. data/examples/extension/main.rb +1 -0
  20. data/examples/extension/message_expander.rb +1 -0
  21. data/examples/simple/eval.rb +3 -2
  22. data/examples/simple/ping_pong.rb +1 -0
  23. data/examples/simple/rolepanel.rb +1 -0
  24. data/examples/simple/wait_for_message.rb +4 -3
  25. data/exe/discorb +8 -7
  26. data/lib/discorb/allowed_mentions.rb +64 -0
  27. data/lib/discorb/app_command/command.rb +274 -0
  28. data/lib/discorb/app_command/handler.rb +168 -0
  29. data/lib/discorb/app_command.rb +2 -404
  30. data/lib/discorb/asset.rb +3 -1
  31. data/lib/discorb/audit_logs.rb +3 -3
  32. data/lib/discorb/channel.rb +89 -53
  33. data/lib/discorb/client.rb +36 -33
  34. data/lib/discorb/common.rb +28 -21
  35. data/lib/discorb/components/button.rb +106 -0
  36. data/lib/discorb/components/select_menu.rb +157 -0
  37. data/lib/discorb/components/text_input.rb +96 -0
  38. data/lib/discorb/components.rb +11 -276
  39. data/lib/discorb/dictionary.rb +13 -2
  40. data/lib/discorb/embed.rb +2 -2
  41. data/lib/discorb/emoji.rb +21 -5
  42. data/lib/discorb/emoji_table.rb +1 -1
  43. data/lib/discorb/error.rb +4 -6
  44. data/lib/discorb/event.rb +13 -11
  45. data/lib/discorb/exe/about.rb +1 -0
  46. data/lib/discorb/exe/irb.rb +4 -3
  47. data/lib/discorb/exe/new.rb +6 -7
  48. data/lib/discorb/exe/run.rb +2 -1
  49. data/lib/discorb/exe/setup.rb +8 -5
  50. data/lib/discorb/exe/show.rb +1 -0
  51. data/lib/discorb/extend.rb +19 -14
  52. data/lib/discorb/extension.rb +5 -1
  53. data/lib/discorb/gateway.rb +75 -27
  54. data/lib/discorb/guild.rb +58 -80
  55. data/lib/discorb/guild_template.rb +5 -5
  56. data/lib/discorb/http.rb +34 -169
  57. data/lib/discorb/integration.rb +32 -3
  58. data/lib/discorb/intents.rb +1 -1
  59. data/lib/discorb/interaction/autocomplete.rb +5 -4
  60. data/lib/discorb/interaction/command.rb +34 -9
  61. data/lib/discorb/interaction/components.rb +5 -2
  62. data/lib/discorb/interaction/modal.rb +33 -0
  63. data/lib/discorb/interaction/response.rb +41 -12
  64. data/lib/discorb/interaction/root.rb +1 -0
  65. data/lib/discorb/interaction.rb +2 -1
  66. data/lib/discorb/invite.rb +1 -1
  67. data/lib/discorb/log.rb +4 -3
  68. data/lib/discorb/member.rb +4 -6
  69. data/lib/discorb/message.rb +31 -282
  70. data/lib/discorb/message_meta.rb +205 -0
  71. data/lib/discorb/modules.rb +11 -11
  72. data/lib/discorb/permission.rb +2 -2
  73. data/lib/discorb/presence.rb +6 -3
  74. data/lib/discorb/rate_limit.rb +15 -21
  75. data/lib/discorb/role.rb +3 -3
  76. data/lib/discorb/sticker.rb +2 -2
  77. data/lib/discorb/user.rb +3 -3
  78. data/lib/discorb/utils/colored_puts.rb +1 -0
  79. data/lib/discorb/voice_state.rb +7 -2
  80. data/lib/discorb/webhook.rb +8 -5
  81. data/lib/discorb.rb +1 -0
  82. data/template-replace/scripts/arrow.rb +1 -0
  83. data/template-replace/scripts/favicon.rb +1 -0
  84. data/template-replace/scripts/index.rb +2 -1
  85. data/template-replace/scripts/locale_ja.rb +5 -4
  86. data/template-replace/scripts/sidebar.rb +1 -0
  87. data/template-replace/scripts/version.rb +7 -10
  88. data/template-replace/scripts/yard_replace.rb +5 -4
  89. metadata +29 -4
data/lib/discorb/guild.rb CHANGED
@@ -168,7 +168,7 @@ module Discorb
168
168
  #
169
169
  def leave!
170
170
  Async do
171
- @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
172
172
  @client.guilds.delete(@id)
173
173
  end
174
174
  end
@@ -184,7 +184,7 @@ 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
@@ -200,7 +200,7 @@ module Discorb
200
200
  #
201
201
  def fetch_scheduled_event(id)
202
202
  Async do
203
- _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
204
204
  rescue Discorb::NotFoundError
205
205
  return nil
206
206
  else
@@ -274,7 +274,7 @@ 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
@@ -288,7 +288,7 @@ module Discorb
288
288
  #
289
289
  def fetch_emoji_list
290
290
  Async do
291
- _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
292
292
  @emojis = Dictionary.new
293
293
  ids = @emojis.map(&:id).map(&:to_s)
294
294
  data.map do |e|
@@ -312,7 +312,7 @@ module Discorb
312
312
  # @return [Async::Task<Discorb::CustomEmoji>] The emoji with the given id.
313
313
  #
314
314
  def fetch_emoji(id)
315
- _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
316
316
  @emojis[e[:id]] = CustomEmoji.new(@client, self, data)
317
317
  end
318
318
 
@@ -327,14 +327,12 @@ module Discorb
327
327
  # @return [Async::Task<Discorb::CustomEmoji>] The created emoji.
328
328
  #
329
329
  def create_emoji(name, image, roles: [])
330
- _resp, data = @client.http.post(
331
- "/guilds/#{@id}/emojis",
332
- {
333
- name: name,
334
- image: image.to_s,
335
- roles: roles.map { |r| Discorb::Utils.try(r, :id) },
336
- }
337
- ).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
338
336
  @emojis[data[:id]] = CustomEmoji.new(@client, self, data)
339
337
  end
340
338
 
@@ -346,7 +344,7 @@ module Discorb
346
344
  #
347
345
  def fetch_webhooks
348
346
  Async do
349
- _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
350
348
  data.map { |webhook| Webhook.new([@client, webhook]) }
351
349
  end
352
350
  end
@@ -359,7 +357,7 @@ module Discorb
359
357
  #
360
358
  def fetch_audit_log
361
359
  Async do
362
- _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
363
361
  AuditLog.new(@client, data, self)
364
362
  end
365
363
  end
@@ -372,7 +370,7 @@ module Discorb
372
370
  #
373
371
  def fetch_channels
374
372
  Async do
375
- _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
376
374
  data.map { |c| Channel.make_channel(@client, c) }
377
375
  end
378
376
  end
@@ -415,9 +413,7 @@ module Discorb
415
413
  end
416
414
  end
417
415
  payload[:parent_id] = parent.id if parent
418
- _resp, data = @client.http.post(
419
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
420
- ).wait
416
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
421
417
  payload[:parent_id] = parent&.id
422
418
  Channel.make_channel(@client, data)
423
419
  end
@@ -457,9 +453,7 @@ module Discorb
457
453
  end
458
454
  end
459
455
  payload[:parent_id] = parent.id if parent
460
- _resp, data = @client.http.post(
461
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
462
- ).wait
456
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
463
457
  payload[:parent_id] = parent&.id
464
458
  Channel.make_channel(@client, data)
465
459
  end
@@ -492,9 +486,7 @@ module Discorb
492
486
  end
493
487
  end
494
488
  payload[:parent_id] = parent&.id
495
- _resp, data = @client.http.post(
496
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
497
- ).wait
489
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
498
490
  Channel.make_channel(@client, data)
499
491
  end
500
492
  end
@@ -531,9 +523,7 @@ module Discorb
531
523
  end
532
524
  end
533
525
  payload[:parent_id] = parent&.id
534
- _resp, data = @client.http.post(
535
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
536
- ).wait
526
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
537
527
  Channel.make_channel(@client, data)
538
528
  end
539
529
  end
@@ -576,9 +566,7 @@ module Discorb
576
566
  end
577
567
  payload[:nsfw] = nsfw unless nsfw.nil?
578
568
  payload[:parent_id] = parent&.id
579
- _resp, data = @client.http.post(
580
- "/guilds/#{@id}/channels", payload, audit_log_reason: reason,
581
- ).wait
569
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/channels", "//guilds/:guild_id/channels", :post), payload, audit_log_reason: reason).wait
582
570
  Channel.make_channel(@client, data)
583
571
  end
584
572
  end
@@ -591,7 +579,7 @@ module Discorb
591
579
  #
592
580
  def fetch_active_threads
593
581
  Async do
594
- _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
595
583
  data[:threads].map { |t| Channel.make_thread(@client, t) }
596
584
  end
597
585
  end
@@ -607,7 +595,7 @@ module Discorb
607
595
  #
608
596
  def fetch_member(id)
609
597
  Async do
610
- _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
611
599
  rescue Discorb::NotFoundError
612
600
  nil
613
601
  else
@@ -626,20 +614,18 @@ module Discorb
626
614
  #
627
615
  def fetch_members(limit: 0, after: nil)
628
616
  Async do
629
- unless limit == 0
630
- _resp, data = @client.http.get("/guilds/#{@id}/members?#{URI.encode_www_form({ after: after, limit: limit })}").wait
617
+ unless limit.zero?
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
631
619
  next data[:members].map { |m| Member.new(@client, @id, m[:user], m) }
632
620
  end
633
621
  ret = []
634
622
  after = 0
635
623
  loop do
636
624
  params = { after: after, limit: 100 }
637
- _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
638
626
  ret += data.map { |m| Member.new(@client, @id, m[:user], m) }
639
627
  after = data.last[:user][:id]
640
- if data.length != 1000
641
- break
642
- end
628
+ break if data.length != 1000
643
629
  end
644
630
  ret
645
631
  end
@@ -658,7 +644,7 @@ module Discorb
658
644
  #
659
645
  def fetch_members_named(name, limit: 1)
660
646
  Async do
661
- _resp, data = @client.http.get("/guilds/#{@id}/members/search?#{URI.encode_www_form({ query: name, limit: limit })}").wait
647
+ _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
662
648
  data.map { |d| Member.new(@client, @id, d[:user], d) }
663
649
  end
664
650
  end
@@ -687,7 +673,7 @@ module Discorb
687
673
  #
688
674
  def edit_nickname(nickname, reason: nil)
689
675
  Async do
690
- @client.http.patch("/guilds/#{@id}/members/@me/nick", { nick: nickname }, audit_log_reason: reason).wait
676
+ @client.http.request(Route.new("/guilds/#{@id}/members/@me/nick", "//guilds/:guild_id/members/@me/nick", :patch), { nick: nickname }, audit_log_reason: reason).wait
691
677
  end
692
678
  end
693
679
 
@@ -706,7 +692,7 @@ module Discorb
706
692
  #
707
693
  def kick_member(member, reason: nil)
708
694
  Async do
709
- @client.http.delete("/guilds/#{@id}/members/#{member.id}", audit_log_reason: reason).wait
695
+ @client.http.request(Route.new("/guilds/#{@id}/members/#{member.id}", "//guilds/:guild_id/members/:user_id", :delete), audit_log_reason: reason).wait
710
696
  end
711
697
  end
712
698
 
@@ -718,7 +704,7 @@ module Discorb
718
704
  #
719
705
  def fetch_bans
720
706
  Async do
721
- _resp, data = @client.http.get("/guilds/#{@id}/bans").wait
707
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/bans", "//guilds/:guild_id/bans", :get)).wait
722
708
  data.map { |d| Ban.new(@client, self, d) }
723
709
  end
724
710
  end
@@ -734,7 +720,7 @@ module Discorb
734
720
  #
735
721
  def fetch_ban(user)
736
722
  Async do
737
- _resp, data = @client.http.get("/guilds/#{@id}/bans/#{user.id}").wait
723
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/bans/#{user.id}", "//guilds/:guild_id/bans/:user_id", :get)).wait
738
724
  rescue Discorb::NotFoundError
739
725
  nil
740
726
  else
@@ -768,9 +754,7 @@ module Discorb
768
754
  #
769
755
  def ban_member(member, delete_message_days: 0, reason: nil)
770
756
  Async do
771
- _resp, data = @client.http.post(
772
- "/guilds/#{@id}/bans", { user: member.id, delete_message_days: delete_message_days }, audit_log_reason: reason,
773
- ).wait
757
+ _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
774
758
  Ban.new(@client, self, data)
775
759
  end
776
760
  end
@@ -786,7 +770,7 @@ module Discorb
786
770
  #
787
771
  def unban_user(user, reason: nil)
788
772
  Async do
789
- @client.http.delete("/guilds/#{@id}/bans/#{user.id}", audit_log_reason: reason).wait
773
+ @client.http.request(Route.new("/guilds/#{@id}/bans/#{user.id}", "//guilds/:guild_id/bans/:user_id", :delete), audit_log_reason: reason).wait
790
774
  end
791
775
  end
792
776
 
@@ -798,7 +782,7 @@ module Discorb
798
782
  #
799
783
  def fetch_roles
800
784
  Async do
801
- _resp, data = @client.http.get("/guilds/#{@id}/roles").wait
785
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/roles", "//guilds/:guild_id/roles", :get)).wait
802
786
  data.map { |d| Role.new(@client, self, d) }
803
787
  end
804
788
  end
@@ -822,9 +806,7 @@ module Discorb
822
806
  payload[:color] = color.to_i if color
823
807
  payload[:hoist] = hoist if hoist
824
808
  payload[:mentionable] = mentionable if mentionable
825
- _resp, data = @client.http.post(
826
- "/guilds/#{@id}/roles", payload, audit_log_reason: reason,
827
- ).wait
809
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/roles", "//guilds/:guild_id/roles", :post), payload, audit_log_reason: reason).wait
828
810
  Role.new(@client, self, data)
829
811
  end
830
812
  end
@@ -845,7 +827,7 @@ module Discorb
845
827
  include_roles: @id.to_s,
846
828
  }
847
829
  param[:include_roles] = roles.map(&:id).map(&:to_s).join(";") if roles.any?
848
- _resp, data = @client.http.get("/guilds/#{@id}/prune?#{URI.encode_www_form(params)}").wait
830
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/prune?#{URI.encode_www_form(params)}", "//guilds/:guild_id/prune", :get)).wait
849
831
  data[:pruned]
850
832
  end
851
833
  end
@@ -862,9 +844,7 @@ module Discorb
862
844
  #
863
845
  def prune(days = 7, roles: [], reason: nil)
864
846
  Async do
865
- _resp, data = @client.http.post(
866
- "/guilds/#{@id}/prune", { days: days, roles: roles.map(&:id) }, audit_log_reason: reason,
867
- ).wait
847
+ _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
868
848
  data[:pruned]
869
849
  end
870
850
  end
@@ -877,7 +857,7 @@ module Discorb
877
857
  #
878
858
  def fetch_voice_regions
879
859
  Async do
880
- _resp, data = @client.http.get("/guilds/#{@id}/voice").wait
860
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/voice", "//guilds/:guild_id/voice", :get)).wait
881
861
  data.map { |d| VoiceRegion.new(@client, d) }
882
862
  end
883
863
  end
@@ -890,7 +870,7 @@ module Discorb
890
870
  #
891
871
  def fetch_invites
892
872
  Async do
893
- _resp, data = @client.http.get("/guilds/#{@id}/invites").wait
873
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/invites", "//guilds/:guild_id/invites", :get)).wait
894
874
  data.map { |d| Invite.new(@client, d) }
895
875
  end
896
876
  end
@@ -903,7 +883,7 @@ module Discorb
903
883
  #
904
884
  def fetch_integrations
905
885
  Async do
906
- _resp, data = @client.http.get("/guilds/#{@id}/integrations").wait
886
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/integrations", "//guilds/:guild_id/integrations", :get)).wait
907
887
  data.map { |d| Integration.new(@client, d) }
908
888
  end
909
889
  end
@@ -916,7 +896,7 @@ module Discorb
916
896
  #
917
897
  def fetch_widget
918
898
  Async do
919
- _resp, data = @client.http.get("/guilds/#{@id}/widget").wait
899
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/widget", "//guilds/:guild_id/widget", :get)).wait
920
900
  Widget.new(@client, @id, data)
921
901
  end
922
902
  end
@@ -929,7 +909,7 @@ module Discorb
929
909
  #
930
910
  def fetch_vanity_invite
931
911
  Async do
932
- _resp, data = @client.http.get("/guilds/#{@id}/vanity-url").wait
912
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/vanity-url", "//guilds/:guild_id/vanity-url", :get)).wait
933
913
  VanityInvite.new(@client, self, data)
934
914
  end
935
915
  end
@@ -942,7 +922,7 @@ module Discorb
942
922
  #
943
923
  def fetch_welcome_screen
944
924
  Async do
945
- _resp, data = @client.http.get("/guilds/#{@id}/welcome-screen").wait
925
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/welcome-screen", "//guilds/:guild_id/welcome-screen", :get)).wait
946
926
  WelcomeScreen.new(@client, self, data)
947
927
  end
948
928
  end
@@ -955,7 +935,7 @@ module Discorb
955
935
  #
956
936
  def fetch_stickers
957
937
  Async do
958
- _resp, data = @client.http.get("/guilds/#{@id}/stickers").wait
938
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/stickers", "//guilds/:guild_id/stickers", :get)).wait
959
939
  data.map { |d| Sticker::GuildSticker.new(@client, d) }
960
940
  end
961
941
  end
@@ -971,7 +951,7 @@ module Discorb
971
951
  #
972
952
  def fetch_sticker(id)
973
953
  Async do
974
- _resp, data = @client.http.get("/guilds/#{@id}/stickers/#{id}").wait
954
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/stickers/#{id}", "//guilds/:guild_id/stickers/:sticker_id", :get)).wait
975
955
  rescue Discorb::NotFoundError
976
956
  nil
977
957
  else
@@ -987,7 +967,7 @@ module Discorb
987
967
  #
988
968
  def fetch_templates
989
969
  Async do
990
- _resp, data = @client.http.get("/guilds/#{@id}/templates").wait
970
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/templates", "//guilds/:guild_id/templates", :get)).wait
991
971
  data.map { |d| GuildTemplate.new(@client, d) }
992
972
  end
993
973
  end
@@ -1015,9 +995,7 @@ module Discorb
1015
995
  #
1016
996
  def create_template(name, description = nil, reason: nil)
1017
997
  Async do
1018
- _resp, data = @client.http.post(
1019
- "/guilds/#{@id}/templates", { name: name, description: description }, audit_log_reason: reason,
1020
- ).wait
998
+ _resp, data = @client.http.request(Route.new("/guilds/#{@id}/templates", "//guilds/:guild_id/templates", :post), { name: name, description: description }, audit_log_reason: reason).wait
1021
999
  GuildTemplate.new(@client, data)
1022
1000
  end
1023
1001
  end
@@ -1097,7 +1075,7 @@ module Discorb
1097
1075
  payload = {}
1098
1076
  payload[:enabled] = enabled unless enabled.nil?
1099
1077
  payload[:channel_id] = channel.id if channel_id
1100
- @client.http.patch("/guilds/#{@guild_id}/widget", payload, audit_log_reason: reason).wait
1078
+ @client.http.request(Route.new("/guilds/#{@guild_id}/widget", "//guilds/:guild_id/widget", :patch), payload, audit_log_reason: reason).wait
1101
1079
  end
1102
1080
  end
1103
1081
 
@@ -1119,7 +1097,7 @@ module Discorb
1119
1097
  def iframe(theme: "dark", width: 350, height: 500)
1120
1098
  [
1121
1099
  %(<iframe src="https://canary.discord.com/widget?id=#{@guild_id}&theme=#{theme}" width="#{width}" height="#{height}"),
1122
- %(allowtransparency="true" frameborder="0" sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts"></iframe>),
1100
+ %(allowtransparency="true" frameborder="0" sandbox="allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts"></iframe>)
1123
1101
  ].join
1124
1102
  end
1125
1103
  end
@@ -1172,9 +1150,9 @@ module Discorb
1172
1150
  @unavailable = false
1173
1151
  @name = data[:name]
1174
1152
  @members = Discorb::Dictionary.new
1175
- data[:members].each do |m|
1176
- Member.new(@client, @id, m[:user], m)
1177
- end if data[:members]
1153
+ data[:members]&.each do |m|
1154
+ Member.new(@client, @id, m[:user], m)
1155
+ end
1178
1156
  @splash = data[:splash] && Asset.new(self, data[:splash], path: "splashes/#{@id}")
1179
1157
  @discovery_splash = data[:discovery_splash] && Asset.new(self, data[:discovery_splash], path: "discovery-splashes/#{@id}")
1180
1158
  @owner_id = data[:owner_id]
@@ -1220,13 +1198,13 @@ module Discorb
1220
1198
  tmp_channels = data[:channels].filter { |c| !c.key?(:thread_metadata) }.map do |c|
1221
1199
  Channel.make_channel(@client, c.merge({ guild_id: @id }))
1222
1200
  end
1223
- @channels = Dictionary.new(tmp_channels.map { |c| [c.id, c] }.to_h, sort: ->(c) { c[1].position })
1224
- @voice_states = Dictionary.new(data[:voice_states].map { |v| [Snowflake.new(v[:user_id]), VoiceState.new(@client, v.merge({ guild_id: @id }))] }.to_h)
1201
+ @channels = Dictionary.new(tmp_channels.to_h { |c| [c.id, c] }, sort: ->(c) { c[1].position })
1202
+ @voice_states = Dictionary.new(data[:voice_states].to_h { |v| [Snowflake.new(v[:user_id]), VoiceState.new(@client, v.merge({ guild_id: @id }))] })
1225
1203
  @threads = data[:threads] ? data[:threads].map { |t| Channel.make_channel(@client, t) } : []
1226
- @presences = Dictionary.new(data[:presences].map { |pr| [Snowflake.new(pr[:user][:id]), Presence.new(@client, pr)] }.to_h)
1204
+ @presences = Dictionary.new(data[:presences].to_h { |pr| [Snowflake.new(pr[:user][:id]), Presence.new(@client, pr)] })
1227
1205
  @max_presences = data[:max_presences]
1228
- @stage_instances = Dictionary.new(data[:stage_instances].map { |s| [Snowflake.new(s[:id]), StageInstance.new(@client, s)] }.to_h)
1229
- @scheduled_events = Dictionary.new(data[:guild_scheduled_events].map { |s| [Snowflake.new(s[:id]), ScheduledEvent.new(@client, s)] }.to_h)
1206
+ @stage_instances = Dictionary.new(data[:stage_instances].to_h { |s| [Snowflake.new(s[:id]), StageInstance.new(@client, s)] })
1207
+ @scheduled_events = Dictionary.new(data[:guild_scheduled_events].to_h { |s| [Snowflake.new(s[:id]), ScheduledEvent.new(@client, s)] })
1230
1208
  @data.update(data)
1231
1209
  end
1232
1210
  end
@@ -1355,7 +1333,7 @@ module Discorb
1355
1333
  payload[:enabled] = enabled unless enabled == Discorb::Unset
1356
1334
  payload[:welcome_channels] = channels.map(&:to_hash) unless channels == Discorb::Unset
1357
1335
  payload[:description] = description unless description == Discorb::Unset
1358
- @client.http.patch("/guilds/#{@guild.id}/welcome-screen", payload, audit_log_reason: reason).wait
1336
+ @client.http.request(Route.new("/guilds/#{@guild.id}/welcome-screen", "//guilds/:guild_id/welcome-screen", :patch), payload, audit_log_reason: reason).wait
1359
1337
  end
1360
1338
  end
1361
1339
  end
@@ -58,7 +58,7 @@ module Discorb
58
58
  payload = {}
59
59
  payload[:name] = name if name
60
60
  payload[:description] = description if description != Discorb::Unset
61
- @client.http.patch("/guilds/#{@source_guild_id}/templates/#{@code}", payload).wait
61
+ @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}", "//guilds/:guild_id/templates/:code", :patch), payload).wait
62
62
  end
63
63
  end
64
64
 
@@ -72,7 +72,7 @@ module Discorb
72
72
  #
73
73
  def update
74
74
  Async do
75
- _resp, data = @client.http.put("/guilds/#{@source_guild_id}/templates/#{@code}").wait
75
+ _resp, data = @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}", "//guilds/:guild_id/templates/:code", :put)).wait
76
76
  _set_data(data)
77
77
  end
78
78
  end
@@ -85,7 +85,7 @@ module Discorb
85
85
  #
86
86
  def delete!
87
87
  Async do
88
- @client.http.delete("/guilds/#{@source_guild_id}/templates/#{@code}").wait
88
+ @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}", "//guilds/:guild_id/templates/:code", :delete)).wait
89
89
  end
90
90
  end
91
91
 
@@ -187,9 +187,9 @@ module Discorb
187
187
  @nsfw = data[:nsfw]
188
188
  @rate_limit_per_user = data[:rate_limit_per_user]
189
189
  @parent_id = data[:parent_id]
190
- @permission_overwrites = data[:permission_overwrites].map do |ow|
190
+ @permission_overwrites = data[:permission_overwrites].to_h do |ow|
191
191
  [Snowflake.new(ow[:id]), PermissionOverwrite.new(ow[:allow], ow[:deny])]
192
- end.to_h
192
+ end
193
193
  @type = Discorb::Channel.descendants.find { |c| c.channel_type == data[:type] }
194
194
  end
195
195
  end