discorb 0.19.0 → 0.20.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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_version.yml +2 -2
  3. data/.rubocop.yml +12 -75
  4. data/Changelog.md +10 -0
  5. data/Rakefile +482 -454
  6. data/lib/discorb/allowed_mentions.rb +68 -72
  7. data/lib/discorb/app_command/command.rb +466 -398
  8. data/lib/discorb/app_command/common.rb +65 -25
  9. data/lib/discorb/app_command/handler.rb +304 -266
  10. data/lib/discorb/app_command.rb +5 -5
  11. data/lib/discorb/application.rb +198 -197
  12. data/lib/discorb/asset.rb +101 -101
  13. data/lib/discorb/attachment.rb +134 -119
  14. data/lib/discorb/audit_logs.rb +412 -385
  15. data/lib/discorb/automod.rb +279 -269
  16. data/lib/discorb/channel/base.rb +107 -108
  17. data/lib/discorb/channel/category.rb +32 -32
  18. data/lib/discorb/channel/container.rb +44 -44
  19. data/lib/discorb/channel/dm.rb +26 -28
  20. data/lib/discorb/channel/guild.rb +311 -246
  21. data/lib/discorb/channel/stage.rb +156 -140
  22. data/lib/discorb/channel/text.rb +430 -336
  23. data/lib/discorb/channel/thread.rb +374 -325
  24. data/lib/discorb/channel/voice.rb +85 -79
  25. data/lib/discorb/channel.rb +5 -5
  26. data/lib/discorb/client.rb +635 -621
  27. data/lib/discorb/color.rb +178 -182
  28. data/lib/discorb/common.rb +168 -164
  29. data/lib/discorb/components/button.rb +107 -106
  30. data/lib/discorb/components/select_menu.rb +157 -145
  31. data/lib/discorb/components/text_input.rb +103 -106
  32. data/lib/discorb/components.rb +68 -66
  33. data/lib/discorb/dictionary.rb +135 -135
  34. data/lib/discorb/embed.rb +404 -398
  35. data/lib/discorb/emoji.rb +309 -302
  36. data/lib/discorb/emoji_table.rb +16099 -8857
  37. data/lib/discorb/error.rb +131 -131
  38. data/lib/discorb/event.rb +360 -314
  39. data/lib/discorb/event_handler.rb +39 -39
  40. data/lib/discorb/exe/about.rb +17 -17
  41. data/lib/discorb/exe/irb.rb +72 -67
  42. data/lib/discorb/exe/new.rb +323 -315
  43. data/lib/discorb/exe/run.rb +69 -68
  44. data/lib/discorb/exe/setup.rb +57 -55
  45. data/lib/discorb/exe/show.rb +12 -12
  46. data/lib/discorb/extend.rb +25 -45
  47. data/lib/discorb/extension.rb +89 -83
  48. data/lib/discorb/flag.rb +126 -128
  49. data/lib/discorb/gateway.rb +984 -804
  50. data/lib/discorb/gateway_events.rb +670 -638
  51. data/lib/discorb/gateway_requests.rb +45 -48
  52. data/lib/discorb/guild.rb +2115 -1626
  53. data/lib/discorb/guild_template.rb +280 -241
  54. data/lib/discorb/http.rb +247 -232
  55. data/lib/discorb/image.rb +42 -42
  56. data/lib/discorb/integration.rb +169 -161
  57. data/lib/discorb/intents.rb +161 -163
  58. data/lib/discorb/interaction/autocomplete.rb +76 -62
  59. data/lib/discorb/interaction/command.rb +279 -224
  60. data/lib/discorb/interaction/components.rb +114 -104
  61. data/lib/discorb/interaction/modal.rb +36 -32
  62. data/lib/discorb/interaction/response.rb +379 -336
  63. data/lib/discorb/interaction/root.rb +271 -257
  64. data/lib/discorb/interaction.rb +5 -5
  65. data/lib/discorb/invite.rb +154 -153
  66. data/lib/discorb/member.rb +344 -311
  67. data/lib/discorb/message.rb +615 -544
  68. data/lib/discorb/message_meta.rb +197 -186
  69. data/lib/discorb/modules.rb +371 -290
  70. data/lib/discorb/permission.rb +305 -291
  71. data/lib/discorb/presence.rb +352 -346
  72. data/lib/discorb/rate_limit.rb +81 -76
  73. data/lib/discorb/reaction.rb +55 -54
  74. data/lib/discorb/role.rb +272 -240
  75. data/lib/discorb/shard.rb +76 -74
  76. data/lib/discorb/sticker.rb +193 -171
  77. data/lib/discorb/user.rb +205 -188
  78. data/lib/discorb/utils/colored_puts.rb +16 -16
  79. data/lib/discorb/utils.rb +12 -16
  80. data/lib/discorb/voice_state.rb +305 -281
  81. data/lib/discorb/webhook.rb +537 -507
  82. data/lib/discorb.rb +62 -56
  83. data/sig/discorb/application.rbs +2 -0
  84. data/sig/discorb/automod.rbs +10 -1
  85. data/sig/discorb/guild.rbs +2 -0
  86. data/sig/discorb/message.rbs +2 -0
  87. data/sig/discorb/user.rbs +22 -20
  88. metadata +2 -2
@@ -1,241 +1,280 @@
1
- # frozen_string_literal: true
2
-
3
- module Discorb
4
- #
5
- # Represents a guild template.
6
- #
7
- class GuildTemplate < DiscordModel
8
- # @return [String] The code of the template.
9
- attr_reader :code
10
- # @return [String] The name of the template.
11
- attr_reader :name
12
- # @return [String] The description of the template.
13
- attr_reader :description
14
- # @return [Integer] The number of times this template has been used.
15
- attr_reader :usage_count
16
- # @return [Discorb::User] The user who created this template.
17
- attr_reader :creator
18
- # @return [Time] The time this template was created.
19
- attr_reader :created_at
20
- # @return [Time] The time this template was last updated.
21
- attr_reader :updated_at
22
- # @return [Discorb::Snowflake] The ID of guild where the template was created.
23
- attr_reader :source_guild_id
24
- # @return [Discorb::GuildTemplate::TemplateGuild] The guild where the template was created.
25
- attr_reader :serialized_source_guild
26
- alias content serialized_source_guild
27
- # @return [Boolean] Whether this template is dirty.
28
- attr_reader :is_dirty
29
- alias dirty? is_dirty
30
-
31
- # @!attribute [r] source_guild
32
- # @macro client_cache
33
- # @return [Discorb::Guild] The guild this template is based on.
34
- # @return [nil] Client wasn't able to find the guild this template is based on.
35
-
36
- #
37
- # Initialize a new template.
38
- # @private
39
- #
40
- # @param [Discorb::Client] client The client.
41
- # @param [Hash] data The data from Discord.
42
- #
43
- def initialize(client, data)
44
- @client = client
45
- _set_data(data)
46
- end
47
-
48
- def source_guild
49
- @client.guilds[@source_guild_id]
50
- end
51
-
52
- #
53
- # Edit the template.
54
- # @async
55
- # @macro edit
56
- #
57
- # @param [String] name The new name of the template.
58
- # @param [String] description The new description of the template.
59
- #
60
- # @return [Async::Task<void>] The task.
61
- #
62
- def edit(name = nil, description = Discorb::Unset)
63
- Async do
64
- payload = {}
65
- payload[:name] = name if name
66
- payload[:description] = description if description != Discorb::Unset
67
- @client.http.request(
68
- Route.new("/guilds/#{@source_guild_id}/templates/#{@code}", "//guilds/:guild_id/templates/:code",
69
- :patch), payload
70
- ).wait
71
- end
72
- end
73
-
74
- alias modify edit
75
-
76
- #
77
- # Update the template.
78
- # @async
79
- #
80
- # @return [Async::Task<void>] The task.
81
- #
82
- def update
83
- Async do
84
- _resp, data = @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}",
85
- "//guilds/:guild_id/templates/:code", :put)).wait
86
- _set_data(data)
87
- end
88
- end
89
-
90
- #
91
- # Delete the template.
92
- # @async
93
- #
94
- # @return [Async::Task<void>] The task.
95
- #
96
- def delete
97
- Async do
98
- @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}",
99
- "//guilds/:guild_id/templates/:code", :delete)).wait
100
- end
101
- end
102
-
103
- alias destroy delete
104
-
105
- #
106
- # Represents a guild in guild template.
107
- #
108
- class TemplateGuild < DiscordModel
109
- # @return [String] The name of the guild.
110
- attr_reader :name
111
- # @return [Integer] The AFK timeout of the guild.
112
- attr_reader :afk_timeout
113
- # @return [Discorb::Dictionary{Discorb::Snowflake => Discorb::Role}] A dictionary of roles in the guild.
114
- attr_reader :roles
115
- # @return [Discorb::SystemChannelFlag] The flag for the system channel.
116
- attr_reader :system_channel_flags
117
- # @return [Discorb::Dictionary{Discorb::Snowflake => Discorb::GuildChannel}]
118
- # A dictionary of channels in the guild.
119
- attr_reader :channels
120
- # @return [String] The description of the guild.
121
- attr_reader :description
122
- # @return [Symbol] The preffered language of the guild.
123
- # @note This modifies the language code, `-` will be replaced with `_`.
124
- attr_reader :preferred_locale
125
- # @return [:none, :low, :medium, :high, :very_high] The verification level of the guild.
126
- attr_reader :verification_level
127
- # @return [:all_messages, :only_mentions] The default message notification level of the guild.
128
- attr_reader :default_message_notifications
129
- # @return [:disabled_in_text, :members_without_roles, :all_members] The explict content filter level of the guild.
130
- attr_reader :explicit_content_filter
131
- # @return [Boolean] Whether the guild enabled the widget.
132
- attr_reader :widget_enabled
133
- alias widget_enabled? widget_enabled
134
-
135
- #
136
- # Initialize a new guild in guild template.
137
- # @private
138
- #
139
- # @param [Hash] data The data from Discord.
140
- #
141
- def initialize(data)
142
- @name = data[:name]
143
- @description = data[:description]
144
- @region = data[:region]
145
- @verification_level = Discorb::Guild::MFA_LEVELS[data[:verification_level]]
146
- @default_message_notifications = Discorb::Guild::NOTIFICATION_LEVELS[data[:default_message_notifications]]
147
- @explicit_content_filter = Discorb::Guild::EXPLICIT_CONTENT_FILTERS[data[:explicit_content_filter]]
148
- @preferred_locale = data[:preferred_locale]
149
- @afk_timeout = data[:afk_timeout]
150
- @roles = data[:roles].map { |r| Role.new(r) }
151
- @channels = data[:channels].map { |c| Channel.new(c) }
152
- @system_channel_flags = Discorb::SystemChannelFlag.new(data[:system_channel_flags])
153
- end
154
-
155
- #
156
- # Represents a role in guild template.
157
- #
158
- class Role < DiscordModel
159
- # @return [String] The name of the role.
160
- attr_reader :name
161
- # @return [Discorb::Permission] The permissions of the role.
162
- attr_reader :permissions
163
- # @return [Discorb::Color] The color of the role.
164
- attr_reader :color
165
-
166
- #
167
- # Initialize a new role in guild template.
168
- # @private
169
- #
170
- # @param [Hash] data The data from Discord.
171
- #
172
- def initialize(data)
173
- @name = data[:name]
174
- @permissions = Permission.new(data[:permissions])
175
- @color = Color.new(data[:color])
176
- @hoist = data[:hoist]
177
- @mentionable = data[:mentionable]
178
- end
179
- end
180
-
181
- #
182
- # Represents a channel in guild template.
183
- #
184
- class Channel < DiscordModel
185
- # @return [String] The name of the channel.
186
- attr_reader :name
187
- # @return [Integer] The position of the channel.
188
- attr_reader :position
189
- # @return [String] The type of the channel.
190
- attr_reader :topic
191
- # @return [Integer] The bitrate of the channel.
192
- attr_reader :bitrate
193
- # @return [Integer] The user limit of the channel.
194
- attr_reader :user_limit
195
- # @return [Boolean] Whether the channel is nsfw.
196
- attr_reader :nsfw
197
- # @return [Integer] The rate limit of the channel.
198
- attr_reader :rate_limit_per_user
199
- # @return [Class] The class of the channel.
200
- attr_reader :type
201
-
202
- #
203
- # Initialize a new channel in guild template.
204
- # @private
205
- #
206
- # @param [Hash] data The data from Discord.
207
- #
208
- def initialize(data)
209
- @name = data[:name]
210
- @position = data[:position]
211
- @topic = data[:topic]
212
- @bitrate = data[:bitrate]
213
- @user_limit = data[:user_limit]
214
- @nsfw = data[:nsfw]
215
- @rate_limit_per_user = data[:rate_limit_per_user]
216
- @parent_id = data[:parent_id]
217
- @permission_overwrites = data[:permission_overwrites].to_h do |ow|
218
- [Snowflake.new(ow[:id]), PermissionOverwrite.new(ow[:allow], ow[:deny])]
219
- end
220
- @type = Discorb::Channel.descendants.find { |c| c.channel_type == data[:type] }
221
- end
222
- end
223
- end
224
-
225
- private
226
-
227
- def _set_data(data)
228
- @code = data[:code]
229
- @name = data[:name]
230
- @description = data[:description]
231
- @usage_count = data[:usage_count]
232
- @creator_id = Snowflake.new(data[:creator_id])
233
- @creator = @client.users[@creator_id] || User.new(@client, data[:creator])
234
- @created_at = Time.iso8601(data[:created_at])
235
- @updated_at = Time.iso8601(data[:updated_at])
236
- @source_guild_id = Snowflake.new(data[:source_guild_id])
237
- @serialized_source_guild = data[:serialized_source_guild]
238
- @is_dirty = data[:is_dirty]
239
- end
240
- end
241
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Discorb
4
+ #
5
+ # Represents a guild template.
6
+ #
7
+ class GuildTemplate < DiscordModel
8
+ # @return [String] The code of the template.
9
+ attr_reader :code
10
+ # @return [String] The name of the template.
11
+ attr_reader :name
12
+ # @return [String] The description of the template.
13
+ attr_reader :description
14
+ # @return [Integer] The number of times this template has been used.
15
+ attr_reader :usage_count
16
+ # @return [Discorb::User] The user who created this template.
17
+ attr_reader :creator
18
+ # @return [Time] The time this template was created.
19
+ attr_reader :created_at
20
+ # @return [Time] The time this template was last updated.
21
+ attr_reader :updated_at
22
+ # @return [Discorb::Snowflake] The ID of guild where the template was created.
23
+ attr_reader :source_guild_id
24
+ # @return [Discorb::GuildTemplate::TemplateGuild] The guild where the template was created.
25
+ attr_reader :serialized_source_guild
26
+ alias content serialized_source_guild
27
+ # @return [Boolean] Whether this template is dirty.
28
+ attr_reader :is_dirty
29
+ alias dirty? is_dirty
30
+
31
+ # @!attribute [r] source_guild
32
+ # @macro client_cache
33
+ # @return [Discorb::Guild] The guild this template is based on.
34
+ # @return [nil] Client wasn't able to find the guild this template is based on.
35
+
36
+ #
37
+ # Initialize a new template.
38
+ # @private
39
+ #
40
+ # @param [Discorb::Client] client The client.
41
+ # @param [Hash] data The data from Discord.
42
+ #
43
+ def initialize(client, data)
44
+ @client = client
45
+ _set_data(data)
46
+ end
47
+
48
+ def source_guild
49
+ @client.guilds[@source_guild_id]
50
+ end
51
+
52
+ #
53
+ # Edit the template.
54
+ # @async
55
+ # @macro edit
56
+ #
57
+ # @param [String] name The new name of the template.
58
+ # @param [String] description The new description of the template.
59
+ #
60
+ # @return [Async::Task<void>] The task.
61
+ #
62
+ def edit(name = nil, description = Discorb::Unset)
63
+ Async do
64
+ payload = {}
65
+ payload[:name] = name if name
66
+ payload[:description] = description if description != Discorb::Unset
67
+ @client
68
+ .http
69
+ .request(
70
+ Route.new(
71
+ "/guilds/#{@source_guild_id}/templates/#{@code}",
72
+ "//guilds/:guild_id/templates/:code",
73
+ :patch
74
+ ),
75
+ payload
76
+ )
77
+ .wait
78
+ end
79
+ end
80
+
81
+ alias modify edit
82
+
83
+ #
84
+ # Update the template.
85
+ # @async
86
+ #
87
+ # @return [Async::Task<void>] The task.
88
+ #
89
+ def update
90
+ Async do
91
+ _resp, data =
92
+ @client
93
+ .http
94
+ .request(
95
+ Route.new(
96
+ "/guilds/#{@source_guild_id}/templates/#{@code}",
97
+ "//guilds/:guild_id/templates/:code",
98
+ :put
99
+ )
100
+ )
101
+ .wait
102
+ _set_data(data)
103
+ end
104
+ end
105
+
106
+ #
107
+ # Delete the template.
108
+ # @async
109
+ #
110
+ # @return [Async::Task<void>] The task.
111
+ #
112
+ def delete
113
+ Async do
114
+ @client
115
+ .http
116
+ .request(
117
+ Route.new(
118
+ "/guilds/#{@source_guild_id}/templates/#{@code}",
119
+ "//guilds/:guild_id/templates/:code",
120
+ :delete
121
+ )
122
+ )
123
+ .wait
124
+ end
125
+ end
126
+
127
+ alias destroy delete
128
+
129
+ #
130
+ # Represents a guild in guild template.
131
+ #
132
+ class TemplateGuild < DiscordModel
133
+ # @return [String] The name of the guild.
134
+ attr_reader :name
135
+ # @return [Integer] The AFK timeout of the guild.
136
+ attr_reader :afk_timeout
137
+ # @return [Discorb::Dictionary{Discorb::Snowflake => Discorb::Role}] A dictionary of roles in the guild.
138
+ attr_reader :roles
139
+ # @return [Discorb::SystemChannelFlag] The flag for the system channel.
140
+ attr_reader :system_channel_flags
141
+ # @return [Discorb::Dictionary{Discorb::Snowflake => Discorb::GuildChannel}]
142
+ # A dictionary of channels in the guild.
143
+ attr_reader :channels
144
+ # @return [String] The description of the guild.
145
+ attr_reader :description
146
+ # @return [Symbol] The preffered language of the guild.
147
+ # @note This modifies the language code, `-` will be replaced with `_`.
148
+ attr_reader :preferred_locale
149
+ # @return [:none, :low, :medium, :high, :very_high] The verification level of the guild.
150
+ attr_reader :verification_level
151
+ # @return [:all_messages, :only_mentions] The default message notification level of the guild.
152
+ attr_reader :default_message_notifications
153
+ # @return [:disabled_in_text, :members_without_roles, :all_members] The explict content filter level of the guild.
154
+ attr_reader :explicit_content_filter
155
+ # @return [Boolean] Whether the guild enabled the widget.
156
+ attr_reader :widget_enabled
157
+ alias widget_enabled? widget_enabled
158
+
159
+ #
160
+ # Initialize a new guild in guild template.
161
+ # @private
162
+ #
163
+ # @param [Hash] data The data from Discord.
164
+ #
165
+ def initialize(data)
166
+ @name = data[:name]
167
+ @description = data[:description]
168
+ @region = data[:region]
169
+ @verification_level =
170
+ Discorb::Guild::MFA_LEVELS[data[:verification_level]]
171
+ @default_message_notifications =
172
+ Discorb::Guild::NOTIFICATION_LEVELS[
173
+ data[:default_message_notifications]
174
+ ]
175
+ @explicit_content_filter =
176
+ Discorb::Guild::EXPLICIT_CONTENT_FILTERS[
177
+ data[:explicit_content_filter]
178
+ ]
179
+ @preferred_locale = data[:preferred_locale]
180
+ @afk_timeout = data[:afk_timeout]
181
+ @roles = data[:roles].map { |r| Role.new(r) }
182
+ @channels = data[:channels].map { |c| Channel.new(c) }
183
+ @system_channel_flags =
184
+ Discorb::SystemChannelFlag.new(data[:system_channel_flags])
185
+ end
186
+
187
+ #
188
+ # Represents a role in guild template.
189
+ #
190
+ class Role < DiscordModel
191
+ # @return [String] The name of the role.
192
+ attr_reader :name
193
+ # @return [Discorb::Permission] The permissions of the role.
194
+ attr_reader :permissions
195
+ # @return [Discorb::Color] The color of the role.
196
+ attr_reader :color
197
+
198
+ #
199
+ # Initialize a new role in guild template.
200
+ # @private
201
+ #
202
+ # @param [Hash] data The data from Discord.
203
+ #
204
+ def initialize(data)
205
+ @name = data[:name]
206
+ @permissions = Permission.new(data[:permissions])
207
+ @color = Color.new(data[:color])
208
+ @hoist = data[:hoist]
209
+ @mentionable = data[:mentionable]
210
+ end
211
+ end
212
+
213
+ #
214
+ # Represents a channel in guild template.
215
+ #
216
+ class Channel < DiscordModel
217
+ # @return [String] The name of the channel.
218
+ attr_reader :name
219
+ # @return [Integer] The position of the channel.
220
+ attr_reader :position
221
+ # @return [String] The type of the channel.
222
+ attr_reader :topic
223
+ # @return [Integer] The bitrate of the channel.
224
+ attr_reader :bitrate
225
+ # @return [Integer] The user limit of the channel.
226
+ attr_reader :user_limit
227
+ # @return [Boolean] Whether the channel is nsfw.
228
+ attr_reader :nsfw
229
+ # @return [Integer] The rate limit of the channel.
230
+ attr_reader :rate_limit_per_user
231
+ # @return [Class] The class of the channel.
232
+ attr_reader :type
233
+
234
+ #
235
+ # Initialize a new channel in guild template.
236
+ # @private
237
+ #
238
+ # @param [Hash] data The data from Discord.
239
+ #
240
+ def initialize(data)
241
+ @name = data[:name]
242
+ @position = data[:position]
243
+ @topic = data[:topic]
244
+ @bitrate = data[:bitrate]
245
+ @user_limit = data[:user_limit]
246
+ @nsfw = data[:nsfw]
247
+ @rate_limit_per_user = data[:rate_limit_per_user]
248
+ @parent_id = data[:parent_id]
249
+ @permission_overwrites =
250
+ data[:permission_overwrites].to_h do |ow|
251
+ [
252
+ Snowflake.new(ow[:id]),
253
+ PermissionOverwrite.new(ow[:allow], ow[:deny])
254
+ ]
255
+ end
256
+ @type =
257
+ Discorb::Channel.descendants.find do |c|
258
+ c.channel_type == data[:type]
259
+ end
260
+ end
261
+ end
262
+ end
263
+
264
+ private
265
+
266
+ def _set_data(data)
267
+ @code = data[:code]
268
+ @name = data[:name]
269
+ @description = data[:description]
270
+ @usage_count = data[:usage_count]
271
+ @creator_id = Snowflake.new(data[:creator_id])
272
+ @creator = @client.users[@creator_id] || User.new(@client, data[:creator])
273
+ @created_at = Time.iso8601(data[:created_at])
274
+ @updated_at = Time.iso8601(data[:updated_at])
275
+ @source_guild_id = Snowflake.new(data[:source_guild_id])
276
+ @serialized_source_guild = data[:serialized_source_guild]
277
+ @is_dirty = data[:is_dirty]
278
+ end
279
+ end
280
+ end