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,119 +1,134 @@
1
- # frozen_string_literal: true
2
-
3
- require "mime/types"
4
- require "stringio"
5
-
6
- module Discorb
7
- #
8
- # Represents a attachment file.
9
- #
10
- class Attachment
11
- # @return [#read] The file content.
12
- attr_reader :io
13
- # @return [String] The attachment filename.
14
- attr_reader :filename
15
- # @return [String] The attachment content type.
16
- attr_reader :content_type
17
- # @return [String] The attachment description.
18
- attr_reader :description
19
- # @return [Discorb::Snowflake] The attachment id.
20
- attr_reader :id
21
- # @return [Integer] The attachment size in bytes.
22
- attr_reader :size
23
- # @return [String] The attachment url.
24
- attr_reader :url
25
- # @return [String] The attachment proxy url.
26
- attr_reader :proxy_url
27
- # @return [Integer] The image height.
28
- # @return [nil] If the attachment is not an image.
29
- attr_reader :height
30
- # @return [Integer] The image width.
31
- # @return [nil] If the attachment is not an image.
32
- attr_reader :width
33
- # @return [:client, :discord] The attachment was created by.
34
- attr_reader :created_by
35
- # @private
36
- # @return [Boolean] Whether the attachment will be closed after it is sent.
37
- attr_reader :will_close
38
-
39
- # @!attribute [r] image?
40
- # @return [Boolean] whether the file is an image.
41
-
42
- #
43
- # Creates a new attachment.
44
- #
45
- # @param [#read, String] source The Source of the attachment.
46
- # @param [String] filename The filename of the attachment. If not set, path or object_id of the IO is used.
47
- # @param [String] description The description of the attachment.
48
- # @param [String] content_type The content type of the attachment. If not set, it is guessed from the filename.
49
- # If failed to guess, it is set to `application/octet-stream`.
50
- # @param [Boolean] will_close Whether the IO will be closed after the attachment is sent.
51
- #
52
- def initialize(source, filename = nil, description: nil, content_type: nil, will_close: true)
53
- @io = if source.respond_to?(:read)
54
- source
55
- else
56
- File.open(source, "rb")
57
- end
58
- @filename = filename || (@io.respond_to?(:path) ? @io.path : @io.object_id)
59
- @description = description
60
- @content_type = content_type || MIME::Types.type_for(@filename.to_s)[0].to_s
61
- @content_type = "application/octet-stream" if @content_type == ""
62
- @will_close = will_close
63
- @created_by = :client
64
- end
65
-
66
- #
67
- # Initializes the object from a hash.
68
- # @private
69
- #
70
- def initialize_hash(data)
71
- @id = Snowflake.new(data[:id])
72
- @filename = data[:filename]
73
- @content_type = data[:content_type] || "application/octet-stream"
74
- @size = data[:size]
75
- @url = data[:url]
76
- @proxy_url = data[:proxy_url]
77
- @height = data[:height]
78
- @width = data[:width]
79
- @created_by = :discord
80
- end
81
-
82
- def image?
83
- @content_type.start_with? "image/"
84
- end
85
-
86
- def inspect
87
- if @created_by == :discord
88
- "<#{self.class} #{@id}: #{@filename}>"
89
- else
90
- "<#{self.class} #{io.fileno}: #{@filename}>"
91
- end
92
- end
93
-
94
- #
95
- # Creates a new file from a hash.
96
- # @private
97
- #
98
- def self.from_hash(data)
99
- inst = allocate
100
- inst.initialize_hash(data)
101
- inst
102
- end
103
-
104
- #
105
- # Creates a new file from a string.
106
- #
107
- # @param [String] string The string to create the file from.
108
- # @param [String] filename The filename of the file. object_id of the string is used if not set.
109
- # @param [String] content_type The content type of the file. If not set, it is guessed from the filename.
110
- #
111
- # @return [Discorb::Attachment] The new file.
112
- #
113
- def self.from_string(string, filename = nil, content_type: nil, description: nil)
114
- io = StringIO.new(string)
115
- filename ||= string.object_id.to_s + ".txt"
116
- new(io, filename, content_type: content_type, description: description, will_close: true)
117
- end
118
- end
119
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "mime/types"
4
+ require "stringio"
5
+
6
+ module Discorb
7
+ #
8
+ # Represents a attachment file.
9
+ #
10
+ class Attachment
11
+ # @return [#read] The file content.
12
+ attr_reader :io
13
+ # @return [String] The attachment filename.
14
+ attr_reader :filename
15
+ # @return [String] The attachment content type.
16
+ attr_reader :content_type
17
+ # @return [String] The attachment description.
18
+ attr_reader :description
19
+ # @return [Discorb::Snowflake] The attachment id.
20
+ attr_reader :id
21
+ # @return [Integer] The attachment size in bytes.
22
+ attr_reader :size
23
+ # @return [String] The attachment url.
24
+ attr_reader :url
25
+ # @return [String] The attachment proxy url.
26
+ attr_reader :proxy_url
27
+ # @return [Integer] The image height.
28
+ # @return [nil] If the attachment is not an image.
29
+ attr_reader :height
30
+ # @return [Integer] The image width.
31
+ # @return [nil] If the attachment is not an image.
32
+ attr_reader :width
33
+ # @return [:client, :discord] The attachment was created by.
34
+ attr_reader :created_by
35
+ # @private
36
+ # @return [Boolean] Whether the attachment will be closed after it is sent.
37
+ attr_reader :will_close
38
+
39
+ # @!attribute [r] image?
40
+ # @return [Boolean] whether the file is an image.
41
+
42
+ #
43
+ # Creates a new attachment.
44
+ #
45
+ # @param [#read, String] source The Source of the attachment.
46
+ # @param [String] filename The filename of the attachment. If not set, path or object_id of the IO is used.
47
+ # @param [String] description The description of the attachment.
48
+ # @param [String] content_type The content type of the attachment. If not set, it is guessed from the filename.
49
+ # If failed to guess, it is set to `application/octet-stream`.
50
+ # @param [Boolean] will_close Whether the IO will be closed after the attachment is sent.
51
+ #
52
+ def initialize(
53
+ source,
54
+ filename = nil,
55
+ description: nil,
56
+ content_type: nil,
57
+ will_close: true
58
+ )
59
+ @io = (source.respond_to?(:read) ? source : File.open(source, "rb"))
60
+ @filename =
61
+ filename || (@io.respond_to?(:path) ? @io.path : @io.object_id)
62
+ @description = description
63
+ @content_type =
64
+ content_type || MIME::Types.type_for(@filename.to_s)[0].to_s
65
+ @content_type = "application/octet-stream" if @content_type == ""
66
+ @will_close = will_close
67
+ @created_by = :client
68
+ end
69
+
70
+ #
71
+ # Initializes the object from a hash.
72
+ # @private
73
+ #
74
+ def initialize_hash(data)
75
+ @id = Snowflake.new(data[:id])
76
+ @filename = data[:filename]
77
+ @content_type = data[:content_type] || "application/octet-stream"
78
+ @size = data[:size]
79
+ @url = data[:url]
80
+ @proxy_url = data[:proxy_url]
81
+ @height = data[:height]
82
+ @width = data[:width]
83
+ @created_by = :discord
84
+ end
85
+
86
+ def image?
87
+ @content_type.start_with? "image/"
88
+ end
89
+
90
+ def inspect
91
+ if @created_by == :discord
92
+ "<#{self.class} #{@id}: #{@filename}>"
93
+ else
94
+ "<#{self.class} #{io.fileno}: #{@filename}>"
95
+ end
96
+ end
97
+
98
+ #
99
+ # Creates a new file from a hash.
100
+ # @private
101
+ #
102
+ def self.from_hash(data)
103
+ inst = allocate
104
+ inst.initialize_hash(data)
105
+ inst
106
+ end
107
+
108
+ #
109
+ # Creates a new file from a string.
110
+ #
111
+ # @param [String] string The string to create the file from.
112
+ # @param [String] filename The filename of the file. object_id of the string is used if not set.
113
+ # @param [String] content_type The content type of the file. If not set, it is guessed from the filename.
114
+ #
115
+ # @return [Discorb::Attachment] The new file.
116
+ #
117
+ def self.from_string(
118
+ string,
119
+ filename = nil,
120
+ content_type: nil,
121
+ description: nil
122
+ )
123
+ io = StringIO.new(string)
124
+ filename ||= "#{string.object_id}.txt"
125
+ new(
126
+ io,
127
+ filename,
128
+ content_type: content_type,
129
+ description: description,
130
+ will_close: true
131
+ )
132
+ end
133
+ end
134
+ end