discorb 0.18.0 → 0.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) 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 +25 -0
  5. data/Gemfile +4 -4
  6. data/README.md +2 -1
  7. data/Rakefile +482 -459
  8. data/Steepfile +8 -6
  9. data/docs/application_command.md +1 -0
  10. data/docs/events.md +2 -2
  11. data/docs/voice_events.md +6 -6
  12. data/lib/discorb/allowed_mentions.rb +68 -72
  13. data/lib/discorb/app_command/command.rb +466 -394
  14. data/lib/discorb/app_command/common.rb +65 -25
  15. data/lib/discorb/app_command/handler.rb +304 -265
  16. data/lib/discorb/app_command.rb +5 -5
  17. data/lib/discorb/application.rb +198 -197
  18. data/lib/discorb/asset.rb +101 -101
  19. data/lib/discorb/attachment.rb +134 -119
  20. data/lib/discorb/audit_logs.rb +412 -385
  21. data/lib/discorb/automod.rb +279 -269
  22. data/lib/discorb/channel/base.rb +107 -108
  23. data/lib/discorb/channel/category.rb +32 -32
  24. data/lib/discorb/channel/container.rb +44 -44
  25. data/lib/discorb/channel/dm.rb +26 -28
  26. data/lib/discorb/channel/guild.rb +311 -246
  27. data/lib/discorb/channel/stage.rb +156 -140
  28. data/lib/discorb/channel/text.rb +430 -336
  29. data/lib/discorb/channel/thread.rb +374 -325
  30. data/lib/discorb/channel/voice.rb +85 -79
  31. data/lib/discorb/channel.rb +5 -5
  32. data/lib/discorb/client.rb +635 -623
  33. data/lib/discorb/color.rb +178 -182
  34. data/lib/discorb/common.rb +168 -164
  35. data/lib/discorb/components/button.rb +107 -106
  36. data/lib/discorb/components/select_menu.rb +157 -145
  37. data/lib/discorb/components/text_input.rb +103 -106
  38. data/lib/discorb/components.rb +68 -66
  39. data/lib/discorb/dictionary.rb +135 -135
  40. data/lib/discorb/embed.rb +404 -398
  41. data/lib/discorb/emoji.rb +309 -302
  42. data/lib/discorb/emoji_table.rb +16099 -8857
  43. data/lib/discorb/error.rb +131 -131
  44. data/lib/discorb/event.rb +360 -314
  45. data/lib/discorb/event_handler.rb +39 -39
  46. data/lib/discorb/exe/about.rb +17 -17
  47. data/lib/discorb/exe/irb.rb +72 -67
  48. data/lib/discorb/exe/new.rb +323 -315
  49. data/lib/discorb/exe/run.rb +69 -68
  50. data/lib/discorb/exe/setup.rb +57 -55
  51. data/lib/discorb/exe/show.rb +12 -12
  52. data/lib/discorb/extend.rb +25 -45
  53. data/lib/discorb/extension.rb +89 -83
  54. data/lib/discorb/flag.rb +126 -128
  55. data/lib/discorb/gateway.rb +984 -794
  56. data/lib/discorb/gateway_events.rb +670 -638
  57. data/lib/discorb/gateway_requests.rb +45 -48
  58. data/lib/discorb/guild.rb +2115 -1626
  59. data/lib/discorb/guild_template.rb +280 -241
  60. data/lib/discorb/http.rb +247 -232
  61. data/lib/discorb/image.rb +42 -42
  62. data/lib/discorb/integration.rb +169 -161
  63. data/lib/discorb/intents.rb +161 -163
  64. data/lib/discorb/interaction/autocomplete.rb +76 -62
  65. data/lib/discorb/interaction/command.rb +279 -224
  66. data/lib/discorb/interaction/components.rb +114 -104
  67. data/lib/discorb/interaction/modal.rb +36 -32
  68. data/lib/discorb/interaction/response.rb +379 -330
  69. data/lib/discorb/interaction/root.rb +271 -118
  70. data/lib/discorb/interaction.rb +5 -5
  71. data/lib/discorb/invite.rb +154 -153
  72. data/lib/discorb/member.rb +344 -311
  73. data/lib/discorb/message.rb +615 -544
  74. data/lib/discorb/message_meta.rb +197 -186
  75. data/lib/discorb/modules.rb +371 -290
  76. data/lib/discorb/permission.rb +305 -289
  77. data/lib/discorb/presence.rb +352 -346
  78. data/lib/discorb/rate_limit.rb +81 -76
  79. data/lib/discorb/reaction.rb +55 -54
  80. data/lib/discorb/role.rb +272 -240
  81. data/lib/discorb/shard.rb +76 -74
  82. data/lib/discorb/sticker.rb +193 -171
  83. data/lib/discorb/user.rb +205 -188
  84. data/lib/discorb/utils/colored_puts.rb +16 -16
  85. data/lib/discorb/utils.rb +12 -16
  86. data/lib/discorb/voice_state.rb +305 -281
  87. data/lib/discorb/webhook.rb +537 -507
  88. data/lib/discorb.rb +62 -56
  89. data/sig/discorb/activity.rbs +1 -0
  90. data/sig/discorb/allowed_mentions.rbs +1 -0
  91. data/sig/discorb/app_command/base.rbs +7 -1
  92. data/sig/discorb/application.rbs +6 -0
  93. data/sig/discorb/asset.rbs +2 -0
  94. data/sig/discorb/attachment.rbs +8 -0
  95. data/sig/discorb/audit_log.rbs +7 -0
  96. data/sig/discorb/automod.rbs +32 -6
  97. data/sig/discorb/avatar.rbs +1 -0
  98. data/sig/discorb/channel/base.rbs +8 -1
  99. data/sig/discorb/channel/category.rbs +1 -0
  100. data/sig/discorb/channel/container.rbs +4 -0
  101. data/sig/discorb/channel/stage.rbs +4 -0
  102. data/sig/discorb/channel/text.rbs +2 -2
  103. data/sig/discorb/channel/thread.rbs +11 -0
  104. data/sig/discorb/channel/voice.rbs +2 -0
  105. data/sig/discorb/client.rbs +21 -20
  106. data/sig/discorb/color.rbs +6 -0
  107. data/sig/discorb/component/base.rbs +1 -0
  108. data/sig/discorb/component/button.rbs +2 -0
  109. data/sig/discorb/component/select_menu.rbs +4 -0
  110. data/sig/discorb/component/text_input.rbs +1 -0
  111. data/sig/discorb/custom_emoji.rbs +5 -1
  112. data/sig/discorb/dictionary.rbs +2 -0
  113. data/sig/discorb/discord_model.rbs +2 -0
  114. data/sig/discorb/embed.rbs +7 -0
  115. data/sig/discorb/emoji.rbs +1 -0
  116. data/sig/discorb/event_handler.rbs +2 -1
  117. data/sig/discorb/extension.rbs +13 -12
  118. data/sig/discorb/flag.rbs +2 -0
  119. data/sig/discorb/gateway.rbs +5 -0
  120. data/sig/discorb/guild.rbs +8 -4
  121. data/sig/discorb/guild_template.rbs +1 -1
  122. data/sig/discorb/http.rbs +4 -1
  123. data/sig/discorb/image.rbs +2 -0
  124. data/sig/discorb/integration.rbs +1 -1
  125. data/sig/discorb/intents.rbs +4 -3
  126. data/sig/discorb/interaction/base.rbs +36 -0
  127. data/sig/discorb/interaction/message_component.rbs +1 -2
  128. data/sig/discorb/interaction/modal.rbs +1 -2
  129. data/sig/discorb/interaction/responder.rbs +49 -49
  130. data/sig/discorb/invite.rbs +1 -1
  131. data/sig/discorb/member.rbs +2 -0
  132. data/sig/discorb/message.rbs +8 -1
  133. data/sig/discorb/messageable.rbs +1 -4
  134. data/sig/discorb/partial_emoji.rbs +3 -0
  135. data/sig/discorb/permissions.rbs +7 -0
  136. data/sig/discorb/presence.rbs +2 -0
  137. data/sig/discorb/reaction.rbs +5 -1
  138. data/sig/discorb/role.rbs +7 -1
  139. data/sig/discorb/scheduled_event.rbs +2 -1
  140. data/sig/discorb/shard.rbs +2 -1
  141. data/sig/discorb/snowflake.rbs +2 -0
  142. data/sig/discorb/stage_instance.rbs +9 -3
  143. data/sig/discorb/sticker.rbs +1 -1
  144. data/sig/discorb/unicode_emoji.rbs +4 -0
  145. data/sig/discorb/user.rbs +24 -20
  146. data/sig/discorb/webhook.rbs +17 -6
  147. data/sig/discorb/welcome_screen.rbs +1 -0
  148. data/sig/override.rbs +2 -0
  149. metadata +3 -3
@@ -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