discorb 0.19.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 (88) 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 +10 -0
  5. data/Rakefile +482 -454
  6. data/lib/discorb/allowed_mentions.rb +68 -72
  7. data/lib/discorb/app_command/command.rb +466 -398
  8. data/lib/discorb/app_command/common.rb +65 -25
  9. data/lib/discorb/app_command/handler.rb +304 -266
  10. data/lib/discorb/app_command.rb +5 -5
  11. data/lib/discorb/application.rb +198 -197
  12. data/lib/discorb/asset.rb +101 -101
  13. data/lib/discorb/attachment.rb +134 -119
  14. data/lib/discorb/audit_logs.rb +412 -385
  15. data/lib/discorb/automod.rb +279 -269
  16. data/lib/discorb/channel/base.rb +107 -108
  17. data/lib/discorb/channel/category.rb +32 -32
  18. data/lib/discorb/channel/container.rb +44 -44
  19. data/lib/discorb/channel/dm.rb +26 -28
  20. data/lib/discorb/channel/guild.rb +311 -246
  21. data/lib/discorb/channel/stage.rb +156 -140
  22. data/lib/discorb/channel/text.rb +430 -336
  23. data/lib/discorb/channel/thread.rb +374 -325
  24. data/lib/discorb/channel/voice.rb +85 -79
  25. data/lib/discorb/channel.rb +5 -5
  26. data/lib/discorb/client.rb +635 -621
  27. data/lib/discorb/color.rb +178 -182
  28. data/lib/discorb/common.rb +168 -164
  29. data/lib/discorb/components/button.rb +107 -106
  30. data/lib/discorb/components/select_menu.rb +157 -145
  31. data/lib/discorb/components/text_input.rb +103 -106
  32. data/lib/discorb/components.rb +68 -66
  33. data/lib/discorb/dictionary.rb +135 -135
  34. data/lib/discorb/embed.rb +404 -398
  35. data/lib/discorb/emoji.rb +309 -302
  36. data/lib/discorb/emoji_table.rb +16099 -8857
  37. data/lib/discorb/error.rb +131 -131
  38. data/lib/discorb/event.rb +360 -314
  39. data/lib/discorb/event_handler.rb +39 -39
  40. data/lib/discorb/exe/about.rb +17 -17
  41. data/lib/discorb/exe/irb.rb +72 -67
  42. data/lib/discorb/exe/new.rb +323 -315
  43. data/lib/discorb/exe/run.rb +69 -68
  44. data/lib/discorb/exe/setup.rb +57 -55
  45. data/lib/discorb/exe/show.rb +12 -12
  46. data/lib/discorb/extend.rb +25 -45
  47. data/lib/discorb/extension.rb +89 -83
  48. data/lib/discorb/flag.rb +126 -128
  49. data/lib/discorb/gateway.rb +984 -804
  50. data/lib/discorb/gateway_events.rb +670 -638
  51. data/lib/discorb/gateway_requests.rb +45 -48
  52. data/lib/discorb/guild.rb +2115 -1626
  53. data/lib/discorb/guild_template.rb +280 -241
  54. data/lib/discorb/http.rb +247 -232
  55. data/lib/discorb/image.rb +42 -42
  56. data/lib/discorb/integration.rb +169 -161
  57. data/lib/discorb/intents.rb +161 -163
  58. data/lib/discorb/interaction/autocomplete.rb +76 -62
  59. data/lib/discorb/interaction/command.rb +279 -224
  60. data/lib/discorb/interaction/components.rb +114 -104
  61. data/lib/discorb/interaction/modal.rb +36 -32
  62. data/lib/discorb/interaction/response.rb +379 -336
  63. data/lib/discorb/interaction/root.rb +271 -257
  64. data/lib/discorb/interaction.rb +5 -5
  65. data/lib/discorb/invite.rb +154 -153
  66. data/lib/discorb/member.rb +344 -311
  67. data/lib/discorb/message.rb +615 -544
  68. data/lib/discorb/message_meta.rb +197 -186
  69. data/lib/discorb/modules.rb +371 -290
  70. data/lib/discorb/permission.rb +305 -291
  71. data/lib/discorb/presence.rb +352 -346
  72. data/lib/discorb/rate_limit.rb +81 -76
  73. data/lib/discorb/reaction.rb +55 -54
  74. data/lib/discorb/role.rb +272 -240
  75. data/lib/discorb/shard.rb +76 -74
  76. data/lib/discorb/sticker.rb +193 -171
  77. data/lib/discorb/user.rb +205 -188
  78. data/lib/discorb/utils/colored_puts.rb +16 -16
  79. data/lib/discorb/utils.rb +12 -16
  80. data/lib/discorb/voice_state.rb +305 -281
  81. data/lib/discorb/webhook.rb +537 -507
  82. data/lib/discorb.rb +62 -56
  83. data/sig/discorb/application.rbs +2 -0
  84. data/sig/discorb/automod.rbs +10 -1
  85. data/sig/discorb/guild.rbs +2 -0
  86. data/sig/discorb/message.rbs +2 -0
  87. data/sig/discorb/user.rbs +22 -20
  88. metadata +2 -2
@@ -1,68 +1,69 @@
1
- # frozen_string_literal: true
2
-
3
- # description: Run a client.
4
- require "optparse"
5
- require "json"
6
- require "discorb/utils/colored_puts"
7
- require "io/console"
8
- require "discorb"
9
-
10
- opt = OptionParser.new <<~BANNER
11
- This command will run a client.
12
-
13
- Usage: discorb run [options] [script]
14
-
15
- script The script to run. Defaults to 'main.rb'.
16
- BANNER
17
- options = {
18
- title: nil,
19
- setup: nil,
20
- token: false,
21
- }
22
- opt.on("-s", "--setup", "Whether to setup application commands.") { |v| options[:setup] = v }
23
- opt.on("-e", "--env [ENV]",
24
- "The name of the environment variable to use for token, or just `-e` or `--env` for intractive prompt.") do |v|
25
- options[:token] = v
26
- end
27
- opt.on("-t", "--title TITLE", "The title of process.") { |v| options[:title] = v }
28
- opt.parse!(ARGV)
29
-
30
- script = ARGV[0]
31
-
32
- if script.nil?
33
- script = "main.rb"
34
- dir = Dir.pwd
35
- loop do
36
- if File.exist?(File.join(dir, "main.rb"))
37
- script = File.join(dir, "main.rb")
38
- break
39
- end
40
- break if dir == File.dirname(dir)
41
-
42
- dir = File.dirname(dir)
43
- end
44
- if File.dirname(script) != Dir.pwd
45
- Dir.chdir(File.dirname(script))
46
- iputs "Changed directory to \e[m#{File.dirname(script)}"
47
- end
48
- end
49
-
50
- ENV["DISCORB_CLI_FLAG"] = "run"
51
- ENV["DISCORB_CLI_OPTIONS"] = JSON.generate(options)
52
-
53
- if options[:token]
54
- ENV["DISCORB_CLI_TOKEN"] = ENV.fetch(options[:token], nil)
55
- raise "#{options[:token]} is not set." if ENV["DISCORB_CLI_TOKEN"].nil?
56
- elsif options[:token].nil? || options[:token] == "-"
57
- print "\e[90mPlease enter your token: \e[m"
58
- ENV["DISCORB_CLI_TOKEN"] = $stdin.noecho(&:gets).chomp
59
- puts ""
60
- end
61
-
62
- ENV["DISCORB_CLI_TITLE"] = options[:title]
63
-
64
- if File.exist? script
65
- exec "ruby #{script}"
66
- else
67
- eputs "Could not load script: \e[31m#{script}\e[91m"
68
- end
1
+ # frozen_string_literal: true
2
+
3
+ # description: Run a client.
4
+ require "optparse"
5
+ require "json"
6
+ require "discorb/utils/colored_puts"
7
+ require "io/console"
8
+ require "discorb"
9
+
10
+ opt = OptionParser.new <<~BANNER
11
+ This command will run a client.
12
+
13
+ Usage: discorb run [options] [script]
14
+
15
+ script The script to run. Defaults to 'main.rb'.
16
+ BANNER
17
+ options = { title: nil, setup: nil, token: false }
18
+ opt.on("-s", "--setup", "Whether to setup application commands.") do |v|
19
+ options[:setup] = v
20
+ end
21
+ opt.on(
22
+ "-e",
23
+ "--env [ENV]",
24
+ "The name of the environment variable to use for token, or just `-e` or `--env` for intractive prompt."
25
+ ) { |v| options[:token] = v }
26
+ opt.on("-t", "--title TITLE", "The title of process.") do |v|
27
+ options[:title] = v
28
+ end
29
+ opt.parse!(ARGV)
30
+
31
+ script = ARGV[0]
32
+
33
+ if script.nil?
34
+ script = "main.rb"
35
+ dir = Dir.pwd
36
+ loop do
37
+ if File.exist?(File.join(dir, "main.rb"))
38
+ script = File.join(dir, "main.rb")
39
+ break
40
+ end
41
+ break if dir == File.dirname(dir)
42
+
43
+ dir = File.dirname(dir)
44
+ end
45
+ if File.dirname(script) != Dir.pwd
46
+ Dir.chdir(File.dirname(script))
47
+ iputs "Changed directory to \e[m#{File.dirname(script)}"
48
+ end
49
+ end
50
+
51
+ ENV["DISCORB_CLI_FLAG"] = "run"
52
+ ENV["DISCORB_CLI_OPTIONS"] = JSON.generate(options)
53
+
54
+ if options[:token]
55
+ ENV["DISCORB_CLI_TOKEN"] = ENV.fetch(options[:token], nil)
56
+ raise "#{options[:token]} is not set." if ENV["DISCORB_CLI_TOKEN"].nil?
57
+ elsif options[:token].nil? || options[:token] == "-"
58
+ print "\e[90mPlease enter your token: \e[m"
59
+ ENV["DISCORB_CLI_TOKEN"] = $stdin.noecho(&:gets).chomp
60
+ puts ""
61
+ end
62
+
63
+ ENV["DISCORB_CLI_TITLE"] = options[:title]
64
+
65
+ if File.exist? script
66
+ exec "ruby #{script}"
67
+ else
68
+ eputs "Could not load script: \e[31m#{script}\e[91m"
69
+ end
@@ -1,55 +1,57 @@
1
- # frozen_string_literal: true
2
-
3
- # description: Setup application commands.
4
- require "optparse"
5
- require "discorb/utils/colored_puts"
6
-
7
- options = {
8
- guilds: nil,
9
- script: true,
10
- }
11
-
12
- opt = OptionParser.new <<~BANNER
13
- This command will setup application commands.
14
-
15
- Usage: discorb setup [options] [script]
16
-
17
- script The script to setup.
18
- BANNER
19
- opt.on("-g", "--guild ID", Array,
20
- "The guild ID to setup, use comma for setup commands in multiple guilds, " \
21
- "or `global` for setup global commands.") do |v|
22
- options[:guilds] = v
23
- end
24
- opt.on("-c", "--clear-guild ID", Array,
25
- "The guild ID to clear command, use comma for clear commands in multiple guilds, " \
26
- "or `global` for clear global commands.") do |v|
27
- options[:clear_guilds] = v
28
- end
29
- opt.on("-s", "--[no-]script",
30
- "Whether to run `:setup` event. " \
31
- "This may be useful if setup script includes operation that shouldn't run twice. Default to true.") do |v|
32
- options[:script] = v
33
- end
34
- opt.parse!(ARGV)
35
-
36
- script = ARGV[0]
37
- script ||= "main.rb"
38
- ENV["DISCORB_CLI_FLAG"] = "setup"
39
-
40
- ENV["DISCORB_SETUP_GUILDS"] = if options[:guilds] == ["global"]
41
- "global"
42
- elsif options[:guilds]
43
- options[:guilds].join(",")
44
- end
45
-
46
- ENV["DISCORB_SETUP_CLEAR_GUILDS"] = options[:clear_guilds]&.join(",")
47
-
48
- ENV["DISCORB_SETUP_SCRIPT"] = options[:script].to_s if options[:script]
49
-
50
- if File.exist? script
51
- load script
52
- sputs "Successfully set up commands for \e[32m#{script}\e[m."
53
- else
54
- eputs "Could not load script: \e[31m#{script}\e[m"
55
- end
1
+ # frozen_string_literal: true
2
+
3
+ # description: Setup application commands.
4
+ require "optparse"
5
+ require "discorb/utils/colored_puts"
6
+
7
+ options = { guilds: nil, script: true }
8
+
9
+ opt = OptionParser.new <<~BANNER
10
+ This command will setup application commands.
11
+
12
+ Usage: discorb setup [options] [script]
13
+
14
+ script The script to setup.
15
+ BANNER
16
+ opt.on(
17
+ "-g",
18
+ "--guild ID",
19
+ Array,
20
+ "The guild ID to setup, use comma for setup commands in multiple guilds, " \
21
+ "or `global` for setup global commands."
22
+ ) { |v| options[:guilds] = v }
23
+ opt.on(
24
+ "-c",
25
+ "--clear-guild ID",
26
+ Array,
27
+ "The guild ID to clear command, use comma for clear commands in multiple guilds, " \
28
+ "or `global` for clear global commands."
29
+ ) { |v| options[:clear_guilds] = v }
30
+ opt.on(
31
+ "-s",
32
+ "--[no-]script",
33
+ "Whether to run `:setup` event. " \
34
+ "This may be useful if setup script includes operation that shouldn't run twice. Default to true."
35
+ ) { |v| options[:script] = v }
36
+ opt.parse!(ARGV)
37
+
38
+ script = ARGV[0]
39
+ script ||= "main.rb"
40
+ ENV["DISCORB_CLI_FLAG"] = "setup"
41
+
42
+ ENV["DISCORB_SETUP_GUILDS"] = if options[:guilds] == ["global"]
43
+ "global"
44
+ elsif options[:guilds]
45
+ options[:guilds].join(",")
46
+ end
47
+
48
+ ENV["DISCORB_SETUP_CLEAR_GUILDS"] = options[:clear_guilds]&.join(",")
49
+
50
+ ENV["DISCORB_SETUP_SCRIPT"] = options[:script].to_s if options[:script]
51
+
52
+ if File.exist? script
53
+ load script
54
+ sputs "Successfully set up commands for \e[32m#{script}\e[m."
55
+ else
56
+ eputs "Could not load script: \e[31m#{script}\e[m"
57
+ end
@@ -1,12 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
- # description: Show information of your environment.
4
-
5
- require "etc"
6
- require "discorb"
7
-
8
- puts "\e[90m Ruby:\e[m #{RUBY_VERSION}"
9
- puts "\e[90m discorb:\e[m #{Discorb::VERSION}"
10
- uname = Etc.uname
11
- puts "\e[90m System:\e[m #{uname[:sysname]} #{uname[:release]}"
12
- puts "\e[90mPlatform:\e[m #{RUBY_PLATFORM}"
1
+ # frozen_string_literal: true
2
+
3
+ # description: Show information of your environment.
4
+
5
+ require "etc"
6
+ require "discorb"
7
+
8
+ puts "\e[90m Ruby:\e[m #{RUBY_VERSION}"
9
+ puts "\e[90m discorb:\e[m #{Discorb::VERSION}"
10
+ uname = Etc.uname
11
+ puts "\e[90m System:\e[m #{uname[:sysname]} #{uname[:release]}"
12
+ puts "\e[90mPlatform:\e[m #{RUBY_PLATFORM}"
@@ -1,45 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop: disable Style/Documentation
4
-
5
- class Time
6
- #
7
- # Format a time object to a Discord formatted string.
8
- #
9
- # @param ["f", "F", "d", "D", "t", "T", "R"] type The format to use.
10
- #
11
- # @return [String] The formatted time.
12
- #
13
- def to_df(type = nil)
14
- if type.nil?
15
- "<t:#{to_i}>"
16
- else
17
- "<t:#{to_i}:#{type}>"
18
- end
19
- end
20
- end
21
-
22
- # @private
23
- module Async
24
- class Node
25
- def description
26
- @object_name ||= "#{self.class}:0x#{object_id.to_s(16)}#{@transient ? " transient" : nil}"
27
-
28
- if @annotation
29
- "#{@object_name} #{@annotation}"
30
- elsif line = self.backtrace(0, 1)&.first
31
- "#{@object_name} #{line}"
32
- else
33
- @object_name
34
- end
35
- end
36
-
37
- def to_s
38
- "\#<#{self.description}>"
39
- end
40
-
41
- alias inspect to_s
42
- end
43
- end
44
-
45
- # rubocop: enable Style/Documentation
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop: disable Style/Documentation
4
+
5
+ class Time
6
+ #
7
+ # Format a time object to a Discord formatted string.
8
+ #
9
+ # @param ["f", "F", "d", "D", "t", "T", "R"] type The format to use.
10
+ #
11
+ # @return [String] The formatted time.
12
+ #
13
+ def to_df(type = nil)
14
+ type.nil? ? "<t:#{to_i}>" : "<t:#{to_i}:#{type}>"
15
+ end
16
+ end
17
+
18
+ # @private
19
+ module Async
20
+ class Node
21
+ alias inspect to_s
22
+ end
23
+ end
24
+
25
+ # rubocop: enable Style/Documentation
@@ -1,83 +1,89 @@
1
- # frozen_string_literal: true
2
-
3
- module Discorb
4
- #
5
- # Abstract class to make extension.
6
- # Include from this module to make your own extension.
7
- # @see file:docs/extension.md Extension
8
- # @abstract
9
- #
10
- module Extension
11
- def initialize(client)
12
- @client = client
13
- end
14
-
15
- def events
16
- return @events if @events
17
-
18
- ret = {}
19
- self.class.events.each do |event, handlers|
20
- ret[event] = handlers.map do |handler|
21
- Discorb::EventHandler.new(proc { |*args, **kwargs|
22
- instance_exec(*args, **kwargs, &handler[2])
23
- }, handler[0], handler[1])
24
- end
25
- end
26
- @events = ret
27
- end
28
-
29
- def self.included(base)
30
- base.extend(ClassMethods)
31
- end
32
-
33
- #
34
- # @private
35
- # Module for adding class methods to the extension class.
36
- #
37
- module ClassMethods
38
- include Discorb::ApplicationCommand::Handler
39
- undef setup_commands
40
-
41
- #
42
- # Define a new event.
43
- #
44
- # @param [Symbol] event_name The name of the event.
45
- # @param [Symbol] id The id of the event. Used to delete the event.
46
- # @param [Hash] metadata Other metadata.
47
- #
48
- def event(event_name, id: nil, **metadata, &block)
49
- raise ArgumentError, "Event name must be a symbol" unless event_name.is_a?(Symbol)
50
- raise ArgumentError, "block must be given" unless block_given?
51
-
52
- @events[event_name] ||= []
53
- metadata[:extension] = self.name
54
- @events[event_name] << [id, metadata, block]
55
- end
56
-
57
- #
58
- # Define a new once event.
59
- #
60
- # @param [Symbol] event_name The name of the event.
61
- # @param [Symbol] id The id of the event. Used to delete the event.
62
- # @param [Hash] metadata Other metadata.
63
- # @param [Proc] block The block to execute when the event is triggered.
64
- #
65
- def once_event(event_name, id: nil, **metadata, &block)
66
- event(event_name, id: id, once: true, **metadata, &block)
67
- end
68
-
69
- # @return [Hash{Symbol => Array<Discorb::EventHandler>}] The events of the extension.
70
- attr_reader :events
71
- # @return [Array<Discorb::ApplicationCommand::Command>] The commands of the extension.
72
- attr_reader :commands
73
- # @private
74
- attr_reader :callable_commands
75
-
76
- def self.extended(klass)
77
- klass.instance_variable_set(:@commands, [])
78
- klass.instance_variable_set(:@callable_commands, [])
79
- klass.instance_variable_set(:@events, {})
80
- end
81
- end
82
- end
83
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Discorb
4
+ #
5
+ # Abstract class to make extension.
6
+ # Include from this module to make your own extension.
7
+ # @see file:docs/extension.md Extension
8
+ # @abstract
9
+ #
10
+ module Extension
11
+ def initialize(client)
12
+ @client = client
13
+ end
14
+
15
+ def events
16
+ return @events if @events
17
+
18
+ ret = {}
19
+ self.class.events.each do |event, handlers|
20
+ ret[event] = handlers.map do |handler|
21
+ Discorb::EventHandler.new(
22
+ proc do |*args, **kwargs|
23
+ instance_exec(*args, **kwargs, &handler[2])
24
+ end,
25
+ handler[0],
26
+ handler[1]
27
+ )
28
+ end
29
+ end
30
+ @events = ret
31
+ end
32
+
33
+ def self.included(base)
34
+ base.extend(ClassMethods)
35
+ end
36
+
37
+ #
38
+ # @private
39
+ # Module for adding class methods to the extension class.
40
+ #
41
+ module ClassMethods
42
+ include Discorb::ApplicationCommand::Handler
43
+ undef setup_commands
44
+
45
+ #
46
+ # Define a new event.
47
+ #
48
+ # @param [Symbol] event_name The name of the event.
49
+ # @param [Symbol] id The id of the event. Used to delete the event.
50
+ # @param [Hash] metadata Other metadata.
51
+ #
52
+ def event(event_name, id: nil, **metadata, &block)
53
+ unless event_name.is_a?(Symbol)
54
+ raise ArgumentError, "Event name must be a symbol"
55
+ end
56
+ raise ArgumentError, "block must be given" unless block_given?
57
+
58
+ @events[event_name] ||= []
59
+ metadata[:extension] = name
60
+ @events[event_name] << [id, metadata, block]
61
+ end
62
+
63
+ #
64
+ # Define a new once event.
65
+ #
66
+ # @param [Symbol] event_name The name of the event.
67
+ # @param [Symbol] id The id of the event. Used to delete the event.
68
+ # @param [Hash] metadata Other metadata.
69
+ # @param [Proc] block The block to execute when the event is triggered.
70
+ #
71
+ def once_event(event_name, id: nil, **metadata, &block)
72
+ event(event_name, id: id, once: true, **metadata, &block)
73
+ end
74
+
75
+ # @return [Hash{Symbol => Array<Discorb::EventHandler>}] The events of the extension.
76
+ attr_reader :events
77
+ # @return [Array<Discorb::ApplicationCommand::Command>] The commands of the extension.
78
+ attr_reader :commands
79
+ # @private
80
+ attr_reader :callable_commands
81
+
82
+ def self.extended(klass)
83
+ klass.instance_variable_set(:@commands, [])
84
+ klass.instance_variable_set(:@callable_commands, [])
85
+ klass.instance_variable_set(:@events, {})
86
+ end
87
+ end
88
+ end
89
+ end