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,153 +1,154 @@
1
- # frozen_string_literal: true
2
-
3
- module Discorb
4
- #
5
- # Represents invite of discord.
6
- #
7
- class Invite < DiscordModel
8
- # @return [String] The code of invite.
9
- attr_reader :code
10
-
11
- # @return [:voice, :stream, :guild] The type of invite.
12
- attr_reader :target_type
13
-
14
- # @return [User] The user of invite.
15
- attr_reader :target_user
16
-
17
- # @return [Integer] The approximate number of online users of invite.
18
- attr_reader :approximate_presence_count
19
-
20
- # @return [Integer] The approximate number of members of invite.
21
- attr_reader :approximate_member_count
22
-
23
- # @return [Time] The time when invite expires.
24
- # @return [nil] The invite never expires.
25
- # @macro [new] nometa
26
- # @return [nil] The invite doesn't have metadata.
27
- attr_reader :expires_at
28
-
29
- # @return [Integer] The number of uses of invite.
30
- # @macro nometa
31
- attr_reader :uses
32
-
33
- # @return [Integer] The maximum number of uses of invite.
34
- # @macro nometa
35
- attr_reader :max_uses
36
-
37
- # @return [Integer] Duration of invite in seconds.
38
- # @macro nometa
39
- attr_reader :max_age
40
-
41
- # @return [Time] The time when invite was created.
42
- # @macro nometa
43
- attr_reader :created_at
44
-
45
- # @!attribute [r] channel
46
- # Channel of the invite.
47
- #
48
- # @return [Discorb::Channel] Channel of invite.
49
- # @macro client_cache
50
- #
51
- # @!attribute [r] guild
52
- # Guild of the invite.
53
- #
54
- # @return [Discorb::Guild] Guild of invite.
55
- # @macro client_cache
56
- #
57
- # @!attribute [r] remain_uses
58
- # Number of remaining uses of invite.
59
- # @return [Integer] Number of remaining uses of invite.
60
- #
61
- # @!attribute [r] url
62
- # Full url of invite.
63
- # @return [String] Full url of invite.
64
- #
65
- # @!attribute [r] temporary?
66
- # Whether the invite is temporary.
67
- # @return [Boolean]
68
-
69
- # @private
70
- # @return [{Integer => Symbol}] The mapping of target types.
71
- TARGET_TYPES = {
72
- nil => :voice,
73
- 1 => :stream,
74
- 2 => :guild,
75
- }.freeze
76
-
77
- #
78
- # Initialize a new invite.
79
- # @private
80
- #
81
- # @param [Discorb::Client] client The client.
82
- # @param [Hash] data The data of invite.
83
- # @param [Boolean] gateway Whether the data is from gateway.
84
- #
85
- def initialize(client, data, gateway)
86
- @client = client
87
- @data = data[:data]
88
- _set_data(data, gateway)
89
- end
90
-
91
- def channel
92
- @client.channels[@channel_data[:id]]
93
- end
94
-
95
- def guild
96
- @client.guilds[@guild_data[:id]]
97
- end
98
-
99
- def url
100
- "https://discord.gg/#{@code}"
101
- end
102
-
103
- def remain_uses
104
- @max_uses && @max_uses - @uses
105
- end
106
-
107
- def temporary?
108
- @temporary
109
- end
110
-
111
- # Delete the invite.
112
- # @async
113
- # @return [Async::Task<void>] The task.
114
- #
115
- def delete!(reason: nil)
116
- Async do
117
- @client.http.request(Route.new("/invites/#{@code}", "//invites/:code", :delete), {}, audit_log_reason: reason)
118
- end
119
- end
120
-
121
- private
122
-
123
- def _set_data(data, gateway)
124
- @code = data[:code]
125
- if gateway
126
- @channel_data = { id: data[:channel_id] }
127
- @guild_data = { id: data[:guild_id] }
128
- else
129
- @guild_data = data[:guild]
130
- @channel_data = data[:channel]
131
- @approximate_presence_count = data[:approximate_presence_count]
132
- @approximate_member_count = data[:approximate_member_count]
133
- @expires_at = data[:expires_at] && Time.iso8601(data[:expires_at])
134
- end
135
- @inviter_data = data[:inviter]
136
- @target_type = TARGET_TYPES[data[:target_type]]
137
- if data[:target_user]
138
- @target_user = @client.users[data[:target_user][:id]] || User.new(@client,
139
- data[:target_user])
140
- end
141
- # @target_application = nil
142
-
143
- # @stage_instance = data[:stage_instance] && Invite::StageInstance.new(self, data[:stage_instance])
144
- return unless data.key?(:uses)
145
-
146
- @uses = data[:uses]
147
- @max_uses = data[:max_uses]
148
- @max_age = data[:max_age]
149
- @temporary = data[:temporary]
150
- @created_at = Time.iso8601(data[:created_at])
151
- end
152
- end
153
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Discorb
4
+ #
5
+ # Represents invite of discord.
6
+ #
7
+ class Invite < DiscordModel
8
+ # @return [String] The code of invite.
9
+ attr_reader :code
10
+
11
+ # @return [:voice, :stream, :guild] The type of invite.
12
+ attr_reader :target_type
13
+
14
+ # @return [User] The user of invite.
15
+ attr_reader :target_user
16
+
17
+ # @return [Integer] The approximate number of online users of invite.
18
+ attr_reader :approximate_presence_count
19
+
20
+ # @return [Integer] The approximate number of members of invite.
21
+ attr_reader :approximate_member_count
22
+
23
+ # @return [Time] The time when invite expires.
24
+ # @return [nil] The invite never expires.
25
+ # @macro [new] nometa
26
+ # @return [nil] The invite doesn't have metadata.
27
+ attr_reader :expires_at
28
+
29
+ # @return [Integer] The number of uses of invite.
30
+ # @macro nometa
31
+ attr_reader :uses
32
+
33
+ # @return [Integer] The maximum number of uses of invite.
34
+ # @macro nometa
35
+ attr_reader :max_uses
36
+
37
+ # @return [Integer] Duration of invite in seconds.
38
+ # @macro nometa
39
+ attr_reader :max_age
40
+
41
+ # @return [Time] The time when invite was created.
42
+ # @macro nometa
43
+ attr_reader :created_at
44
+
45
+ # @!attribute [r] channel
46
+ # Channel of the invite.
47
+ #
48
+ # @return [Discorb::Channel] Channel of invite.
49
+ # @macro client_cache
50
+ #
51
+ # @!attribute [r] guild
52
+ # Guild of the invite.
53
+ #
54
+ # @return [Discorb::Guild] Guild of invite.
55
+ # @macro client_cache
56
+ #
57
+ # @!attribute [r] remain_uses
58
+ # Number of remaining uses of invite.
59
+ # @return [Integer] Number of remaining uses of invite.
60
+ #
61
+ # @!attribute [r] url
62
+ # Full url of invite.
63
+ # @return [String] Full url of invite.
64
+ #
65
+ # @!attribute [r] temporary?
66
+ # Whether the invite is temporary.
67
+ # @return [Boolean]
68
+
69
+ # @private
70
+ # @return [{Integer => Symbol}] The mapping of target types.
71
+ TARGET_TYPES = { nil => :voice, 1 => :stream, 2 => :guild }.freeze
72
+
73
+ #
74
+ # Initialize a new invite.
75
+ # @private
76
+ #
77
+ # @param [Discorb::Client] client The client.
78
+ # @param [Hash] data The data of invite.
79
+ # @param [Boolean] gateway Whether the data is from gateway.
80
+ #
81
+ def initialize(client, data, gateway)
82
+ @client = client
83
+ @data = data[:data]
84
+ _set_data(data, gateway)
85
+ end
86
+
87
+ def channel
88
+ @client.channels[@channel_data[:id]]
89
+ end
90
+
91
+ def guild
92
+ @client.guilds[@guild_data[:id]]
93
+ end
94
+
95
+ def url
96
+ "https://discord.gg/#{@code}"
97
+ end
98
+
99
+ def remain_uses
100
+ @max_uses && (@max_uses - @uses)
101
+ end
102
+
103
+ def temporary?
104
+ @temporary
105
+ end
106
+
107
+ # Delete the invite.
108
+ # @async
109
+ # @return [Async::Task<void>] The task.
110
+ #
111
+ def delete(reason: nil)
112
+ Async do
113
+ @client.http.request(
114
+ Route.new("/invites/#{@code}", "//invites/:code", :delete),
115
+ {},
116
+ audit_log_reason: reason
117
+ )
118
+ end
119
+ end
120
+
121
+ private
122
+
123
+ def _set_data(data, gateway)
124
+ @code = data[:code]
125
+ if gateway
126
+ @channel_data = { id: data[:channel_id] }
127
+ @guild_data = { id: data[:guild_id] }
128
+ else
129
+ @guild_data = data[:guild]
130
+ @channel_data = data[:channel]
131
+ @approximate_presence_count = data[:approximate_presence_count]
132
+ @approximate_member_count = data[:approximate_member_count]
133
+ @expires_at = data[:expires_at] && Time.iso8601(data[:expires_at])
134
+ end
135
+ @inviter_data = data[:inviter]
136
+ @target_type = TARGET_TYPES[data[:target_type]]
137
+ if data[:target_user]
138
+ @target_user =
139
+ @client.users[data[:target_user][:id]] ||
140
+ User.new(@client, data[:target_user])
141
+ end
142
+ # @target_application = nil
143
+
144
+ # @stage_instance = data[:stage_instance] && Invite::StageInstance.new(self, data[:stage_instance])
145
+ return unless data.key?(:uses)
146
+
147
+ @uses = data[:uses]
148
+ @max_uses = data[:max_uses]
149
+ @max_age = data[:max_age]
150
+ @temporary = data[:temporary]
151
+ @created_at = Time.iso8601(data[:created_at])
152
+ end
153
+ end
154
+ end