discorb 0.13.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/build_version.yml +1 -1
  4. data/.github/workflows/codeql-analysis.yml +70 -0
  5. data/.github/workflows/lint-push.yml +20 -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 +34 -0
  10. data/Gemfile +7 -3
  11. data/README.md +1 -1
  12. data/Rakefile +22 -22
  13. data/discorb.gemspec +13 -1
  14. data/docs/faq.md +8 -8
  15. data/examples/commands/bookmarker.rb +2 -1
  16. data/examples/commands/hello.rb +1 -0
  17. data/examples/commands/inspect.rb +3 -2
  18. data/examples/components/authorization_button.rb +2 -1
  19. data/examples/components/select_menu.rb +2 -1
  20. data/examples/extension/main.rb +1 -0
  21. data/examples/extension/message_expander.rb +1 -0
  22. data/examples/simple/eval.rb +3 -2
  23. data/examples/simple/ping_pong.rb +1 -0
  24. data/examples/simple/rolepanel.rb +1 -0
  25. data/examples/simple/wait_for_message.rb +4 -3
  26. data/exe/discorb +8 -7
  27. data/lib/discorb/allowed_mentions.rb +64 -0
  28. data/lib/discorb/app_command/command.rb +274 -0
  29. data/lib/discorb/app_command/handler.rb +168 -0
  30. data/lib/discorb/app_command.rb +2 -404
  31. data/lib/discorb/asset.rb +3 -1
  32. data/lib/discorb/{file.rb → attachment.rb} +42 -35
  33. data/lib/discorb/audit_logs.rb +3 -3
  34. data/lib/discorb/channel.rb +65 -61
  35. data/lib/discorb/client.rb +36 -33
  36. data/lib/discorb/common.rb +29 -22
  37. data/lib/discorb/components/button.rb +106 -0
  38. data/lib/discorb/components/select_menu.rb +157 -0
  39. data/lib/discorb/components/text_input.rb +96 -0
  40. data/lib/discorb/components.rb +11 -276
  41. data/lib/discorb/dictionary.rb +13 -2
  42. data/lib/discorb/embed.rb +40 -33
  43. data/lib/discorb/emoji.rb +21 -5
  44. data/lib/discorb/emoji_table.rb +1 -1
  45. data/lib/discorb/error.rb +4 -6
  46. data/lib/discorb/event.rb +13 -11
  47. data/lib/discorb/exe/about.rb +1 -0
  48. data/lib/discorb/exe/irb.rb +4 -3
  49. data/lib/discorb/exe/new.rb +6 -7
  50. data/lib/discorb/exe/run.rb +2 -1
  51. data/lib/discorb/exe/setup.rb +8 -5
  52. data/lib/discorb/exe/show.rb +1 -0
  53. data/lib/discorb/extend.rb +19 -14
  54. data/lib/discorb/extension.rb +5 -1
  55. data/lib/discorb/gateway.rb +82 -29
  56. data/lib/discorb/guild.rb +58 -80
  57. data/lib/discorb/guild_template.rb +5 -5
  58. data/lib/discorb/http.rb +52 -170
  59. data/lib/discorb/integration.rb +32 -3
  60. data/lib/discorb/intents.rb +9 -4
  61. data/lib/discorb/interaction/autocomplete.rb +5 -4
  62. data/lib/discorb/interaction/command.rb +34 -9
  63. data/lib/discorb/interaction/components.rb +5 -2
  64. data/lib/discorb/interaction/modal.rb +33 -0
  65. data/lib/discorb/interaction/response.rb +41 -12
  66. data/lib/discorb/interaction/root.rb +1 -0
  67. data/lib/discorb/interaction.rb +2 -1
  68. data/lib/discorb/invite.rb +1 -1
  69. data/lib/discorb/log.rb +4 -3
  70. data/lib/discorb/member.rb +4 -6
  71. data/lib/discorb/message.rb +38 -241
  72. data/lib/discorb/message_meta.rb +157 -0
  73. data/lib/discorb/modules.rb +47 -23
  74. data/lib/discorb/permission.rb +2 -2
  75. data/lib/discorb/presence.rb +6 -3
  76. data/lib/discorb/rate_limit.rb +15 -21
  77. data/lib/discorb/role.rb +3 -3
  78. data/lib/discorb/sticker.rb +2 -2
  79. data/lib/discorb/user.rb +3 -3
  80. data/lib/discorb/utils/colored_puts.rb +1 -0
  81. data/lib/discorb/voice_state.rb +7 -2
  82. data/lib/discorb/webhook.rb +9 -6
  83. data/lib/discorb.rb +2 -1
  84. data/sig/discorb.rbs +5836 -6714
  85. data/template-replace/scripts/arrow.rb +1 -0
  86. data/template-replace/scripts/favicon.rb +1 -0
  87. data/template-replace/scripts/index.rb +2 -1
  88. data/template-replace/scripts/locale_ja.rb +5 -4
  89. data/template-replace/scripts/sidebar.rb +1 -0
  90. data/template-replace/scripts/version.rb +7 -10
  91. data/template-replace/scripts/yard_replace.rb +5 -4
  92. metadata +30 -5
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