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,186 +1,197 @@
1
- # frozen_string_literal: true
2
-
3
- module Discorb
4
- #
5
- # Represents a message in Discord.
6
- #
7
- class Message < DiscordModel
8
- #
9
- # Represents message flag.
10
- # ## Flag fields
11
- # |Field|Value|
12
- # |-|-|
13
- # |`1 << 0`|`:crossposted`|
14
- # |`1 << 1`|`:crosspost`|
15
- # |`1 << 2`|`:supress_embeds`|
16
- # |`1 << 3`|`:source_message_deleted`|
17
- # |`1 << 4`|`:urgent`|
18
- # |`1 << 5`|`:has_thread`|
19
- # |`1 << 6`|`:ephemeral`|
20
- # |`1 << 7`|`:loading`|
21
- #
22
- class Flag < Discorb::Flag
23
- @bits = {
24
- crossposted: 0,
25
- crosspost: 1,
26
- supress_embeds: 2,
27
- source_message_deleted: 3,
28
- urgent: 4,
29
- has_thread: 5,
30
- ephemeral: 6,
31
- loading: 7,
32
- }.freeze
33
- end
34
-
35
- #
36
- # Represents reference of message.
37
- #
38
- class Reference
39
- # @return [Discorb::Snowflake] The guild ID.
40
- attr_accessor :guild_id
41
- # @return [Discorb::Snowflake] The channel ID.
42
- attr_accessor :channel_id
43
- # @return [Discorb::Snowflake] The message ID.
44
- attr_accessor :message_id
45
- # @return [Boolean] Whether fail the request if the message is not found.
46
- attr_accessor :fail_if_not_exists
47
-
48
- alias fail_if_not_exists? fail_if_not_exists
49
-
50
- #
51
- # Initialize a new reference.
52
- #
53
- # @param [Discorb::Snowflake] guild_id The guild ID.
54
- # @param [Discorb::Snowflake] channel_id The channel ID.
55
- # @param [Discorb::Snowflake] message_id The message ID.
56
- # @param [Boolean] fail_if_not_exists Whether fail the request if the message is not found.
57
- #
58
- def initialize(guild_id, channel_id, message_id, fail_if_not_exists: true)
59
- @guild_id = guild_id
60
- @channel_id = channel_id
61
- @message_id = message_id
62
- @fail_if_not_exists = fail_if_not_exists
63
- end
64
-
65
- #
66
- # Convert the reference to a hash.
67
- #
68
- # @return [Hash] The hash.
69
- #
70
- def to_hash
71
- {
72
- message_id: @message_id,
73
- channel_id: @channel_id,
74
- guild_id: @guild_id,
75
- fail_if_not_exists: @fail_if_not_exists,
76
- }
77
- end
78
-
79
- #
80
- # Initialize a new reference from a hash.
81
- #
82
- # @param [Hash] data The hash.
83
- #
84
- # @return [Discorb::Message::Reference] The reference.
85
- # @see https://discord.com/developers/docs/resources/channel#message-reference-object
86
- #
87
- def self.from_hash(data)
88
- new(data[:guild_id], data[:channel_id], data[:message_id], fail_if_not_exists: data[:fail_if_not_exists])
89
- end
90
-
91
- def inspect
92
- "#<#{self.class.name} #{@channel_id}/#{@message_id}>"
93
- end
94
- end
95
-
96
- #
97
- # Represents a sticker.
98
- #
99
- class Sticker
100
- # @return [Discorb::Snowflake] The sticker ID.
101
- attr_reader :id
102
- # @return [String] The sticker name.
103
- attr_reader :name
104
- # @return [Symbol] The sticker format.
105
- attr_reader :format
106
-
107
- def initialize(data)
108
- @id = Snowflake.new(data[:id])
109
- @name = data[:name]
110
- @format = Discorb::Sticker::STICKER_FORMAT[data[:format]]
111
- end
112
-
113
- def inspect
114
- "#<#{self.class.name} #{@id}: #{@name} format=#{@format}>"
115
- end
116
- end
117
-
118
- #
119
- # Represents a interaction of message.
120
- #
121
- class Interaction < DiscordModel
122
- # @return [Discorb::Snowflake] The interaction ID.
123
- attr_reader :id
124
- # @return [String] The name of command.
125
- # @return [nil] If the message is not a command.
126
- attr_reader :name
127
- # @return [Class] The type of interaction.
128
- attr_reader :type
129
- # @return [Discorb::User] The user.
130
- attr_reader :user
131
-
132
- #
133
- # Initialize a new interaction.
134
- # @private
135
- #
136
- # @param [Discorb::Client] client The client.
137
- # @param [Hash] data The interaction data.
138
- #
139
- def initialize(client, data)
140
- @id = Snowflake.new(data[:id])
141
- @name = data[:name]
142
- @type = (Discorb::Interaction.descendants.find { |c| c.interaction_type == data[:type] } or
143
- raise "Unknown interaction type: #{data[:type]}")
144
- @user = client.users[data[:user][:id]] || User.new(client, data[:user])
145
- end
146
-
147
- def inspect
148
- "<#{self.class.name} #{@id}: #{@name} type=#{@type} #{@user}>"
149
- end
150
- end
151
-
152
- #
153
- # Represents a activity of message.
154
- #
155
- class Activity < DiscordModel
156
- # @return [String] The name of activity.
157
- attr_reader :name
158
- # @return [Symbol] The type of activity.
159
- attr_reader :type
160
-
161
- # @private
162
- # @return [{Integer => Symbol}] The mapping of activity type.
163
- TYPES = {
164
- 1 => :join,
165
- 2 => :spectate,
166
- 3 => :listen,
167
- 5 => :join_request,
168
- }.freeze
169
-
170
- #
171
- # Initialize a new activity.
172
- # @private
173
- #
174
- # @param [Hash] data The activity data.
175
- #
176
- def initialize(data)
177
- @name = data[:name]
178
- @type = TYPES[data[:type]]
179
- end
180
-
181
- def inspect
182
- "<#{self.class.name} #{@name} type=#{@type}>"
183
- end
184
- end
185
- end
186
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Discorb
4
+ #
5
+ # Represents a message in Discord.
6
+ #
7
+ class Message < DiscordModel
8
+ #
9
+ # Represents message flag.
10
+ # ## Flag fields
11
+ # |Field|Value|
12
+ # |-|-|
13
+ # |`1 << 0`|`:crossposted`|
14
+ # |`1 << 1`|`:crosspost`|
15
+ # |`1 << 2`|`:supress_embeds`|
16
+ # |`1 << 3`|`:source_message_deleted`|
17
+ # |`1 << 4`|`:urgent`|
18
+ # |`1 << 5`|`:has_thread`|
19
+ # |`1 << 6`|`:ephemeral`|
20
+ # |`1 << 7`|`:loading`|
21
+ # |`1 << 8`|`:failed_to_mention_some_roles_in_thread`|
22
+ #
23
+ class Flag < Discorb::Flag
24
+ @bits = {
25
+ crossposted: 0,
26
+ crosspost: 1,
27
+ supress_embeds: 2,
28
+ source_message_deleted: 3,
29
+ urgent: 4,
30
+ has_thread: 5,
31
+ ephemeral: 6,
32
+ loading: 7,
33
+ failed_to_mention_some_roles_in_thread: 8
34
+ }.freeze
35
+ end
36
+
37
+ #
38
+ # Represents reference of message.
39
+ #
40
+ class Reference
41
+ # @return [Discorb::Snowflake] The guild ID.
42
+ attr_accessor :guild_id
43
+ # @return [Discorb::Snowflake] The channel ID.
44
+ attr_accessor :channel_id
45
+ # @return [Discorb::Snowflake] The message ID.
46
+ attr_accessor :message_id
47
+ # @return [Boolean] Whether fail the request if the message is not found.
48
+ attr_accessor :fail_if_not_exists
49
+
50
+ alias fail_if_not_exists? fail_if_not_exists
51
+
52
+ #
53
+ # Initialize a new reference.
54
+ #
55
+ # @param [Discorb::Snowflake] guild_id The guild ID.
56
+ # @param [Discorb::Snowflake] channel_id The channel ID.
57
+ # @param [Discorb::Snowflake] message_id The message ID.
58
+ # @param [Boolean] fail_if_not_exists Whether fail the request if the message is not found.
59
+ #
60
+ def initialize(guild_id, channel_id, message_id, fail_if_not_exists: true)
61
+ @guild_id = guild_id
62
+ @channel_id = channel_id
63
+ @message_id = message_id
64
+ @fail_if_not_exists = fail_if_not_exists
65
+ end
66
+
67
+ #
68
+ # Convert the reference to a hash.
69
+ #
70
+ # @return [Hash] The hash.
71
+ #
72
+ def to_hash
73
+ {
74
+ message_id: @message_id,
75
+ channel_id: @channel_id,
76
+ guild_id: @guild_id,
77
+ fail_if_not_exists: @fail_if_not_exists
78
+ }
79
+ end
80
+
81
+ #
82
+ # Initialize a new reference from a hash.
83
+ #
84
+ # @param [Hash] data The hash.
85
+ #
86
+ # @return [Discorb::Message::Reference] The reference.
87
+ # @see https://discord.com/developers/docs/resources/channel#message-reference-object
88
+ #
89
+ def self.from_hash(data)
90
+ new(
91
+ data[:guild_id],
92
+ data[:channel_id],
93
+ data[:message_id],
94
+ fail_if_not_exists: data[:fail_if_not_exists]
95
+ )
96
+ end
97
+
98
+ def inspect
99
+ "#<#{self.class.name} #{@channel_id}/#{@message_id}>"
100
+ end
101
+ end
102
+
103
+ #
104
+ # Represents a sticker.
105
+ #
106
+ class Sticker
107
+ # @return [Discorb::Snowflake] The sticker ID.
108
+ attr_reader :id
109
+ # @return [String] The sticker name.
110
+ attr_reader :name
111
+ # @return [Symbol] The sticker format.
112
+ attr_reader :format
113
+
114
+ def initialize(data)
115
+ @id = Snowflake.new(data[:id])
116
+ @name = data[:name]
117
+ @format = Discorb::Sticker::STICKER_FORMAT[data[:format]]
118
+ end
119
+
120
+ def inspect
121
+ "#<#{self.class.name} #{@id}: #{@name} format=#{@format}>"
122
+ end
123
+ end
124
+
125
+ #
126
+ # Represents a interaction of message.
127
+ #
128
+ class Interaction < DiscordModel
129
+ # @return [Discorb::Snowflake] The interaction ID.
130
+ attr_reader :id
131
+ # @return [String] The name of command.
132
+ # @return [nil] If the message is not a command.
133
+ attr_reader :name
134
+ # @return [Class] The type of interaction.
135
+ attr_reader :type
136
+ # @return [Discorb::User] The user.
137
+ attr_reader :user
138
+
139
+ #
140
+ # Initialize a new interaction.
141
+ # @private
142
+ #
143
+ # @param [Discorb::Client] client The client.
144
+ # @param [Hash] data The interaction data.
145
+ #
146
+ def initialize(client, data)
147
+ @id = Snowflake.new(data[:id])
148
+ @name = data[:name]
149
+ @type =
150
+ (
151
+ Discorb::Interaction.descendants.find do |c|
152
+ c.interaction_type == data[:type]
153
+ end or raise "Unknown interaction type: #{data[:type]}"
154
+ )
155
+ @user = client.users[data[:user][:id]] || User.new(client, data[:user])
156
+ end
157
+
158
+ def inspect
159
+ "<#{self.class.name} #{@id}: #{@name} type=#{@type} #{@user}>"
160
+ end
161
+ end
162
+
163
+ #
164
+ # Represents a activity of message.
165
+ #
166
+ class Activity < DiscordModel
167
+ # @return [String] The name of activity.
168
+ attr_reader :name
169
+ # @return [Symbol] The type of activity.
170
+ attr_reader :type
171
+
172
+ # @private
173
+ # @return [{Integer => Symbol}] The mapping of activity type.
174
+ TYPES = {
175
+ 1 => :join,
176
+ 2 => :spectate,
177
+ 3 => :listen,
178
+ 5 => :join_request
179
+ }.freeze
180
+
181
+ #
182
+ # Initialize a new activity.
183
+ # @private
184
+ #
185
+ # @param [Hash] data The activity data.
186
+ #
187
+ def initialize(data)
188
+ @name = data[:name]
189
+ @type = TYPES[data[:type]]
190
+ end
191
+
192
+ def inspect
193
+ "<#{self.class.name} #{@name} type=#{@type}>"
194
+ end
195
+ end
196
+ end
197
+ end