discorb 0.17.1 → 0.19.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/lint.yml +1 -3
  3. data/.github/workflows/validate.yml +21 -0
  4. data/Changelog.md +25 -0
  5. data/Gemfile +6 -0
  6. data/README.md +2 -1
  7. data/Rakefile +205 -98
  8. data/Steepfile +30 -0
  9. data/docs/application_command.md +1 -0
  10. data/docs/events.md +44 -8
  11. data/docs/tutorial.md +7 -7
  12. data/docs/voice_events.md +8 -8
  13. data/examples/commands/message.rb +12 -7
  14. data/examples/commands/permission.rb +2 -1
  15. data/examples/commands/slash.rb +23 -19
  16. data/examples/commands/user.rb +15 -12
  17. data/examples/components/authorization_button.rb +2 -1
  18. data/examples/components/select_menu.rb +4 -1
  19. data/examples/extension/main.rb +1 -0
  20. data/examples/extension/message_expander.rb +1 -0
  21. data/examples/sig/commands/message.rbs +5 -0
  22. data/examples/simple/eval.rb +1 -0
  23. data/examples/simple/ping_pong.rb +1 -0
  24. data/examples/simple/rolepanel.rb +16 -5
  25. data/examples/simple/shard.rb +2 -1
  26. data/examples/simple/wait_for_message.rb +3 -0
  27. data/exe/discorb +3 -3
  28. data/lib/discorb/allowed_mentions.rb +1 -1
  29. data/lib/discorb/app_command/command.rb +16 -13
  30. data/lib/discorb/app_command/handler.rb +21 -6
  31. data/lib/discorb/audit_logs.rb +6 -2
  32. data/lib/discorb/automod.rb +269 -0
  33. data/lib/discorb/channel/guild.rb +5 -4
  34. data/lib/discorb/channel/stage.rb +1 -1
  35. data/lib/discorb/channel/text.rb +14 -23
  36. data/lib/discorb/channel/thread.rb +15 -11
  37. data/lib/discorb/client.rb +15 -15
  38. data/lib/discorb/color.rb +37 -60
  39. data/lib/discorb/common.rb +1 -1
  40. data/lib/discorb/dictionary.rb +1 -1
  41. data/lib/discorb/embed.rb +5 -4
  42. data/lib/discorb/emoji.rb +4 -4
  43. data/lib/discorb/event.rb +2 -2
  44. data/lib/discorb/exe/about.rb +1 -1
  45. data/lib/discorb/exe/new.rb +1 -5
  46. data/lib/discorb/extension.rb +0 -4
  47. data/lib/discorb/flag.rb +2 -2
  48. data/lib/discorb/gateway.rb +38 -589
  49. data/lib/discorb/gateway_events.rb +638 -0
  50. data/lib/discorb/guild.rb +138 -19
  51. data/lib/discorb/guild_template.rb +3 -3
  52. data/lib/discorb/http.rb +47 -25
  53. data/lib/discorb/integration.rb +2 -2
  54. data/lib/discorb/intents.rb +27 -18
  55. data/lib/discorb/interaction/command.rb +14 -10
  56. data/lib/discorb/interaction/response.rb +150 -84
  57. data/lib/discorb/interaction/root.rb +139 -0
  58. data/lib/discorb/invite.rb +1 -1
  59. data/lib/discorb/member.rb +3 -3
  60. data/lib/discorb/message.rb +17 -15
  61. data/lib/discorb/message_meta.rb +2 -3
  62. data/lib/discorb/modules.rb +5 -4
  63. data/lib/discorb/permission.rb +3 -1
  64. data/lib/discorb/presence.rb +4 -2
  65. data/lib/discorb/reaction.rb +2 -2
  66. data/lib/discorb/role.rb +3 -3
  67. data/lib/discorb/shard.rb +1 -1
  68. data/lib/discorb/sticker.rb +5 -5
  69. data/lib/discorb/user.rb +2 -2
  70. data/lib/discorb/voice_state.rb +8 -8
  71. data/lib/discorb/webhook.rb +20 -11
  72. data/lib/discorb.rb +2 -2
  73. data/rbs_collection.lock.yaml +88 -96
  74. data/rbs_collection.yaml +21 -17
  75. data/sig/async.rbs +11 -5
  76. data/sig/discorb/activity.rbs +24 -0
  77. data/sig/discorb/allowed_mentions.rbs +45 -0
  78. data/sig/discorb/app_command/base.rbs +288 -0
  79. data/sig/discorb/app_command/handler.rbs +171 -0
  80. data/sig/discorb/application.rbs +146 -0
  81. data/sig/discorb/asset.rbs +34 -0
  82. data/sig/discorb/attachment.rbs +99 -0
  83. data/sig/discorb/audit_log.rbs +238 -0
  84. data/sig/discorb/automod.rbs +145 -0
  85. data/sig/discorb/avatar.rbs +27 -0
  86. data/sig/discorb/channel/base.rbs +186 -0
  87. data/sig/discorb/channel/category.rbs +57 -0
  88. data/sig/discorb/channel/container.rbs +33 -0
  89. data/sig/discorb/channel/dm.rbs +14 -0
  90. data/sig/discorb/channel/news.rbs +20 -0
  91. data/sig/discorb/channel/stage.rbs +81 -0
  92. data/sig/discorb/channel/text.rbs +158 -0
  93. data/sig/discorb/channel/thread.rbs +196 -0
  94. data/sig/discorb/channel/voice.rbs +43 -0
  95. data/sig/discorb/client.rbs +2496 -0
  96. data/sig/discorb/color.rbs +148 -0
  97. data/sig/discorb/component/base.rbs +29 -0
  98. data/sig/discorb/component/button.rbs +67 -0
  99. data/sig/discorb/component/select_menu.rbs +111 -0
  100. data/sig/discorb/component/text_input.rbs +70 -0
  101. data/sig/discorb/connectable.rbs +8 -0
  102. data/sig/discorb/custom_emoji.rbs +94 -0
  103. data/sig/discorb/dictionary.rbs +87 -0
  104. data/sig/discorb/discord_model.rbs +17 -0
  105. data/sig/discorb/embed.rbs +286 -0
  106. data/sig/discorb/emoji.rbs +14 -0
  107. data/sig/discorb/error.rbs +73 -0
  108. data/sig/discorb/event_handler.rbs +28 -0
  109. data/sig/discorb/extension.rbs +1735 -0
  110. data/sig/discorb/flag.rbs +74 -0
  111. data/sig/discorb/gateway.rbs +486 -0
  112. data/sig/discorb/guild.rbs +872 -0
  113. data/sig/discorb/guild_template.rbs +174 -0
  114. data/sig/discorb/http.rbs +150 -0
  115. data/sig/discorb/image.rbs +22 -0
  116. data/sig/discorb/integration.rbs +118 -0
  117. data/sig/discorb/intents.rbs +98 -0
  118. data/sig/discorb/interaction/autocomplete.rbs +9 -0
  119. data/sig/discorb/interaction/base.rbs +102 -0
  120. data/sig/discorb/interaction/command.rbs +66 -0
  121. data/sig/discorb/interaction/message_component.rbs +139 -0
  122. data/sig/discorb/interaction/modal.rbs +49 -0
  123. data/sig/discorb/interaction/responder.rbs +157 -0
  124. data/sig/discorb/invite.rbs +86 -0
  125. data/sig/discorb/member.rbs +189 -0
  126. data/sig/discorb/message.rbs +474 -0
  127. data/sig/discorb/messageable.rbs +150 -0
  128. data/sig/discorb/partial_emoji.rbs +38 -0
  129. data/sig/discorb/permissions.rbs +156 -0
  130. data/sig/discorb/presence.rbs +239 -0
  131. data/sig/discorb/reaction.rbs +37 -0
  132. data/sig/discorb/role.rbs +151 -0
  133. data/sig/discorb/scheduled_event.rbs +149 -0
  134. data/sig/discorb/shard.rbs +63 -0
  135. data/sig/discorb/snowflake.rbs +58 -0
  136. data/sig/discorb/stage_instance.rbs +69 -0
  137. data/sig/discorb/sticker.rbs +116 -0
  138. data/sig/discorb/system_channel_flag.rbs +17 -0
  139. data/sig/discorb/unicode_emoji.rbs +53 -0
  140. data/sig/discorb/user.rbs +95 -0
  141. data/sig/discorb/utils.rbs +8 -0
  142. data/sig/discorb/voice_region.rbs +30 -0
  143. data/sig/discorb/voice_state.rbs +71 -0
  144. data/sig/discorb/webhook.rbs +338 -0
  145. data/sig/discorb/welcome_screen.rbs +79 -0
  146. data/sig/discorb.rbs +5 -8661
  147. data/sig/manifest.yaml +3 -0
  148. data/sig/override.rbs +21 -0
  149. metadata +80 -3
data/lib/discorb/color.rb CHANGED
@@ -85,7 +85,11 @@ module Discorb
85
85
  # @return [Hash{:r, :g, :b => Integer}] A RGB hash.
86
86
  #
87
87
  def to_rgb_hash
88
- [@value / (256 * 256), @value / 256 % 256, @value % 256]
88
+ {
89
+ r: @value / (256 * 256),
90
+ g: @value / 256 % 256,
91
+ b: @value % 256,
92
+ }
89
93
  end
90
94
 
91
95
  alias deconstruct_keys to_rgb_hash
@@ -131,65 +135,38 @@ module Discorb
131
135
  # Create a color from a Discord's color.
132
136
  # Currently these colors are supported:
133
137
  #
134
- # | Color Name | Hexadecimal |
135
- # |------------|------------|
136
- # | `:teal` | `#1abc9c` |
137
- # | `:dark_teal` | `#11806a` |
138
- # | `:green` | `#2ecc71` |
139
- # | `:dark_green` | `#1f8b4c` |
140
- # | `:blue` | `#3498db` |
141
- # | `:dark_blue` | `#206694` |
142
- # | `:purple` | `#9b59b6` |
143
- # | `:dark_purple` | `#71368a` |
144
- # | `:magenta` | `#e91e63` |
145
- # | `:dark_magenta` | `#ad1457` |
146
- # | `:gold` | `#f1c40f` |
147
- # | `:dark_gold` | `#c27c0e` |
148
- # | `:orange` | `#e67e22` |
149
- # | `:dark_orange` | `#a84300` |
150
- # | `:red` | `#e74c3c` |
151
- # | `:dark_red` | `#992d22` |
152
- # | `:lighter_grey` | `#95a5a6` |
153
- # | `:lighter_gray` | `#95a5a6` |
154
- # | `:dark_grey` | `#607d8b` |
155
- # | `:dark_gray` | `#607d8b` |
156
- # | `:light_grey` | `#979c9f` |
157
- # | `:light_gray` | `#979c9f` |
158
- # | `:darker_grey` | `#546e7a` |
159
- # | `:darker_gray` | `#546e7a` |
160
- # | `:og_blurple` | `#7289da` |
161
- # | `:blurple` | `#5865f2` |
162
- # | `:greyple` | `#99aab5` |
163
- # | `:dark_theme` | `#36393f` |
164
- # | `:fuchsia` | `#eb459e` |
165
- # | `:dark_teal` | `#11806a` |
166
- # | `:green` | `#2ecc71` |
167
- # | `:dark_green` | `#1f8b4c` |
168
- # | `:blue` | `#3498db` |
169
- # | `:dark_blue` | `#206694` |
170
- # | `:purple` | `#9b59b6` |
171
- # | `:dark_purple` | `#71368a` |
172
- # | `:magenta` | `#e91e63` |
173
- # | `:dark_magenta` | `#ad1457` |
174
- # | `:gold` | `#f1c40f` |
175
- # | `:dark_gold` | `#c27c0e` |
176
- # | `:orange` | `#e67e22` |
177
- # | `:dark_orange` | `#a84300` |
178
- # | `:red` | `#e74c3c` |
179
- # | `:dark_red` | `#992d22` |
180
- # | `:lighter_grey` | `#95a5a6` |
181
- # | `:lighter_gray` | `#95a5a6` |
182
- # | `:dark_grey` | `#607d8b` |
183
- # | `:dark_gray` | `#607d8b` |
184
- # | `:light_grey` | `#979c9f` |
185
- # | `:light_gray` | `#979c9f` |
186
- # | `:darker_grey` | `#546e7a` |
187
- # | `:darker_gray` | `#546e7a` |
188
- # | `:og_blurple` | `#7289da` |
189
- # | `:blurple` | `#5865f2` |
190
- # | `:greyple` | `#99aab5` |
191
- # | `:dark_theme` | `#36393f` |
192
- # | `:fuchsia` | `#eb459e` |
138
+ # | Color name | Color code |
139
+ # |-----------------|------------|
140
+ # | `:teal` | `#1abc9c` |
141
+ # | `:dark_teal` | `#11806a` |
142
+ # | `:green` | `#2ecc71` |
143
+ # | `:dark_green` | `#1f8b4c` |
144
+ # | `:blue` | `#3498db` |
145
+ # | `:dark_blue` | `#206694` |
146
+ # | `:purple` | `#9b59b6` |
147
+ # | `:dark_purple` | `#71368a` |
148
+ # | `:magenta` | `#e91e63` |
149
+ # | `:dark_magenta` | `#ad1457` |
150
+ # | `:gold` | `#f1c40f` |
151
+ # | `:dark_gold` | `#c27c0e` |
152
+ # | `:orange` | `#e67e22` |
153
+ # | `:dark_orange` | `#a84300` |
154
+ # | `:red` | `#e74c3c` |
155
+ # | `:dark_red` | `#992d22` |
156
+ # | `:lighter_grey` | `#95a5a6` |
157
+ # | `:lighter_gray` | `#95a5a6` |
158
+ # | `:dark_grey` | `#607d8b` |
159
+ # | `:dark_gray` | `#607d8b` |
160
+ # | `:light_grey` | `#979c9f` |
161
+ # | `:light_gray` | `#979c9f` |
162
+ # | `:darker_grey` | `#546e7a` |
163
+ # | `:darker_gray` | `#546e7a` |
164
+ # | `:og_blurple` | `#7289da` |
165
+ # | `:blurple` | `#5865f2` |
166
+ # | `:greyple` | `#99aab5` |
167
+ # | `:dark_theme` | `#36393f` |
168
+ # | `:fuchsia` | `#eb459e` |
169
+ # | `:yellow` | `#fee75c` |
193
170
  #
194
171
  # @param [Symbol] color A Discord color name.
195
172
  #
@@ -4,7 +4,7 @@ module Discorb
4
4
  # @return [String] The API base URL.
5
5
  API_BASE_URL = "https://discord.com/api/v10"
6
6
  # @return [String] The version of discorb.
7
- VERSION = "0.17.1"
7
+ VERSION = "0.19.0"
8
8
  # @return [Array<Integer>] The version array of discorb.
9
9
  VERSION_ARRAY = VERSION.split(".").map(&:to_i).freeze
10
10
  # @return [String] The user agent for the bot.
@@ -34,7 +34,7 @@ module Discorb
34
34
  @cache[id.to_s] = body
35
35
  @cache = @cache.sort_by(&@sort).to_h if @sort
36
36
  @cache.delete(@cache.keys[0]) if !@limit.nil? && @cache.size > @limit
37
- body
37
+ self
38
38
  end
39
39
 
40
40
  #
data/lib/discorb/embed.rb CHANGED
@@ -35,7 +35,7 @@ module Discorb
35
35
  #
36
36
  # @param [String] title The title of embed.
37
37
  # @param [String] description The description of embed.
38
- # @param [Discorb::Color] color The color of embed.
38
+ # @param [Discorb::Color, Integer] color The color of embed.
39
39
  # @param [String] url The url of embed.
40
40
  # @param [Time] timestamp The timestamp of embed.
41
41
  # @param [Discorb::Embed::Author] author The author field of embed.
@@ -60,13 +60,13 @@ module Discorb
60
60
  @description = description
61
61
  @url = url
62
62
  @timestamp = timestamp
63
- @color = color
63
+ @color = color && (color.is_a?(Color) ? color : Color.new(color))
64
64
  @author = author
65
65
  @fields = fields || []
66
66
  @footer = footer
67
67
  @image = image && (image.is_a?(String) ? Image.new(image) : image)
68
68
  @thumbnail = thumbnail && (thumbnail.is_a?(String) ? Thumbnail.new(thumbnail) : thumbnail)
69
- @type = "rich"
69
+ @type = :rich
70
70
  end
71
71
 
72
72
  #
@@ -113,6 +113,7 @@ module Discorb
113
113
  # @return [Hash] Converted embed.
114
114
  #
115
115
  def to_hash
116
+ # @type var ret: Hash[untyped, untyped]
116
117
  ret = { type: "rich" }
117
118
  ret[:title] = @title if @title
118
119
  ret[:description] = @description if @description
@@ -123,7 +124,7 @@ module Discorb
123
124
  ret[:image] = @image&.to_hash if @image
124
125
  ret[:thumbnail] = @thumbnail&.to_hash if @thumbnail
125
126
  ret[:author] = @author&.to_hash if @author
126
- ret[:fields] = @fields&.map { |f| f.to_hash } if @fields.any?
127
+ ret[:fields] = @fields&.map(&:to_hash) if @fields.any?
127
128
  ret
128
129
  end
129
130
 
data/lib/discorb/emoji.rb CHANGED
@@ -29,7 +29,7 @@ module Discorb
29
29
  attr_reader :roles
30
30
  # @return [Discorb::User] The user that created this emoji.
31
31
  attr_reader :user
32
- # @return [Boolean] Whether the emoji requires colons.
32
+ # @return [Discorb::Guild] The guild that owns this emoji.
33
33
  attr_reader :guild
34
34
  # @return [Boolean] whether the emoji is managed by integration (ex: Twitch).
35
35
  attr_reader :managed
@@ -121,7 +121,7 @@ module Discorb
121
121
  #
122
122
  # @return [Async::Task<self>] The deleted emoji.
123
123
  #
124
- def delete!(reason: nil)
124
+ def delete(reason: nil)
125
125
  Async do
126
126
  @client.http.request(
127
127
  Route.new("/guilds/#{@guild.id}/emojis/#{@id}", "//guilds/:guild_id/emojis/:emoji_id",
@@ -132,7 +132,7 @@ module Discorb
132
132
  end
133
133
  end
134
134
 
135
- alias destroy! delete!
135
+ alias destroy delete
136
136
 
137
137
  #
138
138
  # Converts the object to a hash.
@@ -247,7 +247,7 @@ module Discorb
247
247
  end
248
248
  raise ArgumentError, "Invalid skin tone: #{tone}" unless @skin_tone
249
249
 
250
- @name = EmojiTable::UNICODE_TO_DISCORD[name2]
250
+ @name = EmojiTable::UNICODE_TO_DISCORD[name2].first
251
251
  @value = name
252
252
  else
253
253
  raise ArgumentError, "No such emoji: #{name}"
data/lib/discorb/event.rb CHANGED
@@ -224,14 +224,14 @@ module Discorb
224
224
  #
225
225
  # @return [Async::Task<void>] The task.
226
226
  #
227
- def delete!
227
+ def delete
228
228
  Async do
229
229
  @client.http.request(Route.new("/guilds/#{@guild_id}/scheduled-events/#{@id}",
230
230
  "//guilds/:guild_id/scheduled-events/:scheduled_event_id", :delete)).wait
231
231
  end
232
232
  end
233
233
 
234
- alias destroy! delete!
234
+ alias destroy delete
235
235
 
236
236
  #
237
237
  # Fetches the event users.
@@ -13,5 +13,5 @@ informations = {
13
13
  }
14
14
 
15
15
  informations.each do |key, value|
16
- puts "\e[90m#{key.rjust(informations.keys.map(&:size).max)}:\e[m #{value}"
16
+ puts "\e[90m#{key.rjust(informations.keys.map(&:length).max)}:\e[m #{value}"
17
17
  end
@@ -220,11 +220,7 @@ def git_init
220
220
  create_file(".gitignore")
221
221
  iputs "Initializing git repository..."
222
222
  system "git init", chdir: $path
223
- system "git add .", chdir: $path
224
- system "git commit -m \"Initial commit\"", chdir: $path
225
- sputs "Initialized repository, use " \
226
- "\e[32mgit commit --amend -m '...'\e[92m" \
227
- " to change commit message of initial commit.\n"
223
+ sputs "Initialized repository.\n"
228
224
  end
229
225
 
230
226
  # @private
@@ -45,8 +45,6 @@ module Discorb
45
45
  # @param [Symbol] id The id of the event. Used to delete the event.
46
46
  # @param [Hash] metadata Other metadata.
47
47
  #
48
- # @return [Discorb::EventHandler] The event.
49
- #
50
48
  def event(event_name, id: nil, **metadata, &block)
51
49
  raise ArgumentError, "Event name must be a symbol" unless event_name.is_a?(Symbol)
52
50
  raise ArgumentError, "block must be given" unless block_given?
@@ -64,8 +62,6 @@ module Discorb
64
62
  # @param [Hash] metadata Other metadata.
65
63
  # @param [Proc] block The block to execute when the event is triggered.
66
64
  #
67
- # @return [Discorb::EventHandler] The event.
68
- #
69
65
  def once_event(event_name, id: nil, **metadata, &block)
70
66
  event(event_name, id: id, once: true, **metadata, &block)
71
67
  end
data/lib/discorb/flag.rb CHANGED
@@ -21,7 +21,7 @@ module Discorb
21
21
  def initialize(value)
22
22
  @value = value
23
23
  @values = {}
24
- self.class.bits.each_with_index do |(bn, bv), _i|
24
+ self.class.bits.each do |bn, bv|
25
25
  @values[bn] = value & (1 << bv) != 0
26
26
  end
27
27
  end
@@ -29,7 +29,7 @@ module Discorb
29
29
  #
30
30
  # Returns the value of the flag.
31
31
  #
32
- def method_missing(name, args = nil)
32
+ def method_missing(name, *_args, **_kwargs)
33
33
  if @values.key?(name.to_s.delete_suffix("?").to_sym)
34
34
  @values[name.to_s.delete_suffix("?").to_sym]
35
35
  else