discorb 0.18.1 → 0.19.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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +9 -0
  3. data/Gemfile +4 -4
  4. data/Rakefile +17 -22
  5. data/Steepfile +8 -6
  6. data/docs/events.md +2 -2
  7. data/docs/voice_events.md +6 -6
  8. data/lib/discorb/automod.rb +1 -1
  9. data/lib/discorb/channel/guild.rb +3 -3
  10. data/lib/discorb/channel/text.rb +3 -3
  11. data/lib/discorb/client.rb +4 -6
  12. data/lib/discorb/common.rb +1 -1
  13. data/lib/discorb/embed.rb +1 -1
  14. data/lib/discorb/emoji.rb +2 -2
  15. data/lib/discorb/event.rb +2 -2
  16. data/lib/discorb/gateway.rb +17 -7
  17. data/lib/discorb/guild.rb +4 -4
  18. data/lib/discorb/guild_template.rb +2 -2
  19. data/lib/discorb/integration.rb +2 -2
  20. data/lib/discorb/interaction/response.rb +83 -77
  21. data/lib/discorb/interaction/root.rb +136 -0
  22. data/lib/discorb/invite.rb +1 -1
  23. data/lib/discorb/message.rb +4 -4
  24. data/lib/discorb/modules.rb +2 -2
  25. data/lib/discorb/permission.rb +3 -1
  26. data/lib/discorb/role.rb +2 -2
  27. data/lib/discorb/shard.rb +1 -1
  28. data/lib/discorb/sticker.rb +2 -2
  29. data/lib/discorb/voice_state.rb +3 -3
  30. data/lib/discorb/webhook.rb +5 -5
  31. data/sig/discorb/activity.rbs +1 -0
  32. data/sig/discorb/allowed_mentions.rbs +1 -0
  33. data/sig/discorb/app_command/base.rbs +6 -0
  34. data/sig/discorb/application.rbs +4 -0
  35. data/sig/discorb/asset.rbs +2 -0
  36. data/sig/discorb/attachment.rbs +8 -0
  37. data/sig/discorb/audit_log.rbs +7 -0
  38. data/sig/discorb/automod.rbs +22 -5
  39. data/sig/discorb/avatar.rbs +1 -0
  40. data/sig/discorb/channel/base.rbs +8 -1
  41. data/sig/discorb/channel/category.rbs +1 -0
  42. data/sig/discorb/channel/container.rbs +4 -0
  43. data/sig/discorb/channel/stage.rbs +4 -0
  44. data/sig/discorb/channel/text.rbs +2 -2
  45. data/sig/discorb/channel/thread.rbs +11 -0
  46. data/sig/discorb/channel/voice.rbs +2 -0
  47. data/sig/discorb/client.rbs +21 -20
  48. data/sig/discorb/color.rbs +6 -0
  49. data/sig/discorb/component/base.rbs +1 -0
  50. data/sig/discorb/component/button.rbs +2 -0
  51. data/sig/discorb/component/select_menu.rbs +4 -0
  52. data/sig/discorb/component/text_input.rbs +1 -0
  53. data/sig/discorb/custom_emoji.rbs +5 -1
  54. data/sig/discorb/dictionary.rbs +2 -0
  55. data/sig/discorb/discord_model.rbs +2 -0
  56. data/sig/discorb/embed.rbs +7 -0
  57. data/sig/discorb/emoji.rbs +1 -0
  58. data/sig/discorb/event_handler.rbs +2 -1
  59. data/sig/discorb/extension.rbs +13 -12
  60. data/sig/discorb/flag.rbs +2 -0
  61. data/sig/discorb/gateway.rbs +5 -0
  62. data/sig/discorb/guild.rbs +6 -4
  63. data/sig/discorb/guild_template.rbs +1 -1
  64. data/sig/discorb/http.rbs +4 -1
  65. data/sig/discorb/image.rbs +2 -0
  66. data/sig/discorb/integration.rbs +1 -1
  67. data/sig/discorb/intents.rbs +4 -3
  68. data/sig/discorb/interaction/base.rbs +33 -0
  69. data/sig/discorb/interaction/message_component.rbs +1 -2
  70. data/sig/discorb/interaction/modal.rbs +1 -2
  71. data/sig/discorb/interaction/responder.rbs +49 -49
  72. data/sig/discorb/invite.rbs +1 -1
  73. data/sig/discorb/member.rbs +2 -0
  74. data/sig/discorb/message.rbs +6 -1
  75. data/sig/discorb/messageable.rbs +1 -4
  76. data/sig/discorb/partial_emoji.rbs +3 -0
  77. data/sig/discorb/permissions.rbs +7 -0
  78. data/sig/discorb/presence.rbs +2 -0
  79. data/sig/discorb/reaction.rbs +5 -1
  80. data/sig/discorb/role.rbs +7 -1
  81. data/sig/discorb/scheduled_event.rbs +2 -1
  82. data/sig/discorb/shard.rbs +2 -1
  83. data/sig/discorb/snowflake.rbs +2 -0
  84. data/sig/discorb/stage_instance.rbs +9 -3
  85. data/sig/discorb/sticker.rbs +1 -1
  86. data/sig/discorb/unicode_emoji.rbs +4 -0
  87. data/sig/discorb/user.rbs +2 -0
  88. data/sig/discorb/webhook.rbs +17 -6
  89. data/sig/discorb/welcome_screen.rbs +1 -0
  90. data/sig/override.rbs +2 -0
  91. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5d310d54f09cb9be975ba75c37a717b159f3f4b2996686a5f40b7b86329657ab
4
- data.tar.gz: 81ed8d1d40aa4bb851e018c56672e24d8346ee2c3544d44ebc48a5583e6b6b46
3
+ metadata.gz: 99a6cb7f4f4f1d7c657209570f1327f6a847b7d7db3fb031c645ca4b0a4464af
4
+ data.tar.gz: f207685f5153f73dba3c66f40aaf4ef100063f31746874d57c31b119f5fcb009
5
5
  SHA512:
6
- metadata.gz: feed366d2ae2614f6c08a891f697245304047a4a1447fd2e5cdbed17829aea950e4b8fb6677b70e993bd613c6be3f1db880061f4fa77024bae6ce4caaf11683c
7
- data.tar.gz: 5be8aa8414d67a58cf591f87b13b2ae5d0d8f17de8dc6399d9ef370967c79e39400596192e3ebb016934e36c69c2aae4dc19b0b0c4e86eb0903ddfb5e5495902
6
+ metadata.gz: bd641beb11497865a97e267ef1558d1f5162323713f623fcd5109e9e25a7bb41d25e1a59111b0c3b5dcbe43f77a54531973f5874b5d82927956a1ad5f1e4ea03
7
+ data.tar.gz: 8d25ed7b8604b59c4a4f3f8467a268472749ccbc010d216787091ea3da60e24e0ddde95add2dc30f6d40637650d19cd9ef22e54dc2141637ac2e96cd4d55ece1
data/Changelog.md CHANGED
@@ -4,6 +4,15 @@
4
4
 
5
5
  # Changelog
6
6
 
7
+ ## v0.19
8
+
9
+ ### v0.19.0
10
+
11
+ - Change!: All bang methods don't have bang anymore. (ex: `Message#delete!`)
12
+ - Add: Add `%a{pure}` annotation to rbs.
13
+ - Add: Add low level APIs to Interaction.
14
+ - Update: Update IDENTIFY key.
15
+
7
16
  ## v0.18
8
17
 
9
18
  ### v0.18.1
data/Gemfile CHANGED
@@ -18,7 +18,7 @@ gem "parallel_tests", "~> 3.8"
18
18
  gem "rspec", "~> 3.11"
19
19
 
20
20
  # Typecheck
21
- gem "steep", "~> 1.0"
21
+ gem "steep", "~> 1.1"
22
22
 
23
23
  # Other development tools
24
24
  gem "lefthook", "~> 0.7.7"
@@ -32,6 +32,6 @@ group :docs, optional: true do
32
32
  gem "rubyzip", "~> 2.3"
33
33
  gem "yard", "~> 0.9.26"
34
34
  end
35
-
36
- gem "syntax_tree", "~> 2.8"
37
- gem "syntax_tree-rbs", "~> 0.4.0"
35
+
36
+ gem "syntax_tree", "~> 2.8"
37
+ gem "syntax_tree-rbs", "~> 0.5.0"
data/Rakefile CHANGED
@@ -236,6 +236,7 @@ desc "Generate rbs file"
236
236
  namespace :rbs do
237
237
  desc "Generate event signature"
238
238
  task :event do
239
+ require "syntax_tree/rbs"
239
240
  client_rbs = File.read("sig/discorb/client.rbs")
240
241
  extension_rbs = File.read("sig/discorb/extension.rbs")
241
242
  event_document = File.read("./docs/events.md")
@@ -296,41 +297,35 @@ namespace :rbs do
296
297
  | (:#{event[:name]} event_name, ?id: Symbol?, **untyped metadata) { (#{sig}) -> void } -> void
297
298
  RBS
298
299
  end
300
+ event_sig << <<~RBS
301
+ | (Symbol event_name, ?id: Symbol?, **untyped metadata) { (*untyped) -> void } -> Discorb::EventHandler
302
+ RBS
303
+ event_lock_sig << <<~RBS
304
+ | (Symbol event, ?Integer? timeout) { (*untyped) -> boolish } -> Async::Task[untyped]
305
+ RBS
306
+ extension_sig << <<~RBS
307
+ | (Symbol event_name, ?id: Symbol?, **untyped metadata) { (*untyped) -> void } -> void
308
+ RBS
299
309
  event_sig.sub!("| ", " ").rstrip!
300
310
  event_lock_sig.sub!("| ", " ").rstrip!
301
311
  extension_sig.sub!("| ", " ").rstrip!
302
- res = client_rbs.gsub!(/\# marker: on\n(?:[\s\S]*?\n)?( +)\# endmarker: on\n/) do
303
- indent = Regexp.last_match(1)
304
- "# marker: on\n#{event_sig.gsub(/^/, "#{indent} ")}\n#{indent}# endmarker: on\n"
305
- end
312
+ res = client_rbs.gsub!(/(?<=def on:\n)(?:[\s\S]*?)(?=\n\n)/, event_sig)
306
313
  raise "Failed to generate Client#on" unless res
307
314
 
308
- res = client_rbs.gsub!(/\# marker: once\n(?:[\s\S]*?\n)?( +)\# endmarker: once\n/) do
309
- indent = Regexp.last_match(1)
310
- "# marker: once\n#{event_sig.gsub(/^/, "#{indent} ")}\n#{indent}# endmarker: once\n"
311
- end
315
+ res = client_rbs.gsub!(/(?<=def once:\n)(?:[\s\S]*?)(?=\n\n)/, event_sig)
312
316
  raise "Failed to generate Client#once" unless res
313
317
 
314
- res = client_rbs.gsub!(/\# marker: event_lock\n(?:[\s\S]*?\n)?( +)\# endmarker: event_lock\n/) do
315
- indent = Regexp.last_match(1)
316
- "# marker: event_lock\n#{event_lock_sig.gsub(/^/, "#{indent} ")}\n#{indent}# endmarker: event_lock\n"
317
- end
318
+ res = client_rbs.gsub!(/(?<=def event_lock:\n)(?:[\s\S]*?)(?=\n\n)/, event_lock_sig)
318
319
  raise "Failed to generate Client#event_lock" unless res
319
320
 
320
- res = extension_rbs.gsub!(/\# marker: event\n(?:[\s\S]*?\n)?( +)\# endmarker: event\n/) do
321
- indent = Regexp.last_match(1)
322
- "# marker: event\n#{extension_sig.gsub(/^/, "#{indent} ")}\n#{indent}# endmarker: event\n"
323
- end
321
+ res = extension_rbs.gsub!(/(?<=def event:\n)(?:[\s\S]*?)(?=\n\n)/, extension_sig)
324
322
  raise "Failed to generate Extension.event" unless res
325
323
 
326
- res = extension_rbs.gsub!(/\# marker: once_event\n(?:[\s\S]*?\n)?( +)\# endmarker: once_event\n/) do
327
- indent = Regexp.last_match(1)
328
- "# marker: once_event\n#{extension_sig.gsub(/^/, "#{indent} ")}\n#{indent}# endmarker: once_event\n"
329
- end
324
+ res = extension_rbs.gsub!(/(?<=def once_event:\n)(?:[\s\S]*?)(?=\n\n)/, extension_sig)
330
325
  raise "Failed to generate Extension.once_event" unless res
331
326
 
332
- File.write("sig/discorb/client.rbs", client_rbs, mode: "wb")
333
- File.write("sig/discorb/extension.rbs", extension_rbs, mode: "wb")
327
+ File.write("sig/discorb/client.rbs", SyntaxTree::RBS.format(client_rbs), mode: "wb")
328
+ File.write("sig/discorb/extension.rbs", SyntaxTree::RBS.format(extension_rbs), mode: "wb")
334
329
  end
335
330
 
336
331
  desc "Generate rbs file using sord"
data/Steepfile CHANGED
@@ -15,14 +15,16 @@ target :lib do
15
15
  config[D::Ruby::UnexpectedSuper] = nil
16
16
  config[D::Ruby::UnexpectedPositionalArgument] = nil
17
17
  config[D::Ruby::InsufficientPositionalArguments] = nil
18
+ config[D::Ruby::UnknownInstanceVariable] = nil
19
+ config[D::Ruby::UnknownGlobalVariable] = nil
18
20
  end
19
21
  end
20
22
 
21
- target :test do
22
- signature "sig"
23
- signature "examples/sig"
23
+ # target :test do
24
+ # signature "sig"
25
+ # signature "examples/sig"
24
26
 
25
- check "examples/**/*.rb"
27
+ # check "examples/**/*.rb"
26
28
 
27
- library "net-http", "timeout"
28
- end
29
+ # library "net-http", "timeout"
30
+ # end
data/docs/events.md CHANGED
@@ -563,9 +563,9 @@ Fires when a select menu is selected.
563
563
  | ------------- | -------------------------------------------------- | ----------------------- |
564
564
  | `interaction` | {Discorb::MessageComponentInteraction::SelectMenu} | The interaction object. |
565
565
 
566
- #### `form_submit(interaction)`
566
+ #### `modal_submit(interaction)`
567
567
 
568
- Fires when a form is submitted.
568
+ Fires when a modal is submitted.
569
569
 
570
570
  | Parameter | Type | Description |
571
571
  | ------------- | --------------------------- | ----------------------- |
data/docs/voice_events.md CHANGED
@@ -12,7 +12,7 @@ Fires when someone joins a voice channel.
12
12
 
13
13
  | Parameter | Type | Description |
14
14
  | --------- | --------------------- | ---------------------------------------- |
15
- | state | {Discorb::VoiceState} | The voice state of the user that joined. |
15
+ | `state` | {Discorb::VoiceState} | The voice state of the user that joined. |
16
16
 
17
17
  #### `voice_channel_disconnect(state)`
18
18
 
@@ -20,7 +20,7 @@ Fires when someone leaves a voice channel.
20
20
 
21
21
  | Parameter | Type | Description |
22
22
  | --------- | --------------------- | -------------------------------------- |
23
- | state | {Discorb::VoiceState} | The voice state of the user that left. |
23
+ | `state` | {Discorb::VoiceState} | The voice state of the user that left. |
24
24
 
25
25
  #### `voice_channel_move(before, after)`
26
26
 
@@ -28,8 +28,8 @@ Fires when someone moves to a different voice channel.
28
28
 
29
29
  | Parameter | Type | Description |
30
30
  | --------- | --------------------- | -------------------------------------------- |
31
- | before | {Discorb::VoiceState} | The voice state of the user before the move. |
32
- | after | {Discorb::VoiceState} | The voice state of the user after the move. |
31
+ | `before` | {Discorb::VoiceState} | The voice state of the user before the move. |
32
+ | `after` | {Discorb::VoiceState} | The voice state of the user after the move. |
33
33
 
34
34
  #### `voice_channel_update(before, after)`
35
35
 
@@ -37,8 +37,8 @@ Fires when a voice channel is connected, disconnected, or updated.
37
37
 
38
38
  | Parameter | Type | Description |
39
39
  | --------- | --------------------- | ---------------------------------- |
40
- | before | {Discorb::VoiceState} | The voice state before the update. |
41
- | after | {Discorb::VoiceState} | The voice state after the update. |
40
+ | `before` | {Discorb::VoiceState} | The voice state before the update. |
41
+ | `after` | {Discorb::VoiceState} | The voice state after the update. |
42
42
 
43
43
  ### Mute Events
44
44
 
@@ -154,7 +154,7 @@ module Discorb
154
154
  #
155
155
  # @return [Async::Task<void>] The task.
156
156
  #
157
- def delete!(reason: nil)
157
+ def delete(reason: nil)
158
158
  Async do
159
159
  @client.http.request(
160
160
  Route.new(
@@ -89,7 +89,7 @@ module Discorb
89
89
  #
90
90
  # @return [Async::Task<self>] The deleted channel.
91
91
  #
92
- def delete!(reason: nil)
92
+ def delete(reason: nil)
93
93
  Async do
94
94
  @client.http.request(Route.new(base_url.wait.to_s, "//webhooks/:webhook_id/:token", :delete), {},
95
95
  audit_log_reason: reason).wait
@@ -98,8 +98,8 @@ module Discorb
98
98
  end
99
99
  end
100
100
 
101
- alias close! delete!
102
- alias destroy! delete!
101
+ alias close delete
102
+ alias destroy delete
103
103
 
104
104
  #
105
105
  # Moves the channel to another position.
@@ -135,7 +135,7 @@ module Discorb
135
135
  #
136
136
  # @return [Async::Task<void>] The task.
137
137
  #
138
- def delete_messages!(*messages, force: false)
138
+ def delete_messages(*messages, force: false)
139
139
  Async do
140
140
  messages = messages.flatten
141
141
  unless force
@@ -156,8 +156,8 @@ module Discorb
156
156
  end
157
157
  end
158
158
 
159
- alias bulk_delete! delete_messages!
160
- alias destroy_messages! delete_messages!
159
+ alias bulk_delete delete_messages
160
+ alias destroy_messages delete_messages
161
161
 
162
162
  #
163
163
  # Follow the existing announcement channel.
@@ -473,9 +473,9 @@ module Discorb
473
473
  #
474
474
  # Stops the client.
475
475
  #
476
- def close!
476
+ def close
477
477
  if @shards.any?
478
- @shards.each_value(&:close!)
478
+ @shards.each_value(&:close)
479
479
  else
480
480
  @connection.send_close
481
481
  end
@@ -521,9 +521,7 @@ module Discorb
521
521
  setup_commands(token, guild_ids: guild_ids).wait
522
522
  clear_commands(token, ENV.fetch("DISCORB_SETUP_CLEAR_GUILDS", "").split(","))
523
523
  if ENV.fetch("DISCORB_SETUP_SCRIPT", nil) == "true"
524
- @events[:setup]&.each do |event|
525
- event.call
526
- end
524
+ @events[:setup]&.each(&:call)
527
525
  self.on_setup if respond_to? :on_setup
528
526
  end
529
527
  end
@@ -567,7 +565,7 @@ module Discorb
567
565
  Signal.trap(:SIGINT) do
568
566
  logger.info "SIGINT received, closing..."
569
567
  Signal.trap(:SIGINT, "DEFAULT")
570
- close!
568
+ close
571
569
  end
572
570
  if shards.nil?
573
571
  main_loop(nil)
@@ -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.18.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.
data/lib/discorb/embed.rb CHANGED
@@ -124,7 +124,7 @@ module Discorb
124
124
  ret[:image] = @image&.to_hash if @image
125
125
  ret[:thumbnail] = @thumbnail&.to_hash if @thumbnail
126
126
  ret[:author] = @author&.to_hash if @author
127
- ret[:fields] = @fields&.map { |f| f.to_hash } if @fields.any?
127
+ ret[:fields] = @fields&.map(&:to_hash) if @fields.any?
128
128
  ret
129
129
  end
130
130
 
data/lib/discorb/emoji.rb CHANGED
@@ -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.
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.
@@ -48,11 +48,21 @@ module Discorb
48
48
  alpn_protocols: Async::HTTP::Protocol::HTTP11.names,
49
49
  )
50
50
  begin
51
- self.connection = Async::WebSocket::Client.connect(
52
- endpoint,
53
- headers: [["User-Agent", Discorb::USER_AGENT]],
54
- handler: RawConnection,
55
- )
51
+ reconnect_count = 0
52
+ begin
53
+ self.connection = Async::WebSocket::Client.connect(
54
+ endpoint,
55
+ headers: [["User-Agent", Discorb::USER_AGENT]],
56
+ handler: RawConnection,
57
+ )
58
+ rescue Async::WebSocket::ProtocolError => e
59
+ raise if reconnect_count > 3
60
+
61
+ logger.info "Failed to connect to gateway, retrying...: #{e.message}"
62
+ reconnect_count += 1
63
+ sleep 2 ** reconnect_count
64
+ retry
65
+ end
56
66
  con = self.connection
57
67
  zlib_stream = Zlib::Inflate.new(Zlib::MAX_WBITS)
58
68
  buffer = +""
@@ -82,7 +92,7 @@ module Discorb
82
92
  IOError => e
83
93
  next if @status == :closed
84
94
 
85
- logger.error "Gateway connection closed accidentally: #{e.class}: #{e.message}"
95
+ logger.info "Gateway connection closed, reconnecting: #{e.class}: #{e.message}"
86
96
  con.force_close
87
97
  connect_gateway(true)
88
98
  next
@@ -163,7 +173,7 @@ module Discorb
163
173
  token: @token,
164
174
  intents: @intents.value,
165
175
  compress: false,
166
- properties: { "$os" => RUBY_PLATFORM, "$browser" => "discorb", "$device" => "discorb" },
176
+ properties: { "os" => RUBY_PLATFORM, "browser" => "discorb", "device" => "discorb" },
167
177
  }
168
178
  payload[:shard] = [shard_id, @shard_count] if shard_id
169
179
  payload[:presence] = @identify_presence if @identify_presence
data/lib/discorb/guild.rb CHANGED
@@ -179,7 +179,7 @@ module Discorb
179
179
  #
180
180
  # @return [Async::Task<void>] The task.
181
181
  #
182
- def leave!
182
+ def leave
183
183
  Async do
184
184
  @client.http.request(Route.new("/users/@me/guilds/#{@id}", "//users/@me/guilds/:guild_id", :delete)).wait
185
185
  @client.guilds.delete(@id)
@@ -1188,7 +1188,7 @@ module Discorb
1188
1188
  name,
1189
1189
  trigger_type,
1190
1190
  actions,
1191
- event_type = :send_message,
1191
+ event_type = :message_send,
1192
1192
  enabled: false,
1193
1193
  exempt_roles: [],
1194
1194
  exempt_channels: [],
@@ -1203,7 +1203,7 @@ module Discorb
1203
1203
  trigger_type: Discorb::AutoModRule::TRIGGER_TYPES.key(trigger_type),
1204
1204
  metadata: {
1205
1205
  keyword_filter: keyword_filter,
1206
- presets: Discorb::AutoModRule::PRESET_TYPES.key(presets),
1206
+ presets: presets && Discorb::AutoModRule::PRESET_TYPES.key(presets),
1207
1207
  },
1208
1208
  actions: actions.map(&:to_hash),
1209
1209
  enabled: enabled,
@@ -1381,7 +1381,7 @@ module Discorb
1381
1381
  #
1382
1382
  # @return [String] The url of the banner.
1383
1383
  #
1384
- def banner(guild_id, style: "banner")
1384
+ def banner(guild_id, style: :banner)
1385
1385
  "#{Discorb::API_BASE_URL}/guilds/#{guild_id}/widget.png&style=#{style}"
1386
1386
  end
1387
1387
  end
@@ -93,14 +93,14 @@ module Discorb
93
93
  #
94
94
  # @return [Async::Task<void>] The task.
95
95
  #
96
- def delete!
96
+ def delete
97
97
  Async do
98
98
  @client.http.request(Route.new("/guilds/#{@source_guild_id}/templates/#{@code}",
99
99
  "//guilds/:guild_id/templates/:code", :delete)).wait
100
100
  end
101
101
  end
102
102
 
103
- alias destroy! delete!
103
+ alias destroy delete
104
104
 
105
105
  #
106
106
  # Represents a guild in guild template.
@@ -72,7 +72,7 @@ module Discorb
72
72
  #
73
73
  # @return [Async::Task<void>] The task.
74
74
  #
75
- def delete!(reason: nil)
75
+ def delete(reason: nil)
76
76
  Async do
77
77
  @client.http.request(
78
78
  Route.new("/guilds/#{@guild}/integrations/#{@id}", "//guilds/:guild_id/integrations/:integration_id",
@@ -81,7 +81,7 @@ module Discorb
81
81
  end
82
82
  end
83
83
 
84
- alias destroy! delete!
84
+ alias destroy delete
85
85
 
86
86
  private
87
87
 
@@ -125,86 +125,86 @@ module Discorb
125
125
  ret
126
126
  end
127
127
  end
128
+ end
128
129
 
130
+ #
131
+ # Represents of a callback message of interaction.
132
+ #
133
+ class CallbackMessage
129
134
  #
130
- # Represents of a callback message of interaction.
131
- #
132
- class CallbackMessage
133
- #
134
- # Initializes a new instance of CallbackMessage.
135
- # @private
136
- #
137
- # @param [Client] client The client.
138
- # @param [Hash] data The payload.
139
- # @param [String] application_id The application ID.
140
- # @param [String] token The token.
141
- #
142
- def initialize(client, data, application_id, token)
143
- @client = client
144
- @data = data
145
- @application_id = application_id
146
- @token = token
147
- end
135
+ # Initializes a new instance of CallbackMessage.
136
+ # @private
137
+ #
138
+ # @param [Client] client The client.
139
+ # @param [Hash] data The payload.
140
+ # @param [String] application_id The application ID.
141
+ # @param [String] token The token.
142
+ #
143
+ def initialize(client, data, application_id, token)
144
+ @client = client
145
+ @data = data
146
+ @application_id = application_id
147
+ @token = token
148
+ end
148
149
 
149
- #
150
- # Edits the callback message.
151
- # @async
152
- # @macro edit
153
- #
154
- # @param [String] content The new content of the message.
155
- # @param [Discorb::Embed] embed The new embed of the message.
156
- # @param [Array<Discorb::Embed>] embeds The new embeds of the message.
157
- # @param [Array<Discorb::Attachment>] attachments The attachments to remain.
158
- # @param [Discorb::Attachment] file The file to send.
159
- # @param [Array<Discorb::Attachment>] files The files to send.
160
- #
161
- # @return [Async::Task<void>] The task.
162
- #
163
- def edit(
164
- content = Discorb::Unset,
165
- embed: Discorb::Unset, embeds: Discorb::Unset,
166
- file: Discorb::Unset, files: Discorb::Unset,
167
- attachments: Discorb::Unset
168
- )
169
- Async do
170
- payload = {}
171
- payload[:content] = content if content != Discorb::Unset
172
- payload[:embeds] = embed ? [embed.to_hash] : [] if embed != Discorb::Unset
173
- payload[:embeds] = embeds.map(&:to_hash) if embeds != Discorb::Unset
174
- payload[:attachments] = attachments.map(&:to_hash) if attachments != Discorb::Unset
175
- files = [file] if file != Discorb::Unset
176
- files = [] if files == Discorb::Unset
177
- @client.http.multipart_request(
178
- Route.new(
179
- "/webhooks/#{@application_id}/#{@token}/messages/@original",
180
- "//webhooks/:webhook_id/:token/messages/@original",
181
- :patch
182
- ),
183
- payload,
184
- files,
185
- ).wait
186
- end
150
+ #
151
+ # Edits the callback message.
152
+ # @async
153
+ # @macro edit
154
+ #
155
+ # @param [String] content The new content of the message.
156
+ # @param [Discorb::Embed] embed The new embed of the message.
157
+ # @param [Array<Discorb::Embed>] embeds The new embeds of the message.
158
+ # @param [Array<Discorb::Attachment>] attachments The attachments to remain.
159
+ # @param [Discorb::Attachment] file The file to send.
160
+ # @param [Array<Discorb::Attachment>] files The files to send.
161
+ #
162
+ # @return [Async::Task<void>] The task.
163
+ #
164
+ def edit(
165
+ content = Discorb::Unset,
166
+ embed: Discorb::Unset, embeds: Discorb::Unset,
167
+ file: Discorb::Unset, files: Discorb::Unset,
168
+ attachments: Discorb::Unset
169
+ )
170
+ Async do
171
+ payload = {}
172
+ payload[:content] = content if content != Discorb::Unset
173
+ payload[:embeds] = embed ? [embed.to_hash] : [] if embed != Discorb::Unset
174
+ payload[:embeds] = embeds.map(&:to_hash) if embeds != Discorb::Unset
175
+ payload[:attachments] = attachments.map(&:to_hash) if attachments != Discorb::Unset
176
+ files = [file] if file != Discorb::Unset
177
+ files = [] if files == Discorb::Unset
178
+ @client.http.multipart_request(
179
+ Route.new(
180
+ "/webhooks/#{@application_id}/#{@token}/messages/@original",
181
+ "//webhooks/:webhook_id/:token/messages/@original",
182
+ :patch
183
+ ),
184
+ payload,
185
+ files,
186
+ ).wait
187
187
  end
188
+ end
188
189
 
189
- alias modify edit
190
+ alias modify edit
190
191
 
191
- #
192
- # Deletes the callback message.
193
- # @async
194
- # @note This will fail if the message is ephemeral.
195
- #
196
- # @return [Async::Task<void>] The task.
197
- #
198
- def delete!
199
- Async do
200
- @client.http.request(Route.new("/webhooks/#{@application_id}/#{@token}/messages/@original",
201
- "//webhooks/:webhook_id/:token/messages/@original", :delete)).wait
202
- end
192
+ #
193
+ # Deletes the callback message.
194
+ # @async
195
+ # @note This will fail if the message is ephemeral.
196
+ #
197
+ # @return [Async::Task<void>] The task.
198
+ #
199
+ def delete
200
+ Async do
201
+ @client.http.request(Route.new("/webhooks/#{@application_id}/#{@token}/messages/@original",
202
+ "//webhooks/:webhook_id/:token/messages/@original", :delete)).wait
203
203
  end
204
+ end
204
205
 
205
- def inspect
206
- "#<#{self.class.name} application_id=#{@application_id}"
207
- end
206
+ def inspect
207
+ "#<#{self.class.name} application_id=#{@application_id}"
208
208
  end
209
209
  end
210
210
 
@@ -313,11 +313,17 @@ module Discorb
313
313
  # @return [Async::Task<void>] The task.
314
314
  #
315
315
  def show_modal(title, custom_id, components)
316
- payload = { title: title, custom_id: custom_id, components: Component.to_payload(components) }
317
- @client.http.request(
318
- Route.new("/interactions/#{@id}/#{@token}/callback", "//interactions/:interaction_id/:token/callback", :post),
319
- { type: 9, data: payload }
320
- ).wait
316
+ Async do
317
+ payload = { title: title, custom_id: custom_id, components: Component.to_payload(components) }
318
+ @client.http.request(
319
+ Route.new(
320
+ "/interactions/#{@id}/#{@token}/callback",
321
+ "//interactions/:interaction_id/:token/callback",
322
+ :post
323
+ ),
324
+ { type: 9, data: payload }
325
+ ).wait
326
+ end
321
327
  end
322
328
  end
323
329