discorb 0.17.1 → 0.18.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 (141) 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 +10 -0
  5. data/Gemfile +6 -0
  6. data/Rakefile +210 -98
  7. data/Steepfile +28 -0
  8. data/docs/events.md +42 -6
  9. data/docs/tutorial.md +7 -7
  10. data/docs/voice_events.md +2 -2
  11. data/examples/commands/message.rb +12 -7
  12. data/examples/commands/permission.rb +2 -1
  13. data/examples/commands/slash.rb +23 -19
  14. data/examples/commands/user.rb +15 -12
  15. data/examples/components/authorization_button.rb +2 -1
  16. data/examples/components/select_menu.rb +4 -1
  17. data/examples/extension/main.rb +1 -0
  18. data/examples/extension/message_expander.rb +1 -0
  19. data/examples/sig/commands/message.rbs +5 -0
  20. data/examples/simple/eval.rb +1 -0
  21. data/examples/simple/ping_pong.rb +1 -0
  22. data/examples/simple/rolepanel.rb +16 -5
  23. data/examples/simple/shard.rb +2 -1
  24. data/examples/simple/wait_for_message.rb +3 -0
  25. data/exe/discorb +3 -3
  26. data/lib/discorb/allowed_mentions.rb +1 -1
  27. data/lib/discorb/app_command/command.rb +12 -13
  28. data/lib/discorb/app_command/handler.rb +20 -6
  29. data/lib/discorb/audit_logs.rb +6 -2
  30. data/lib/discorb/automod.rb +269 -0
  31. data/lib/discorb/channel/guild.rb +2 -1
  32. data/lib/discorb/channel/stage.rb +1 -1
  33. data/lib/discorb/channel/text.rb +11 -20
  34. data/lib/discorb/channel/thread.rb +15 -11
  35. data/lib/discorb/client.rb +12 -10
  36. data/lib/discorb/color.rb +37 -60
  37. data/lib/discorb/common.rb +1 -1
  38. data/lib/discorb/dictionary.rb +1 -1
  39. data/lib/discorb/embed.rb +4 -3
  40. data/lib/discorb/emoji.rb +2 -2
  41. data/lib/discorb/exe/about.rb +1 -1
  42. data/lib/discorb/exe/new.rb +1 -5
  43. data/lib/discorb/extension.rb +0 -4
  44. data/lib/discorb/flag.rb +2 -2
  45. data/lib/discorb/gateway.rb +21 -582
  46. data/lib/discorb/gateway_events.rb +638 -0
  47. data/lib/discorb/guild.rb +136 -17
  48. data/lib/discorb/guild_template.rb +1 -1
  49. data/lib/discorb/http.rb +47 -25
  50. data/lib/discorb/intents.rb +27 -18
  51. data/lib/discorb/interaction/command.rb +14 -10
  52. data/lib/discorb/interaction/response.rb +74 -14
  53. data/lib/discorb/member.rb +3 -3
  54. data/lib/discorb/message.rb +13 -11
  55. data/lib/discorb/message_meta.rb +2 -3
  56. data/lib/discorb/modules.rb +3 -2
  57. data/lib/discorb/presence.rb +4 -2
  58. data/lib/discorb/reaction.rb +2 -2
  59. data/lib/discorb/role.rb +1 -1
  60. data/lib/discorb/sticker.rb +3 -3
  61. data/lib/discorb/user.rb +2 -2
  62. data/lib/discorb/voice_state.rb +5 -5
  63. data/lib/discorb/webhook.rb +15 -6
  64. data/lib/discorb.rb +2 -2
  65. data/rbs_collection.lock.yaml +88 -96
  66. data/rbs_collection.yaml +21 -17
  67. data/sig/async.rbs +11 -5
  68. data/sig/discorb/activity.rbs +23 -0
  69. data/sig/discorb/allowed_mentions.rbs +44 -0
  70. data/sig/discorb/app_command/base.rbs +282 -0
  71. data/sig/discorb/app_command/handler.rbs +171 -0
  72. data/sig/discorb/application.rbs +142 -0
  73. data/sig/discorb/asset.rbs +32 -0
  74. data/sig/discorb/attachment.rbs +91 -0
  75. data/sig/discorb/audit_log.rbs +231 -0
  76. data/sig/discorb/automod.rbs +128 -0
  77. data/sig/discorb/avatar.rbs +26 -0
  78. data/sig/discorb/channel/base.rbs +179 -0
  79. data/sig/discorb/channel/category.rbs +56 -0
  80. data/sig/discorb/channel/container.rbs +29 -0
  81. data/sig/discorb/channel/dm.rbs +14 -0
  82. data/sig/discorb/channel/news.rbs +20 -0
  83. data/sig/discorb/channel/stage.rbs +77 -0
  84. data/sig/discorb/channel/text.rbs +158 -0
  85. data/sig/discorb/channel/thread.rbs +185 -0
  86. data/sig/discorb/channel/voice.rbs +41 -0
  87. data/sig/discorb/client.rbs +2495 -0
  88. data/sig/discorb/color.rbs +142 -0
  89. data/sig/discorb/component/base.rbs +28 -0
  90. data/sig/discorb/component/button.rbs +65 -0
  91. data/sig/discorb/component/select_menu.rbs +107 -0
  92. data/sig/discorb/component/text_input.rbs +69 -0
  93. data/sig/discorb/connectable.rbs +8 -0
  94. data/sig/discorb/custom_emoji.rbs +90 -0
  95. data/sig/discorb/dictionary.rbs +85 -0
  96. data/sig/discorb/discord_model.rbs +15 -0
  97. data/sig/discorb/embed.rbs +279 -0
  98. data/sig/discorb/emoji.rbs +13 -0
  99. data/sig/discorb/error.rbs +73 -0
  100. data/sig/discorb/event_handler.rbs +27 -0
  101. data/sig/discorb/extension.rbs +1734 -0
  102. data/sig/discorb/flag.rbs +72 -0
  103. data/sig/discorb/gateway.rbs +481 -0
  104. data/sig/discorb/guild.rbs +870 -0
  105. data/sig/discorb/guild_template.rbs +174 -0
  106. data/sig/discorb/http.rbs +147 -0
  107. data/sig/discorb/image.rbs +20 -0
  108. data/sig/discorb/integration.rbs +118 -0
  109. data/sig/discorb/intents.rbs +97 -0
  110. data/sig/discorb/interaction/autocomplete.rbs +9 -0
  111. data/sig/discorb/interaction/base.rbs +66 -0
  112. data/sig/discorb/interaction/command.rbs +66 -0
  113. data/sig/discorb/interaction/message_component.rbs +140 -0
  114. data/sig/discorb/interaction/modal.rbs +50 -0
  115. data/sig/discorb/interaction/responder.rbs +157 -0
  116. data/sig/discorb/invite.rbs +86 -0
  117. data/sig/discorb/member.rbs +187 -0
  118. data/sig/discorb/message.rbs +469 -0
  119. data/sig/discorb/messageable.rbs +153 -0
  120. data/sig/discorb/partial_emoji.rbs +35 -0
  121. data/sig/discorb/permissions.rbs +149 -0
  122. data/sig/discorb/presence.rbs +237 -0
  123. data/sig/discorb/reaction.rbs +33 -0
  124. data/sig/discorb/role.rbs +145 -0
  125. data/sig/discorb/scheduled_event.rbs +148 -0
  126. data/sig/discorb/shard.rbs +62 -0
  127. data/sig/discorb/snowflake.rbs +56 -0
  128. data/sig/discorb/stage_instance.rbs +63 -0
  129. data/sig/discorb/sticker.rbs +116 -0
  130. data/sig/discorb/system_channel_flag.rbs +17 -0
  131. data/sig/discorb/unicode_emoji.rbs +49 -0
  132. data/sig/discorb/user.rbs +93 -0
  133. data/sig/discorb/utils.rbs +8 -0
  134. data/sig/discorb/voice_region.rbs +30 -0
  135. data/sig/discorb/voice_state.rbs +71 -0
  136. data/sig/discorb/webhook.rbs +327 -0
  137. data/sig/discorb/welcome_screen.rbs +78 -0
  138. data/sig/discorb.rbs +5 -8661
  139. data/sig/manifest.yaml +3 -0
  140. data/sig/override.rbs +19 -0
  141. metadata +80 -3
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -16,27 +17,30 @@ client.once :standby do
16
17
  puts "Logged in as #{client.user}"
17
18
  end
18
19
 
19
- client.slash({
20
- default: "greet",
21
- ja: "挨拶",
22
- }, {
23
- default: "Bot greets. Cute OwO",
24
- ja: "Botが挨拶します。かわいいね",
25
- }, {
26
- "name" => {
27
- name_localizations: {
28
- ja: "名前",
29
- },
30
- description: {
31
- default: "The name to greet.",
32
- ja: "挨拶する人の名前。",
20
+ client.slash(
21
+ {
22
+ default: "greet",
23
+ ja: "挨拶",
24
+ }, {
25
+ default: "Bot greets. Cute OwO",
26
+ ja: "Botが挨拶します。かわいいね",
27
+ }, {
28
+ "name" => {
29
+ name_localizations: {
30
+ ja: "名前",
31
+ },
32
+ description: {
33
+ default: "The name to greet.",
34
+ ja: "挨拶する人の名前。",
35
+ },
36
+ type: :string,
37
+ optional: true,
33
38
  },
34
- type: :string,
35
- optional: true,
36
- },
37
- }) do |interaction, name|
39
+ }
40
+ ) do |interaction, name|
38
41
  interaction.post(
39
- format((localizations[:localized][:text][interaction.locale] || localizations[:localized][:text][:en]), name || interaction.target.to_s_user),
42
+ format((localizations[:localized][:text][interaction.locale] || localizations[:localized][:text][:en]),
43
+ name || interaction.user.to_s),
40
44
  ephemeral: true,
41
45
  )
42
46
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  localizations = {
@@ -24,26 +25,28 @@ client.once :standby do
24
25
  puts "Logged in as #{client.user}"
25
26
  end
26
27
 
27
- client.user_command({
28
- default: "info",
29
- ja: "詳細",
30
- }) do |interaction|
28
+ client.user_command(
29
+ {
30
+ default: "info",
31
+ ja: "詳細",
32
+ }
33
+ ) do |interaction, user|
31
34
  field_name = localizations[:info][:fields][interaction.locale] || localizations[:info][:fields][:en]
32
35
  interaction.post(
33
36
  embed: Discorb::Embed.new(
34
- format((localizations[:info][:title][interaction.locale] || localizations[:info][:title][:en]), interaction.target.to_s_user),
37
+ format((localizations[:info][:title][interaction.locale] || localizations[:info][:title][:en]),
38
+ user.to_s),
35
39
  fields: [
36
- Discorb::Embed::Field.new(field_name[0], interaction.target.to_s_user),
37
- Discorb::Embed::Field.new(field_name[1], interaction.target.id),
40
+ Discorb::Embed::Field.new(field_name[0], user.to_s),
41
+ Discorb::Embed::Field.new(field_name[1], user.id),
38
42
  Discorb::Embed::Field.new(
39
43
  field_name[2],
40
- (localizations[:info][:yn][interaction.locale] || localizations[:info][:yn][:en])[interaction.target.bot? ? 0 : 1]
44
+ (localizations[:info][:yn][locale] || localizations[:info][:yn][:en])[user.bot? ? 0 : 1]
41
45
  ),
42
- Discorb::Embed::Field.new(field_name[3], interaction.target.joined_at.to_df("F")),
43
- Discorb::Embed::Field.new(field_name[4], interaction.target.created_at.to_df("F")),
46
+ Discorb::Embed::Field.new(field_name[3], user.joined_at.to_df("F")),
47
+ Discorb::Embed::Field.new(field_name[4], user.created_at.to_df("F")),
44
48
  ],
45
- thumbnail: interaction.target.avatar&.url,
46
-
49
+ thumbnail: user.avatar&.url,
47
50
  ), ephemeral: true,
48
51
  )
49
52
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -36,7 +37,7 @@ end
36
37
  client.on :button_click do |response|
37
38
  if response.custom_id.start_with?("auth:")
38
39
  id = response.custom_id.delete_prefix("auth:")
39
- response.fired_by.add_role(id).wait
40
+ response.user.add_role(id).wait
40
41
  response.post("You got your role!\nHere's your role: <@&#{id}>", ephemeral: true)
41
42
  end
42
43
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -41,7 +42,9 @@ client.on :message do |message|
41
42
  next if message.author.bot?
42
43
  next unless message.content == "!ruby"
43
44
 
44
- options = SECTIONS.map.with_index { |section, i| Discorb::SelectMenu::Option.new("Page #{i + 1}", "sections:#{i}", description: section[0]) }
45
+ options = SECTIONS.map.with_index do |section, i|
46
+ Discorb::SelectMenu::Option.new("Page #{i + 1}", "sections:#{i}", description: section[0])
47
+ end
45
48
  message.channel.post(
46
49
  "Select a section", components: [Discorb::SelectMenu.new("sections", options)],
47
50
  )
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
  require_relative "message_expander"
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  #
@@ -0,0 +1,5 @@
1
+ class Object
2
+ def build_embed_from_message: (Discorb::Message message) -> Discorb::Embed
3
+
4
+ def bookmark_channel: (Discorb::Guild guild) -> Discorb::TextChannel?
5
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
  intents = Discorb::Intents.new
4
5
  intents.members = true
6
+
5
7
  client = Discorb::Client.new(intents: intents)
6
8
 
7
9
  def convert_role(guild, string)
@@ -15,6 +17,8 @@ client.once :standby do
15
17
  end
16
18
 
17
19
  client.on :reaction_add do |event|
20
+ next unless event.guild
21
+ next unless event.member
18
22
  next unless event.emoji.value.end_with?(0x0000fe0f.chr("utf-8") + 0x000020e3.chr("utf-8"))
19
23
  next if event.member.bot?
20
24
 
@@ -31,6 +35,7 @@ end
31
35
 
32
36
  client.on :reaction_remove do |event|
33
37
  next unless event.emoji.value.end_with?(0x0000fe0f.chr("utf-8") + 0x000020e3.chr("utf-8"))
38
+ next unless event.member
34
39
  next if event.member.bot?
35
40
 
36
41
  msg = event.fetch_message.wait
@@ -49,15 +54,21 @@ client.on :message do |message|
49
54
  next if message.author.bot?
50
55
 
51
56
  message.reply("Too many roles.") if message.content.split.length > 10
52
- roles = message.content.delete_prefix("/rp ").split.map.with_index { |raw_role, index| [index, convert_role(message.guild, raw_role), raw_role] }
57
+ roles = message.content.delete_prefix("/rp ").split.map.with_index do |raw_role, index|
58
+ [index, convert_role(message.guild, raw_role), raw_role]
59
+ end
53
60
  if (convert_fails = roles.filter { |r| r[1].nil? }).length.positive?
54
61
  message.reply("#{convert_fails.map { |r| r[2] }.join(", ")} is not a role.")
55
62
  next
56
63
  end
57
- rp_msg = message.channel.post(embed: Discorb::Embed.new(
58
- "Role panel",
59
- roles.map.with_index(1) { |r, index| "#{index}\ufe0f\u20e3#{r[1].mention}" }.join("\n")
60
- )).wait
64
+ rp_msg = message.channel.post(
65
+ embed: Discorb::Embed.new(
66
+ "Role panel",
67
+ roles.map.with_index(1) do |r, index|
68
+ "#{index}\ufe0f\u20e3#{r[1].mention}"
69
+ end.join("\n")
70
+ ),
71
+ ).wait
61
72
  1.upto(roles.length).each do |i|
62
73
  rp_msg.add_reaction(Discorb::UnicodeEmoji["#{i}\ufe0f\u20e3"]).wait
63
74
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
- client = Discorb::Client.new(log: Logger.new($stdout))
5
+ client = Discorb::Client.new(logger: Logger.new($stderr))
5
6
 
6
7
  client.once :standby do
7
8
  puts "Logged in as #{client.user}"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "discorb"
3
4
 
4
5
  client = Discorb::Client.new
@@ -12,6 +13,8 @@ client.on :message do |message|
12
13
  next unless message.content == "!quiz"
13
14
 
14
15
  operator = %i[+ - *].sample
16
+ next unless operator
17
+
15
18
  num1 = rand(1..10)
16
19
  num2 = rand(1..10)
17
20
 
data/exe/discorb CHANGED
@@ -40,8 +40,8 @@ require "bundler/setup" if options[:bundler]
40
40
 
41
41
  command = ARGV.shift
42
42
 
43
- begin
44
- require "discorb/exe/#{command}"
45
- rescue LoadError
43
+ unless $LOAD_PATH.resolve_feature_path("discorb/exe/#{command}.rb")
46
44
  warn "Unknown subcommand: #{command}"
45
+ abort
47
46
  end
47
+ require "discorb/exe/#{command}"
@@ -23,7 +23,7 @@ module Discorb
23
23
  # @param [Boolean] replied_user Whether to ping the user that sent the message to reply.
24
24
  #
25
25
  def initialize(everyone: nil, roles: nil, users: nil, replied_user: nil)
26
- @everyone = everyone
26
+ @everyone = !everyone.nil?
27
27
  @roles = roles
28
28
  @users = users
29
29
  @replied_user = replied_user
@@ -7,7 +7,7 @@ module Discorb
7
7
  # @abstract
8
8
  #
9
9
  class Command < DiscordModel
10
- # @return [Hash{Symbol => String}] The name of the command.
10
+ # @return [Hash{String => String}] The name of the command.
11
11
  attr_reader :name
12
12
  # @return [Array<#to_s>] The guild ids that the command is enabled in.
13
13
  attr_reader :guild_ids
@@ -35,13 +35,13 @@ module Discorb
35
35
  # @private
36
36
  #
37
37
  # @param [String, Hash{Symbol => String}] name The name of the command.
38
- # @param [Array<#to_s>] guild_ids The guild ids that the command is enabled in.
38
+ # @param [Array<#to_s>, false, nil] guild_ids The guild ids that the command is enabled in.
39
39
  # @param [Proc] block The block of the command.
40
- # @param [:chat_input, :user, :message] type The type of the command.
40
+ # @param [Integer] type The type of the command.
41
41
  # @param [Boolean] dm_permission Whether the command is enabled in DMs.
42
42
  # @param [Discorb::Permission] default_permission The default permission of the command.
43
43
  #
44
- def initialize(name, guild_ids, block, type, dm_permission = nil, default_permission = nil)
44
+ def initialize(name, guild_ids, block, type, dm_permission = true, default_permission = nil) # rubocop:disable Style/OptionalBooleanParameter
45
45
  @name = name.is_a?(String) ? { "default" => name } : ApplicationCommand.modify_localization_hash(name)
46
46
  @guild_ids = guild_ids&.map(&:to_s)
47
47
  @block = block
@@ -100,7 +100,7 @@ module Discorb
100
100
  # @param [Hash{String => Hash}] options The options of the command.
101
101
  # @param [Array<#to_s>] guild_ids The guild ids that the command is enabled in.
102
102
  # @param [Proc] block The block of the command.
103
- # @param [:chat_input, :user, :message] type The type of the command.
103
+ # @param [Integer] type The type of the command.
104
104
  # @param [Discorb::ApplicationCommand::Command, nil] parent The parent command.
105
105
  # @param [Boolean] dm_permission Whether the command is enabled in DMs.
106
106
  # @param [Discorb::Permission] default_permission The default permission of the command.
@@ -215,7 +215,7 @@ module Discorb
215
215
  class GroupCommand < Command
216
216
  # @return [Array<Discorb::ApplicationCommand::Command>] The subcommands of the command.
217
217
  attr_reader :commands
218
- # @return [String] The description of the command.
218
+ # @return [Hash{String => String}] The description of the command.
219
219
  attr_reader :description
220
220
 
221
221
  #
@@ -225,13 +225,12 @@ module Discorb
225
225
  # @param [String, Hash{Symbol => String}] name The name of the command.
226
226
  # @param [String, Hash{Symbol => String}] description The description of the command.
227
227
  # @param [Array<#to_s>] guild_ids The guild ids that the command is enabled in.
228
- # @param [:chat_input, :user, :message] type The type of the command.
229
228
  # @param [Discorb::Client] client The client of the command.
230
229
  # @param [Boolean] dm_permission Whether the command is enabled in DMs.
231
230
  # @param [Discorb::Permission] default_permission The default permission of the command.
232
231
  #
233
- def initialize(name, description, guild_ids, type, client, dm_permission, default_permission)
234
- super(name, guild_ids, block, type, dm_permission, default_permission)
232
+ def initialize(name, description, guild_ids, client, dm_permission, default_permission)
233
+ super(name, guild_ids, block, 1, dm_permission, default_permission)
235
234
  @description = if description.is_a?(String)
236
235
  {
237
236
  "default" => description,
@@ -279,9 +278,9 @@ module Discorb
279
278
  #
280
279
  # @see file:docs/application_command.md Application Commands
281
280
  #
282
- def group(command_name, description, &block)
283
- command = Discorb::ApplicationCommand::Command::SubcommandGroup.new(command_name, description, @name, @client)
284
- command.then(&block) if block_given?
281
+ def group(command_name, description)
282
+ command = Discorb::ApplicationCommand::Command::SubcommandGroup.new(command_name, description, self, @client)
283
+ yield command if block_given?
285
284
  @commands << command
286
285
  command
287
286
  end
@@ -365,7 +364,7 @@ module Discorb
365
364
  # @param [Discorb::ApplicationCommand::Command::GroupCommand] parent The parent command.
366
365
  # @param [Discorb::Client] client The client.
367
366
  def initialize(name, description, parent, client)
368
- super(name, description, [], 1, client, nil, nil)
367
+ super(name, description, [], client, nil, nil)
369
368
 
370
369
  @commands = []
371
370
  @parent = parent
@@ -6,6 +6,8 @@ module Discorb
6
6
  # Module to handle application commands.
7
7
  #
8
8
  module Handler
9
+ # @type instance: Discorb::Client
10
+
9
11
  #
10
12
  # Add new top-level command.
11
13
  #
@@ -96,14 +98,20 @@ module Discorb
96
98
  # @see file:docs/application_command.md Application Commands
97
99
  # @see file:docs/cli/setup.md CLI: setup
98
100
  #
99
- def slash_group(command_name, description, guild_ids: nil, dm_permission: true, default_permission: nil, &block)
101
+ def slash_group(command_name, description, guild_ids: nil, dm_permission: true, default_permission: nil)
100
102
  command_name = { default: command_name } if command_name.is_a?(String)
101
103
  description = { default: description } if description.is_a?(String)
102
104
  command_name = ApplicationCommand.modify_localization_hash(command_name)
103
105
  description = ApplicationCommand.modify_localization_hash(description)
104
- command = Discorb::ApplicationCommand::Command::GroupCommand.new(command_name, description, guild_ids, nil,
105
- self, dm_permission, default_permission)
106
- command.then(&block) if block_given?
106
+ command = Discorb::ApplicationCommand::Command::GroupCommand.new(
107
+ command_name,
108
+ description,
109
+ guild_ids,
110
+ self,
111
+ dm_permission,
112
+ default_permission
113
+ )
114
+ yield command if block_given?
107
115
  @commands << command
108
116
  command
109
117
  end
@@ -126,8 +134,14 @@ module Discorb
126
134
  def message_command(command_name, guild_ids: nil, dm_permission: true, default_permission: nil, &block)
127
135
  command_name = { default: command_name } if command_name.is_a?(String)
128
136
  command_name = ApplicationCommand.modify_localization_hash(command_name)
129
- command = Discorb::ApplicationCommand::Command.new(command_name, guild_ids, block, 3, dm_permission,
130
- default_permission)
137
+ command = Discorb::ApplicationCommand::Command.new(
138
+ command_name,
139
+ guild_ids,
140
+ block,
141
+ 3,
142
+ dm_permission,
143
+ default_permission
144
+ )
131
145
  @commands << command
132
146
  command
133
147
  end
@@ -109,7 +109,7 @@ module Discorb
109
109
  attr_reader :type
110
110
  # @return [Discorb::AuditLog::Entry::Changes] The changes in this entry.
111
111
  attr_reader :changes
112
- # @return [Discorb::Channel, Discorb::Role, Discorb::Member, Discorb::Guild, Discorb::Message]
112
+ # @return [Discorb::Channel, Discorb::Role, Discorb::Member, Discorb::Guild, Discorb::Message, Discorb::Snowflake]
113
113
  # The target of the entry.
114
114
  attr_reader :target
115
115
  # @return [Hash{Symbol => Object}] The optional data for this entry.
@@ -172,6 +172,10 @@ module Discorb
172
172
  111 => :thread_update,
173
173
  112 => :thread_delete,
174
174
  121 => :application_command_permission_update,
175
+ 140 => :automod_rule_create,
176
+ 141 => :automod_rule_update,
177
+ 142 => :automod_rule_delete,
178
+ 143 => :automod_block_message,
175
179
  }.freeze
176
180
 
177
181
  #
@@ -197,7 +201,7 @@ module Discorb
197
201
  @id = Snowflake.new(data[:id])
198
202
  @user_id = Snowflake.new(data[:user_id])
199
203
  @target_id = Snowflake.new(data[:target_id])
200
- @type = EVENTS[data[:action_type]]
204
+ @type = EVENTS[data[:action_type]] || :unknown
201
205
  @target = CONVERTERS[@type.to_s.split("_")[0].to_sym]&.call(client, @target_id, @gui)
202
206
  @target ||= Snowflake.new(data[:target_id])
203
207
  @changes = data[:changes] && Changes.new(data[:changes])