discorb 0.18.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 (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,171 +1,193 @@
1
- # frozen_string_literal: true
2
-
3
- module Discorb
4
- #
5
- # Represents a sticker.
6
- #
7
- class Sticker < DiscordModel
8
- # @return [Discorb::Snowflake] The ID of the sticker.
9
- attr_reader :id
10
- # @return [String] The name of the sticker.
11
- attr_reader :name
12
- # @return [Array<String>] The tags of the sticker.
13
- attr_reader :tags
14
- # @return [:official, :guild] The type of sticker.
15
- attr_reader :type
16
- # @return [:png, :apng, :lottie] The format of the sticker.
17
- attr_reader :format
18
- # @return [String] The URL of the sticker.
19
- attr_reader :description
20
- # @return [Discorb::Snowflake] The ID of the sticker pack.
21
- attr_reader :pack_id
22
- # @return [Integer] The sort value of the sticker.
23
- attr_reader :sort_value
24
- # @return [Discorb::Snowflake] The ID of the guild the sticker is in.
25
- attr_reader :guild_id
26
- # @return [Discorb::User] The user who created the sticker.
27
- attr_reader :user
28
- # @return [Boolean] Whether the sticker is available.
29
- attr_reader :available
30
- alias available? available
31
-
32
- # @private
33
- # @return [{Integer => Symbol}] The mapping of sticker types.
34
- STICKER_TYPE = {
35
- 1 => :official,
36
- 2 => :guild,
37
- }.freeze
38
-
39
- # @private
40
- # @return [{Integer => Symbol}] The mapping of sticker format.
41
- STICKER_FORMAT = {
42
- 1 => :png,
43
- 2 => :apng,
44
- 3 => :lottie,
45
- }.freeze
46
- #
47
- # Initialize a new sticker.
48
- # @private
49
- #
50
- # @param [Discorb::Client] client The client.
51
- # @param [Hash] data The sticker data.
52
- #
53
- def initialize(client, data)
54
- @client = client
55
- _set_data(data)
56
- end
57
-
58
- #
59
- # Represents a sticker of guilds.
60
- #
61
- class GuildSticker < Sticker
62
- # @!attribute [r] guild
63
- # @macro client_cache
64
- # @return [Discorb::Guild] The guild the sticker is in.
65
-
66
- def guild
67
- @client.guilds[@guild_id]
68
- end
69
-
70
- #
71
- # Edits the sticker.
72
- # @async
73
- # @macro edit
74
- #
75
- # @param [String] name The new name of the sticker.
76
- # @param [String] description The new description of the sticker.
77
- # @param [Discorb::Emoji] tag The new tags of the sticker.
78
- # @param [String] reason The reason for the edit.
79
- #
80
- # @return [Async::Task<void>] The task.
81
- #
82
- def edit(name: Discorb::Unset, description: Discorb::Unset, tag: Discorb::Unset, reason: Discorb::Unset)
83
- Async do
84
- payload = {}
85
- payload[:name] = name unless name == Discorb::Unset
86
- payload[:description] = description unless description == Discorb::Unset
87
- payload[:tags] = tag.name unless tag == Discorb::Unset
88
- @client.http.request(
89
- Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
90
- :patch), payload, audit_log_reason: reason,
91
- ).wait
92
- end
93
- end
94
-
95
- alias modify edit
96
-
97
- #
98
- # Deletes the sticker.
99
- # @async
100
- #
101
- # @param [String] reason The reason for the deletion.
102
- #
103
- def delete!(reason: nil)
104
- Async do
105
- @client.http.request(
106
- Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
107
- :delete), {}, audit_log_reason: reason,
108
- ).wait
109
- end
110
- end
111
-
112
- alias destroy! delete!
113
- end
114
-
115
- #
116
- # Represents a sticker pack.
117
- #
118
- class Pack < DiscordModel
119
- # @return [Discorb::Snowflake] The ID of the sticker pack.
120
- attr_reader :id
121
- # @return [String] The name of the sticker pack.
122
- attr_reader :name
123
- # @return [Discorb::Snowflake] The cover sticker of the pack.
124
- attr_reader :cover_sticker_id
125
- # @return [String] The description of the pack.
126
- attr_reader :description
127
- # @return [Array<Discorb::Sticker>] The stickers in the pack.
128
- attr_reader :stickers
129
- # @return [Discorb::Asset] The banner of the pack.
130
- attr_reader :banner
131
-
132
- #
133
- # Initialize a new sticker pack.
134
- # @private
135
- #
136
- # @param [Discorb::Client] client The client.
137
- # @param [Hash] data The sticker pack data.
138
- #
139
- def initialize(client, data)
140
- @client = client
141
- @id = Snowflake.new(data[:id])
142
- @name = data[:name]
143
- @sku_id = Snowflake.new(data[:sku_id])
144
- @cover_sticker_id = Snowflake.new(data[:cover_sticker_id])
145
- @description = data[:description]
146
- @banner_asset_id = Snowflake.new(data[:banner_asset_id])
147
- @banner = Asset.new(self, data[:banner_asset_id], path: "app-assets/710982414301790216/store")
148
- @stickers = data[:stickers].map { |s| Sticker.new(@client, s) }
149
- end
150
- end
151
-
152
- private
153
-
154
- def _set_data(data)
155
- @id = Snowflake.new(data[:id])
156
- @name = data[:name]
157
- @tags = data[:tags].split(",")
158
- @type = STICKER_TYPE[data[:type]]
159
- @format = STICKER_FORMAT[data[:format]]
160
- @description = data[:description]
161
- @available = data[:available]
162
- if @type == :official
163
- @pack_id = Snowflake.new(data[:guild_id])
164
- @sort_value = data[:sort_value]
165
- else
166
- @guild_id = Snowflake.new(data[:guild_id])
167
- @user = data[:user] && (@client.users[data[:user][:id]] || User.new(@client, data[:user]))
168
- end
169
- end
170
- end
171
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Discorb
4
+ #
5
+ # Represents a sticker.
6
+ #
7
+ class Sticker < DiscordModel
8
+ # @return [Discorb::Snowflake] The ID of the sticker.
9
+ attr_reader :id
10
+ # @return [String] The name of the sticker.
11
+ attr_reader :name
12
+ # @return [Array<String>] The tags of the sticker.
13
+ attr_reader :tags
14
+ # @return [:official, :guild] The type of sticker.
15
+ attr_reader :type
16
+ # @return [:png, :apng, :lottie] The format of the sticker.
17
+ attr_reader :format
18
+ # @return [String] The URL of the sticker.
19
+ attr_reader :description
20
+ # @return [Discorb::Snowflake] The ID of the sticker pack.
21
+ attr_reader :pack_id
22
+ # @return [Integer] The sort value of the sticker.
23
+ attr_reader :sort_value
24
+ # @return [Discorb::Snowflake] The ID of the guild the sticker is in.
25
+ attr_reader :guild_id
26
+ # @return [Discorb::User] The user who created the sticker.
27
+ attr_reader :user
28
+ # @return [Boolean] Whether the sticker is available.
29
+ attr_reader :available
30
+ alias available? available
31
+
32
+ # @private
33
+ # @return [{Integer => Symbol}] The mapping of sticker types.
34
+ STICKER_TYPE = { 1 => :official, 2 => :guild }.freeze
35
+
36
+ # @private
37
+ # @return [{Integer => Symbol}] The mapping of sticker format.
38
+ STICKER_FORMAT = { 1 => :png, 2 => :apng, 3 => :lottie }.freeze
39
+ #
40
+ # Initialize a new sticker.
41
+ # @private
42
+ #
43
+ # @param [Discorb::Client] client The client.
44
+ # @param [Hash] data The sticker data.
45
+ #
46
+ def initialize(client, data)
47
+ @client = client
48
+ _set_data(data)
49
+ end
50
+
51
+ #
52
+ # Represents a sticker of guilds.
53
+ #
54
+ class GuildSticker < Sticker
55
+ # @!attribute [r] guild
56
+ # @macro client_cache
57
+ # @return [Discorb::Guild] The guild the sticker is in.
58
+
59
+ def guild
60
+ @client.guilds[@guild_id]
61
+ end
62
+
63
+ #
64
+ # Edits the sticker.
65
+ # @async
66
+ # @macro edit
67
+ #
68
+ # @param [String] name The new name of the sticker.
69
+ # @param [String] description The new description of the sticker.
70
+ # @param [Discorb::Emoji] tag The new tags of the sticker.
71
+ # @param [String] reason The reason for the edit.
72
+ #
73
+ # @return [Async::Task<void>] The task.
74
+ #
75
+ def edit(
76
+ name: Discorb::Unset,
77
+ description: Discorb::Unset,
78
+ tag: Discorb::Unset,
79
+ reason: Discorb::Unset
80
+ )
81
+ Async do
82
+ payload = {}
83
+ payload[:name] = name unless name == Discorb::Unset
84
+ payload[:description] = description unless description ==
85
+ Discorb::Unset
86
+ payload[:tags] = tag.name unless tag == Discorb::Unset
87
+ @client
88
+ .http
89
+ .request(
90
+ Route.new(
91
+ "/guilds/#{@guild_id}/stickers/#{@id}",
92
+ "//guilds/:guild_id/stickers/:sticker_id",
93
+ :patch
94
+ ),
95
+ payload,
96
+ audit_log_reason: reason
97
+ )
98
+ .wait
99
+ end
100
+ end
101
+
102
+ alias modify edit
103
+
104
+ #
105
+ # Deletes the sticker.
106
+ # @async
107
+ #
108
+ # @param [String] reason The reason for the deletion.
109
+ #
110
+ def delete(reason: nil)
111
+ Async do
112
+ @client
113
+ .http
114
+ .request(
115
+ Route.new(
116
+ "/guilds/#{@guild_id}/stickers/#{@id}",
117
+ "//guilds/:guild_id/stickers/:sticker_id",
118
+ :delete
119
+ ),
120
+ {},
121
+ audit_log_reason: reason
122
+ )
123
+ .wait
124
+ end
125
+ end
126
+
127
+ alias destroy delete
128
+ end
129
+
130
+ #
131
+ # Represents a sticker pack.
132
+ #
133
+ class Pack < DiscordModel
134
+ # @return [Discorb::Snowflake] The ID of the sticker pack.
135
+ attr_reader :id
136
+ # @return [String] The name of the sticker pack.
137
+ attr_reader :name
138
+ # @return [Discorb::Snowflake] The cover sticker of the pack.
139
+ attr_reader :cover_sticker_id
140
+ # @return [String] The description of the pack.
141
+ attr_reader :description
142
+ # @return [Array<Discorb::Sticker>] The stickers in the pack.
143
+ attr_reader :stickers
144
+ # @return [Discorb::Asset] The banner of the pack.
145
+ attr_reader :banner
146
+
147
+ #
148
+ # Initialize a new sticker pack.
149
+ # @private
150
+ #
151
+ # @param [Discorb::Client] client The client.
152
+ # @param [Hash] data The sticker pack data.
153
+ #
154
+ def initialize(client, data)
155
+ @client = client
156
+ @id = Snowflake.new(data[:id])
157
+ @name = data[:name]
158
+ @sku_id = Snowflake.new(data[:sku_id])
159
+ @cover_sticker_id = Snowflake.new(data[:cover_sticker_id])
160
+ @description = data[:description]
161
+ @banner_asset_id = Snowflake.new(data[:banner_asset_id])
162
+ @banner =
163
+ Asset.new(
164
+ self,
165
+ data[:banner_asset_id],
166
+ path: "app-assets/710982414301790216/store"
167
+ )
168
+ @stickers = data[:stickers].map { |s| Sticker.new(@client, s) }
169
+ end
170
+ end
171
+
172
+ private
173
+
174
+ def _set_data(data)
175
+ @id = Snowflake.new(data[:id])
176
+ @name = data[:name]
177
+ @tags = data[:tags].split(",")
178
+ @type = STICKER_TYPE[data[:type]]
179
+ @format = STICKER_FORMAT[data[:format]]
180
+ @description = data[:description]
181
+ @available = data[:available]
182
+ if @type == :official
183
+ @pack_id = Snowflake.new(data[:guild_id])
184
+ @sort_value = data[:sort_value]
185
+ else
186
+ @guild_id = Snowflake.new(data[:guild_id])
187
+ @user =
188
+ data[:user] &&
189
+ (@client.users[data[:user][:id]] || User.new(@client, data[:user]))
190
+ end
191
+ end
192
+ end
193
+ end