discorb 0.13.3 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9a82de8344e0dad10cce48b6a49bb6c520df2980518f5ead7a107d8196d7f6b
4
- data.tar.gz: 1277c6e8a2e20bd6245952dbc0001874cd7abf80c220dede886e06d9cd034643
3
+ metadata.gz: 45868a2fa9284bc0910bdad465983c490f44b721ccc49632df681e79e78fd727
4
+ data.tar.gz: 969d627479e5381da98e1775186e23f9a193244180135b8dc9396878a425ee43
5
5
  SHA512:
6
- metadata.gz: 6ed3a9bb11473db377910096ff3eaa74e4a0c1c7b73afd85975dbd6b4b541620aceb3d4e096ae4268f75590b5c52e1c62250d6e73457b9515ada6895c040a20e
7
- data.tar.gz: 8bbc17b2bee9cdf935a381bcb6f60b261f243281e9fb65fcc309852f310648d6aa4f41747252431b665355efcd4e26ea6a77be7cf7535a14a495a6a9f1372df3
6
+ metadata.gz: 2732b467bfc1ba6af2d6938b384026e5219bfce03ff646669870e311601ec7b0258a72ba1c4b6fd6c9a60d1c3186c3890842916bb2f387542cf1d2ee7fbafab3
7
+ data.tar.gz: a825f0d8497f8f62c024fa381441d9a19da54b0aa2fe71a7b87fc6ef17bc74f7e65a1681b6dc9c7abb1a2f746e6d821abaf4ae28ae6d9661226e7276dce2f551
@@ -0,0 +1,128 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity
10
+ and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ * Demonstrating empathy and kindness toward other people
21
+ * Being respectful of differing opinions, viewpoints, and experiences
22
+ * Giving and gracefully accepting constructive feedback
23
+ * Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ * Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ * The use of sexualized language or imagery, and sexual attention or
31
+ advances of any kind
32
+ * Trolling, insulting or derogatory comments, and personal or political attacks
33
+ * Public or private harassment
34
+ * Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ * Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
50
+
51
+ ## Scope
52
+
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+ Examples of representing our community include using an official e-mail address,
56
+ posting via an official social media account, or acting as an appointed
57
+ representative at an online or offline event.
58
+
59
+ ## Enforcement
60
+
61
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
+ reported to the community leaders responsible for enforcement at
63
+ Official Discord.
64
+ All complaints will be reviewed and investigated promptly and fairly.
65
+
66
+ All community leaders are obligated to respect the privacy and security of the
67
+ reporter of any incident.
68
+
69
+ ## Enforcement Guidelines
70
+
71
+ Community leaders will follow these Community Impact Guidelines in determining
72
+ the consequences for any action they deem in violation of this Code of Conduct:
73
+
74
+ ### 1. Correction
75
+
76
+ **Community Impact**: Use of inappropriate language or other behavior deemed
77
+ unprofessional or unwelcome in the community.
78
+
79
+ **Consequence**: A private, written warning from community leaders, providing
80
+ clarity around the nature of the violation and an explanation of why the
81
+ behavior was inappropriate. A public apology may be requested.
82
+
83
+ ### 2. Warning
84
+
85
+ **Community Impact**: A violation through a single incident or series
86
+ of actions.
87
+
88
+ **Consequence**: A warning with consequences for continued behavior. No
89
+ interaction with the people involved, including unsolicited interaction with
90
+ those enforcing the Code of Conduct, for a specified period of time. This
91
+ includes avoiding interactions in community spaces as well as external channels
92
+ like social media. Violating these terms may lead to a temporary or
93
+ permanent ban.
94
+
95
+ ### 3. Temporary Ban
96
+
97
+ **Community Impact**: A serious violation of community standards, including
98
+ sustained inappropriate behavior.
99
+
100
+ **Consequence**: A temporary ban from any sort of interaction or public
101
+ communication with the community for a specified period of time. No public or
102
+ private interaction with the people involved, including unsolicited interaction
103
+ with those enforcing the Code of Conduct, is allowed during this period.
104
+ Violating these terms may lead to a permanent ban.
105
+
106
+ ### 4. Permanent Ban
107
+
108
+ **Community Impact**: Demonstrating a pattern of violation of community
109
+ standards, including sustained inappropriate behavior, harassment of an
110
+ individual, or aggression toward or disparagement of classes of individuals.
111
+
112
+ **Consequence**: A permanent ban from any sort of public interaction within
113
+ the community.
114
+
115
+ ## Attribution
116
+
117
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118
+ version 2.0, available at
119
+ https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120
+
121
+ Community Impact Guidelines were inspired by [Mozilla's code of conduct
122
+ enforcement ladder](https://github.com/mozilla/diversity).
123
+
124
+ [homepage]: https://www.contributor-covenant.org
125
+
126
+ For answers to common questions about this code of conduct, see the FAQ at
127
+ https://www.contributor-covenant.org/faq. Translations are available at
128
+ https://www.contributor-covenant.org/translations.
data/Changelog.md CHANGED
@@ -6,6 +6,14 @@
6
6
 
7
7
  ## v0.13
8
8
 
9
+ ### v0.13.4
10
+
11
+ - Add: Show command on `discorb setup`
12
+ - Fix: Fix issue when logging in to file(#6, thanks `deanpcmad`)
13
+ - Fix: Fix rate limit handing
14
+ - Fix: Fix `Client#users`, it was always empty
15
+ - Fix: Fix sorting dictionary
16
+
9
17
  ### v0.13.3
10
18
 
11
19
  - Fix: Fix INTEGRATION_xxx event
@@ -129,10 +129,32 @@ module Discorb
129
129
  end
130
130
  final_guild_ids = local_commands.map(&:guild_ids).flatten.map(&:to_s).uniq
131
131
  app_info = fetch_application.wait
132
- http.put("/applications/#{app_info.id}/commands", global_commands.map(&:to_hash)).wait unless global_commands.empty?
132
+ @http.request(
133
+ Route.new(
134
+ "/applications/#{app_info.id}/commands",
135
+ "//applications/:application_id/commands",
136
+ :put
137
+ ),
138
+ global_commands.map(&:to_hash)
139
+ ).wait unless global_commands.empty?
140
+ if ENV["DISCORB_CLI_FLAG"] == "setup"
141
+ sputs "Registered commands for global:"
142
+ global_commands.each do |command|
143
+ iputs "- #{command.name}"
144
+ end
145
+ end
133
146
  final_guild_ids.each do |guild_id|
134
147
  commands = local_commands.select { |c| c.guild_ids.include?(guild_id) }
135
- http.put("/applications/#{app_info.id}/guilds/#{guild_id}/commands", commands.map(&:to_hash)).wait
148
+ @http.request(
149
+ Route.new("/applications/#{app_info.id}/guilds/#{guild_id}/commands",
150
+ "//applications/:application_id/guilds/:guild_id/commands",
151
+ :put),
152
+ commands.map(&:to_hash)
153
+ ).wait
154
+ sputs "Registered commands for #{guild_id}:"
155
+ commands.each do |command|
156
+ iputs "- #{command.name}"
157
+ end
136
158
  end unless final_guild_ids.empty?
137
159
  @log.info "Successfully setup commands"
138
160
  end
@@ -174,7 +174,7 @@ module Discorb
174
174
  #
175
175
  def delete!(reason: nil)
176
176
  Async do
177
- @client.http.delete(base_url.wait.to_s, audit_log_reason: reason).wait
177
+ @client.http.request(Route.new(base_url.wait.to_s, "//webhooks/:webhook_id/:token", :delete), audit_log_reason: reason).wait
178
178
  @deleted = true
179
179
  self
180
180
  end
@@ -201,7 +201,7 @@ module Discorb
201
201
  }
202
202
  payload[:lock_permissions] = lock_permissions
203
203
  payload[:parent_id] = parent&.id if parent != Discorb::Unset
204
- @client.http.patch("/guilds/#{@guild_id}/channels", payload, audit_log_reason: reason).wait
204
+ @client.http.request(Route.new("/guilds/#{@guild_id}/channels", "//guilds/:guild_id/channels", :patch), payload, audit_log_reason: reason).wait
205
205
  end
206
206
  end
207
207
 
@@ -292,7 +292,7 @@ module Discorb
292
292
  default_auto_archive_duration ||= archive_in
293
293
  payload[:default_auto_archive_duration] = default_auto_archive_duration if default_auto_archive_duration != Discorb::Unset
294
294
 
295
- @client.http.patch("/channels/#{@id}", payload, audit_log_reason: reason).wait
295
+ @client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
296
296
  self
297
297
  end
298
298
  end
@@ -313,7 +313,7 @@ module Discorb
313
313
  payload = {}
314
314
  payload[:name] = name
315
315
  payload[:avatar] = avatar.to_s if avatar
316
- _resp, data = @client.http.post("/channels/#{@id}/webhooks", payload).wait
316
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/webhooks", "//channels/:channel_id/webhooks", :post), payload).wait
317
317
  Webhook.new([@client, data])
318
318
  end
319
319
  end
@@ -326,7 +326,7 @@ module Discorb
326
326
  #
327
327
  def fetch_webhooks
328
328
  Async do
329
- _resp, data = @client.http.get("/channels/#{@id}/webhooks").wait
329
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/webhooks", "//channels/:channel_id/webhooks", :get)).wait
330
330
  data.map { |webhook| Webhook.new([@client, webhook]) }
331
331
  end
332
332
  end
@@ -354,7 +354,7 @@ module Discorb
354
354
 
355
355
  message_ids = messages.map { |m| Discorb::Utils.try(m, :id).to_s }
356
356
 
357
- @client.http.post("/channels/#{@id}/messages/bulk-delete", { messages: message_ids }).wait
357
+ @client.http.request(Route.new("/channels/#{@id}/messages/bulk-delete", "//channels/:channel_id/messages/bulk-delete", :post), { messages: message_ids }).wait
358
358
  end
359
359
  end
360
360
 
@@ -384,7 +384,7 @@ module Discorb
384
384
  deny: deny_value,
385
385
  type: target.is_a?(Member) ? 1 : 0,
386
386
  }
387
- @client.http.put("/channels/#{@id}/permissions/#{target.id}", payload, audit_log_reason: reason).wait
387
+ @client.http.request(Route.new("/channels/#{@id}/permissions/#{target.id}", "//channels/:channel_id/permissions/:target_id", :put), payload, audit_log_reason: reason).wait
388
388
  end
389
389
  end
390
390
 
@@ -404,7 +404,7 @@ module Discorb
404
404
  #
405
405
  def delete_permissions(target, reason: nil)
406
406
  Async do
407
- @client.http.delete("/channels/#{@id}/permissions/#{target.id}", audit_log_reason: reason).wait
407
+ @client.http.request(Route.new("/channels/#{@id}/permissions/#{target.id}", "//channels/:channel_id/permissions/:target_id", :delete), audit_log_reason: reason).wait
408
408
  end
409
409
  end
410
410
 
@@ -420,7 +420,7 @@ module Discorb
420
420
  #
421
421
  def fetch_invites
422
422
  Async do
423
- _resp, data = @client.http.get("/channels/#{@id}/invites").wait
423
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/invites", "//channels/:channel_id/invites", :get)).wait
424
424
  data.map { |invite| Invite.new(@client, invite) }
425
425
  end
426
426
  end
@@ -440,7 +440,7 @@ module Discorb
440
440
  #
441
441
  def create_invite(max_age: nil, max_uses: nil, temporary: false, unique: false, reason: nil)
442
442
  Async do
443
- _resp, data = @client.http.post("/channels/#{@id}/invites", {
443
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/invites", "//channels/:channel_id/invites", :post), {
444
444
  max_age: max_age,
445
445
  max_uses: max_uses,
446
446
  temporary: temporary,
@@ -461,7 +461,7 @@ module Discorb
461
461
  #
462
462
  def follow_from(target, reason: nil)
463
463
  Async do
464
- @client.http.post("/channels/#{target.id}/followers", { webhook_channel_id: @id }, audit_log_reason: reason).wait
464
+ @client.http.request(Route.new("/channels/#{target.id}/followers", "//channels/:channel_id/followers", :post), { webhook_channel_id: @id }, audit_log_reason: reason).wait
465
465
  end
466
466
  end
467
467
 
@@ -476,7 +476,7 @@ module Discorb
476
476
  #
477
477
  def follow_to(target, reason: nil)
478
478
  Async do
479
- @client.http.post("/channels/#{@id}/followers", { webhook_channel_id: target.id }, audit_log_reason: reason).wait
479
+ @client.http.request(Route.new("/channels/#{@id}/followers", "//channels/:channel_id/followers", :post), { webhook_channel_id: target.id }, audit_log_reason: reason).wait
480
480
  end
481
481
  end
482
482
 
@@ -497,17 +497,15 @@ module Discorb
497
497
  def start_thread(name, message: nil, auto_archive_duration: 1440, public: true, rate_limit_per_user: nil, slowmode: nil, reason: nil)
498
498
  Async do
499
499
  _resp, data = if message.nil?
500
- @client.http.post(
501
- "/channels/#{@id}/threads", {
502
- name: name,
503
- auto_archive_duration: auto_archive_duration,
504
- type: public ? 11 : 10,
505
- rate_limit_per_user: rate_limit_per_user || slowmode,
506
- },
507
- audit_log_reason: reason,
508
- ).wait
500
+ @client.http.request(Route.new("/channels/#{@id}/threads", "//channels/:channel_id/threads", :post), {
501
+ name: name,
502
+ auto_archive_duration: auto_archive_duration,
503
+ type: public ? 11 : 10,
504
+ rate_limit_per_user: rate_limit_per_user || slowmode,
505
+ },
506
+ audit_log_reason: reason).wait
509
507
  else
510
- @client.http.post("/channels/#{@id}/messages/#{Utils.try(message, :id)}/threads", {
508
+ @client.http.request(Route.new("/channels/#{@id}/messages/#{Utils.try(message, :id)}/threads", "//channels/:channel_id/messages/:message_id/threads", :post), {
511
509
  name: name, auto_archive_duration: auto_archive_duration,
512
510
  }, audit_log_reason: reason).wait
513
511
  end
@@ -525,7 +523,7 @@ module Discorb
525
523
  #
526
524
  def fetch_archived_public_threads
527
525
  Async do
528
- _resp, data = @client.http.get("/channels/#{@id}/threads/archived/public").wait
526
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/threads/archived/public", "//channels/:channel_id/threads/archived/public", :get)).wait
529
527
  data.map { |thread| Channel.make_channel(@client, thread) }
530
528
  end
531
529
  end
@@ -538,7 +536,7 @@ module Discorb
538
536
  #
539
537
  def fetch_archived_private_threads
540
538
  Async do
541
- _resp, data = @client.http.get("/channels/#{@id}/threads/archived/private").wait
539
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/threads/archived/private", "//channels/:channel_id/threads/archived/private", :get)).wait
542
540
  data.map { |thread| Channel.make_channel(@client, thread) }
543
541
  end
544
542
  end
@@ -558,7 +556,7 @@ module Discorb
558
556
  before = 0
559
557
  threads = []
560
558
  loop do
561
- _resp, data = @client.http.get("/channels/#{@id}/users/@me/threads/archived/private?before=#{before}").wait
559
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/users/@me/threads/archived/private?before=#{before}", "//channels/:channel_id/users/@me/threads/archived/private", :get)).wait
562
560
  threads += data[:threads].map { |thread| Channel.make_channel(@client, thread) }
563
561
  before = data[:threads][-1][:id]
564
562
 
@@ -566,7 +564,7 @@ module Discorb
566
564
  end
567
565
  threads
568
566
  else
569
- _resp, data = @client.http.get("/channels/#{@id}/users/@me/threads/archived/private?limit=#{limit}&before=#{before}").wait
567
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/users/@me/threads/archived/private?limit=#{limit}&before=#{before}", "//channels/:channel_id/users/@me/threads/archived/private", :get)).wait
570
568
  data.map { |thread| Channel.make_channel(@client, thread) }
571
569
  end
572
570
  end
@@ -634,7 +632,7 @@ module Discorb
634
632
  payload[:user_limit] = user_limit if user_limit != Discorb::Unset
635
633
  payload[:rtc_region] = rtc_region if rtc_region != Discorb::Unset
636
634
 
637
- @client.http.patch("/channels/#{@id}", payload, audit_log_reason: reason).wait
635
+ @client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
638
636
  self
639
637
  end
640
638
  end
@@ -707,7 +705,7 @@ module Discorb
707
705
  payload[:position] = position if position != Discorb::Unset
708
706
  payload[:bitrate] = bitrate if bitrate != Discorb::Unset
709
707
  payload[:rtc_region] = rtc_region if rtc_region != Discorb::Unset
710
- @client.http.patch("/channels/#{@id}", payload, audit_log_reason: reason).wait
708
+ @client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
711
709
  self
712
710
  end
713
711
  end
@@ -726,7 +724,7 @@ module Discorb
726
724
  #
727
725
  def start(topic, public: false, reason: nil)
728
726
  Async do
729
- _resp, data = @client.http.post("/stage-instances", { channel_id: @id, topic: topic, public: public ? 2 : 1 }, audit_log_reason: reason).wait
727
+ _resp, data = @client.http.request(Route.new("/stage-instances", "//stage-instances", :post), { channel_id: @id, topic: topic, public: public ? 2 : 1 }, audit_log_reason: reason).wait
730
728
  StageInstance.new(@client, data)
731
729
  end
732
730
  end
@@ -740,7 +738,7 @@ module Discorb
740
738
  #
741
739
  def fetch_stage_instance
742
740
  Async do
743
- _resp, data = @client.http.get("/stage-instances/#{@id}").wait
741
+ _resp, data = @client.http.request(Route.new("/stage-instances/#{@id}", "//stage-instances/:stage_instance_id", :get)).wait
744
742
  rescue Discorb::NotFoundError
745
743
  nil
746
744
  else
@@ -863,7 +861,7 @@ module Discorb
863
861
  auto_archive_duration ||= archive_in
864
862
  payload[:auto_archive_duration] = auto_archive_duration if auto_archive_duration != Discorb::Unset
865
863
  payload[:locked] = locked if locked != Discorb::Unset
866
- @client.http.patch("/channels/#{@id}", payload, audit_log_reason: reason).wait
864
+ @client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
867
865
  self
868
866
  end
869
867
  end
@@ -952,9 +950,9 @@ module Discorb
952
950
  def add_member(member = :me)
953
951
  Async do
954
952
  if member == :me
955
- @client.http.post("/channels/#{@id}/thread-members/@me").wait
953
+ @client.http.request(Route.new("/channels/#{@id}/thread-members/@me", "//channels/:channel_id/thread-members/@me", :post)).wait
956
954
  else
957
- @client.http.post("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}").wait
955
+ @client.http.request(Route.new("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}", "//channels/:channel_id/thread-members/:user_id", :post)).wait
958
956
  end
959
957
  end
960
958
  end
@@ -971,9 +969,9 @@ module Discorb
971
969
  def remove_member(member = :me)
972
970
  Async do
973
971
  if member == :me
974
- @client.http.delete("/channels/#{@id}/thread-members/@me").wait
972
+ @client.http.request(Route.new("/channels/#{@id}/thread-members/@me", "//channels/:channel_id/thread-members/@me", :delete)).wait
975
973
  else
976
- @client.http.delete("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}").wait
974
+ @client.http.request(Route.new("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}", "//channels/:channel_id/thread-members/:user_id", :delete)).wait
977
975
  end
978
976
  end
979
977
  end
@@ -987,7 +985,7 @@ module Discorb
987
985
  #
988
986
  def fetch_members
989
987
  Async do
990
- _resp, data = @client.http.get("/channels/#{@id}/thread-members").wait
988
+ _resp, data = @client.http.request(Route.new("/channels/#{@id}/thread-members", "//channels/:channel_id/thread-members", :get)).wait
991
989
  data.map { |d| @members[d[:id]] = Member.new(@client, d) }
992
990
  end
993
991
  end
@@ -1062,24 +1060,26 @@ module Discorb
1062
1060
  end
1063
1061
 
1064
1062
  class CategoryChannel < GuildChannel
1065
- attr_reader :channels
1066
-
1067
1063
  @channel_type = 4
1068
1064
 
1065
+ def channels
1066
+ @client.channels.values.filter { |channel| channel.parent == self }
1067
+ end
1068
+
1069
1069
  def text_channels
1070
- @channels.filter { |c| c.is_a? TextChannel }
1070
+ channels.filter { |c| c.is_a? TextChannel }
1071
1071
  end
1072
1072
 
1073
1073
  def voice_channels
1074
- @channels.filter { |c| c.is_a? VoiceChannel }
1074
+ channels.filter { |c| c.is_a? VoiceChannel }
1075
1075
  end
1076
1076
 
1077
1077
  def news_channel
1078
- @channels.filter { |c| c.is_a? NewsChannel }
1078
+ channels.filter { |c| c.is_a? NewsChannel }
1079
1079
  end
1080
1080
 
1081
1081
  def stage_channels
1082
- @channels.filter { |c| c.is_a? StageChannel }
1082
+ channels.filter { |c| c.is_a? StageChannel }
1083
1083
  end
1084
1084
 
1085
1085
  def create_text_channel(*args, **kwargs)
@@ -1097,13 +1097,6 @@ module Discorb
1097
1097
  def create_stage_channel(*args, **kwargs)
1098
1098
  guild.create_stage_channel(*args, parent: self, **kwargs)
1099
1099
  end
1100
-
1101
- private
1102
-
1103
- def _set_data(data)
1104
- @channels = @client.channels.values.filter { |channel| channel.parent == self }
1105
- super
1106
- end
1107
1100
  end
1108
1101
 
1109
1102
  class DMChannel < Channel
@@ -63,7 +63,7 @@ module Discorb
63
63
  # @param [Discorb::AllowedMentions] allowed_mentions The allowed mentions that the client is using.
64
64
  # @param [Discorb::Intents] intents The intents that the client is currently using.
65
65
  # @param [Integer] message_caches The number of messages to cache.
66
- # @param [#puts] log The IO object to use for logging.
66
+ # @param [#write] log The IO object to use for logging.
67
67
  # @param [Boolean] colorize_log Whether to colorize the log.
68
68
  # @param [:debug, :info, :warn, :error, :critical] log_level The log level.
69
69
  # @param [Boolean] wait_until_ready Whether to delay event dispatch until ready.
@@ -212,7 +212,7 @@ module Discorb
212
212
  #
213
213
  def fetch_user(id)
214
214
  Async do
215
- _resp, data = http.get("/users/#{id}").wait
215
+ _resp, data = @http.request(Route.new("/users/#{id}", "//users/:user_id", :get)).wait
216
216
  User.new(self, data)
217
217
  end
218
218
  end
@@ -229,7 +229,7 @@ module Discorb
229
229
  #
230
230
  def fetch_channel(id)
231
231
  Async do
232
- _resp, data = http.get("/channels/#{id}").wait
232
+ _resp, data = @http.request(Route.new("/channels/#{id}", "//channels/:channel_id", :get)).wait
233
233
  Channel.make_channel(self, data)
234
234
  end
235
235
  end
@@ -246,7 +246,7 @@ module Discorb
246
246
  #
247
247
  def fetch_guild(id)
248
248
  Async do
249
- _resp, data = http.get("/guilds/#{id}").wait
249
+ _resp, data = @http.request(Route.new("/guilds/#{id}", "//guilds/:guild_id", :get)).wait
250
250
  Guild.new(self, data, false)
251
251
  end
252
252
  end
@@ -263,7 +263,7 @@ module Discorb
263
263
  #
264
264
  def fetch_invite(code, with_count: false, with_expiration: false)
265
265
  Async do
266
- _resp, data = http.get("/invites/#{code}?with_count=#{with_count}&with_expiration=#{with_expiration}").wait
266
+ _resp, data = @http.request(Route.new("/invites/#{code}?with_count=#{with_count}&with_expiration=#{with_expiration}", "//invites/:code", :get)).wait
267
267
  Invite.new(self, data, false)
268
268
  end
269
269
  end
@@ -281,7 +281,7 @@ module Discorb
281
281
  Async do
282
282
  next @application if @application && !force
283
283
 
284
- _resp, data = http.get("/oauth2/applications/@me").wait
284
+ _resp, data = @http.request(Route.new("/oauth2/applications/@me", "//oauth2/applications/@me", :get)).wait
285
285
  @application = Application.new(self, data)
286
286
  @application
287
287
  end
@@ -295,7 +295,7 @@ module Discorb
295
295
  #
296
296
  def fetch_nitro_sticker_packs
297
297
  Async do
298
- _resp, data = http.get("/stickers-packs").wait
298
+ _resp, data = @http.request(Route.new("/stickers-packs", "//stickers-packs", :get)).wait
299
299
  data.map { |pack| Sticker::Pack.new(self, pack) }
300
300
  end
301
301
  end
@@ -4,7 +4,7 @@ module Discorb
4
4
  # @return [String] The API base URL.
5
5
  API_BASE_URL = "https://discord.com/api/v9"
6
6
  # @return [String] The version of discorb.
7
- VERSION = "0.13.3"
7
+ VERSION = "0.13.4"
8
8
  # @return [String] The user agent for the bot.
9
9
  USER_AGENT = "DiscordBot (https://discorb-lib.github.io #{VERSION}) Ruby/#{RUBY_VERSION}"
10
10
 
@@ -117,6 +117,35 @@ module Discorb
117
117
  alias id to_s
118
118
  end
119
119
 
120
+ #
121
+ # Represents an endpoint.
122
+ # @private
123
+ #
124
+ class Route
125
+ attr_reader :url, :key, :method
126
+
127
+ def initialize(url, key, method)
128
+ @url = url
129
+ @key = key
130
+ @method = method
131
+ end
132
+
133
+ def hash
134
+ @url.hash
135
+ end
136
+
137
+ def identifier
138
+ "#{@method} #{@key}"
139
+ end
140
+
141
+ def major_param
142
+ param_type = @key.split("/").find { |k| k.start_with?(":") }
143
+ return "" unless param_type
144
+ param = url.gsub(API_BASE_URL, "").split("/")[@key.split("/").index(param_type) - 1]
145
+ %w[:channel_id :guild_id :webhook_id].include?(param_type) ? param : ""
146
+ end
147
+ end
148
+
120
149
  # @return [Object] Object that represents nil.
121
150
  # This is used as a default value for optional parameters.
122
151
  Unset = Object.new
@@ -16,6 +16,7 @@ module Discorb
16
16
  @cache = hash.transform_keys(&:to_s)
17
17
  @limit = limit
18
18
  @sort = sort
19
+ @cache = @cache.sort_by(&@sort).to_h if @sort
19
20
  end
20
21
 
21
22
  #
@@ -39,7 +40,7 @@ module Discorb
39
40
  # @param [Discorb::Dictionary] other The dictionary to merge.
40
41
  #
41
42
  def merge(other)
42
- @cache.merge!(other)
43
+ @cache.merge!(other.to_h)
43
44
  end
44
45
 
45
46
  #
@@ -73,6 +74,13 @@ module Discorb
73
74
  end
74
75
  end
75
76
 
77
+ #
78
+ # Convert the dictionary to a hash.
79
+ #
80
+ def to_h
81
+ @cache
82
+ end
83
+
76
84
  #
77
85
  # Returns the values of the dictionary.
78
86
  #
@@ -104,7 +112,7 @@ module Discorb
104
112
  end
105
113
  end
106
114
 
107
- def respond_to_missing?(name, args, kwargs)
115
+ def respond_to_missing?(name, ...)
108
116
  if values.respond_to?(name)
109
117
  true
110
118
  else
data/lib/discorb/emoji.rb CHANGED
@@ -96,7 +96,7 @@ module Discorb
96
96
  payload = {}
97
97
  payload[:name] = name if name != Discorb::Unset
98
98
  payload[:roles] = roles.map { |r| Discorb::Utils.try(r, :id) } if roles != Discorb::Unset
99
- @client.http.patch("/guilds/#{@guild.id}/emojis/#{@id}", payload, audit_log_reason: reason)
99
+ @client.http.request(Route.new("/guilds/#{@guild.id}/emojis/#{@id}", "//guilds/:guild_id/emojis/:emoji_id", :patch), payload, audit_log_reason: reason)
100
100
  self
101
101
  end
102
102
  end
@@ -113,7 +113,7 @@ module Discorb
113
113
  #
114
114
  def delete!(reason: nil)
115
115
  Async do
116
- @client.http.delete("/guilds/#{@guild.id}/emojis/#{@id}", audit_log_reason: reason).wait
116
+ @client.http.request(Route.new("/guilds/#{@guild.id}/emojis/#{@id}", "//guilds/:guild_id/emojis/:emoji_id", :delete), audit_log_reason: reason).wait
117
117
  @available = false
118
118
  self
119
119
  end