discorb 0.16.0 → 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.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/.github/workflows/build_main.yml +2 -2
- data/.github/workflows/build_version.yml +1 -1
- data/.github/workflows/codeql-analysis.yml +1 -1
- data/.github/workflows/lint-push.yml +3 -5
- data/.github/workflows/lint.yml +2 -4
- data/.github/workflows/spec.yml +33 -0
- data/.github/workflows/validate.yml +21 -0
- data/.gitignore +2 -0
- data/.lefthook/commit-msg/validator.rb +5 -0
- data/.rspec +2 -0
- data/.rspec_parallel +2 -0
- data/.rubocop.yml +43 -6
- data/Changelog.md +30 -1
- data/Gemfile +20 -8
- data/Rakefile +226 -98
- data/Steepfile +28 -0
- data/bin/console +3 -3
- data/docs/Examples.md +1 -1
- data/docs/application_command.md +156 -47
- data/docs/cli/irb.md +2 -2
- data/docs/cli/new.md +14 -9
- data/docs/cli/run.md +7 -11
- data/docs/cli.md +17 -10
- data/docs/events.md +247 -213
- data/docs/extension.md +1 -2
- data/docs/faq.md +0 -1
- data/docs/tutorial.md +18 -18
- data/docs/voice_events.md +106 -106
- data/examples/commands/message.rb +68 -0
- data/examples/commands/permission.rb +19 -0
- data/examples/commands/slash.rb +48 -0
- data/examples/commands/user.rb +54 -0
- data/examples/components/authorization_button.rb +4 -3
- data/examples/components/select_menu.rb +6 -3
- data/examples/extension/main.rb +2 -1
- data/examples/extension/message_expander.rb +6 -2
- data/examples/sig/commands/message.rbs +5 -0
- data/examples/simple/eval.rb +3 -2
- data/examples/simple/ping_pong.rb +2 -1
- data/examples/simple/rolepanel.rb +17 -6
- data/examples/simple/shard.rb +3 -2
- data/examples/simple/wait_for_message.rb +4 -1
- data/exe/discorb +33 -18
- data/lefthook.yml +45 -0
- data/lib/discorb/allowed_mentions.rb +2 -1
- data/lib/discorb/app_command/command.rb +130 -72
- data/lib/discorb/app_command/common.rb +25 -0
- data/lib/discorb/app_command/handler.rb +130 -33
- data/lib/discorb/app_command.rb +2 -1
- data/lib/discorb/application.rb +1 -0
- data/lib/discorb/asset.rb +1 -2
- data/lib/discorb/attachment.rb +1 -1
- data/lib/discorb/audit_logs.rb +19 -10
- data/lib/discorb/automod.rb +269 -0
- data/lib/discorb/channel/base.rb +108 -0
- data/lib/discorb/channel/category.rb +32 -0
- data/lib/discorb/channel/container.rb +44 -0
- data/lib/discorb/channel/dm.rb +28 -0
- data/lib/discorb/channel/guild.rb +246 -0
- data/lib/discorb/channel/stage.rb +140 -0
- data/lib/discorb/channel/text.rb +336 -0
- data/lib/discorb/channel/thread.rb +325 -0
- data/lib/discorb/channel/voice.rb +79 -0
- data/lib/discorb/channel.rb +2 -1165
- data/lib/discorb/client.rb +50 -36
- data/lib/discorb/color.rb +37 -60
- data/lib/discorb/common.rb +2 -1
- data/lib/discorb/components/button.rb +2 -1
- data/lib/discorb/components/select_menu.rb +4 -2
- data/lib/discorb/components/text_input.rb +12 -2
- data/lib/discorb/components.rb +1 -1
- data/lib/discorb/dictionary.rb +1 -1
- data/lib/discorb/embed.rb +26 -10
- data/lib/discorb/emoji.rb +31 -4
- data/lib/discorb/emoji_table.rb +4969 -3
- data/lib/discorb/event.rb +29 -4
- data/lib/discorb/exe/about.rb +2 -1
- data/lib/discorb/exe/irb.rb +2 -4
- data/lib/discorb/exe/new.rb +89 -26
- data/lib/discorb/exe/run.rb +8 -22
- data/lib/discorb/exe/setup.rb +25 -12
- data/lib/discorb/exe/show.rb +4 -3
- data/lib/discorb/extend.rb +1 -0
- data/lib/discorb/extension.rb +6 -7
- data/lib/discorb/flag.rb +13 -2
- data/lib/discorb/gateway.rb +79 -589
- data/lib/discorb/gateway_events.rb +638 -0
- data/lib/discorb/guild.rb +318 -67
- data/lib/discorb/guild_template.rb +11 -5
- data/lib/discorb/http.rb +53 -24
- data/lib/discorb/integration.rb +4 -1
- data/lib/discorb/intents.rb +28 -19
- data/lib/discorb/interaction/autocomplete.rb +28 -16
- data/lib/discorb/interaction/command.rb +42 -14
- data/lib/discorb/interaction/components.rb +5 -2
- data/lib/discorb/interaction/modal.rb +0 -1
- data/lib/discorb/interaction/response.rb +125 -26
- data/lib/discorb/interaction/root.rb +13 -13
- data/lib/discorb/interaction.rb +1 -0
- data/lib/discorb/invite.rb +5 -2
- data/lib/discorb/member.rb +28 -8
- data/lib/discorb/message.rb +60 -25
- data/lib/discorb/message_meta.rb +3 -3
- data/lib/discorb/modules.rb +59 -16
- data/lib/discorb/presence.rb +2 -0
- data/lib/discorb/rate_limit.rb +7 -2
- data/lib/discorb/reaction.rb +2 -2
- data/lib/discorb/role.rb +20 -5
- data/lib/discorb/shard.rb +1 -1
- data/lib/discorb/sticker.rb +9 -8
- data/lib/discorb/user.rb +4 -3
- data/lib/discorb/utils/colored_puts.rb +1 -0
- data/lib/discorb/voice_state.rb +6 -2
- data/lib/discorb/webhook.rb +64 -31
- data/lib/discorb.rb +7 -5
- data/po/yard.pot +20 -20
- data/rbs_collection.lock.yaml +88 -0
- data/rbs_collection.yaml +21 -0
- data/sig/async.rbs +11 -0
- data/sig/discorb/activity.rbs +23 -0
- data/sig/discorb/allowed_mentions.rbs +44 -0
- data/sig/discorb/app_command/base.rbs +282 -0
- data/sig/discorb/app_command/handler.rbs +171 -0
- data/sig/discorb/application.rbs +142 -0
- data/sig/discorb/asset.rbs +32 -0
- data/sig/discorb/attachment.rbs +91 -0
- data/sig/discorb/audit_log.rbs +231 -0
- data/sig/discorb/automod.rbs +128 -0
- data/sig/discorb/avatar.rbs +26 -0
- data/sig/discorb/channel/base.rbs +179 -0
- data/sig/discorb/channel/category.rbs +56 -0
- data/sig/discorb/channel/container.rbs +29 -0
- data/sig/discorb/channel/dm.rbs +14 -0
- data/sig/discorb/channel/news.rbs +20 -0
- data/sig/discorb/channel/stage.rbs +77 -0
- data/sig/discorb/channel/text.rbs +158 -0
- data/sig/discorb/channel/thread.rbs +185 -0
- data/sig/discorb/channel/voice.rbs +41 -0
- data/sig/discorb/client.rbs +2495 -0
- data/sig/discorb/color.rbs +142 -0
- data/sig/discorb/component/base.rbs +28 -0
- data/sig/discorb/component/button.rbs +65 -0
- data/sig/discorb/component/select_menu.rbs +107 -0
- data/sig/discorb/component/text_input.rbs +69 -0
- data/sig/discorb/connectable.rbs +8 -0
- data/sig/discorb/custom_emoji.rbs +90 -0
- data/sig/discorb/dictionary.rbs +85 -0
- data/sig/discorb/discord_model.rbs +15 -0
- data/sig/discorb/embed.rbs +279 -0
- data/sig/discorb/emoji.rbs +13 -0
- data/sig/discorb/error.rbs +73 -0
- data/sig/discorb/event_handler.rbs +27 -0
- data/sig/discorb/extension.rbs +1734 -0
- data/sig/discorb/flag.rbs +72 -0
- data/sig/discorb/gateway.rbs +481 -0
- data/sig/discorb/guild.rbs +870 -0
- data/sig/discorb/guild_template.rbs +174 -0
- data/sig/discorb/http.rbs +147 -0
- data/sig/discorb/image.rbs +20 -0
- data/sig/discorb/integration.rbs +118 -0
- data/sig/discorb/intents.rbs +97 -0
- data/sig/discorb/interaction/autocomplete.rbs +9 -0
- data/sig/discorb/interaction/base.rbs +66 -0
- data/sig/discorb/interaction/command.rbs +66 -0
- data/sig/discorb/interaction/message_component.rbs +140 -0
- data/sig/discorb/interaction/modal.rbs +50 -0
- data/sig/discorb/interaction/responder.rbs +157 -0
- data/sig/discorb/invite.rbs +86 -0
- data/sig/discorb/member.rbs +187 -0
- data/sig/discorb/message.rbs +469 -0
- data/sig/discorb/messageable.rbs +153 -0
- data/sig/discorb/partial_emoji.rbs +35 -0
- data/sig/discorb/permissions.rbs +149 -0
- data/sig/discorb/presence.rbs +237 -0
- data/sig/discorb/reaction.rbs +33 -0
- data/sig/discorb/role.rbs +145 -0
- data/sig/discorb/scheduled_event.rbs +148 -0
- data/sig/discorb/shard.rbs +62 -0
- data/sig/discorb/snowflake.rbs +56 -0
- data/sig/discorb/stage_instance.rbs +63 -0
- data/sig/discorb/sticker.rbs +116 -0
- data/sig/discorb/system_channel_flag.rbs +17 -0
- data/sig/discorb/unicode_emoji.rbs +49 -0
- data/sig/discorb/user.rbs +93 -0
- data/sig/discorb/utils.rbs +8 -0
- data/sig/discorb/voice_region.rbs +30 -0
- data/sig/discorb/voice_state.rbs +71 -0
- data/sig/discorb/webhook.rbs +327 -0
- data/sig/discorb/welcome_screen.rbs +78 -0
- data/sig/discorb.rbs +6 -7230
- data/sig/manifest.yaml +3 -0
- data/sig/override.rbs +19 -0
- data/template-replace/files/css/common.css +4 -0
- metadata +102 -6
- data/examples/commands/bookmarker.rb +0 -42
- data/examples/commands/hello.rb +0 -10
- data/examples/commands/inspect.rb +0 -25
data/lib/discorb/modules.rb
CHANGED
|
@@ -21,8 +21,17 @@ module Discorb
|
|
|
21
21
|
#
|
|
22
22
|
# @return [Async::Task<Discorb::Message>] The message sent.
|
|
23
23
|
#
|
|
24
|
-
def post(
|
|
25
|
-
|
|
24
|
+
def post(
|
|
25
|
+
content = nil,
|
|
26
|
+
tts: false,
|
|
27
|
+
embed: nil,
|
|
28
|
+
embeds: nil,
|
|
29
|
+
allowed_mentions: nil,
|
|
30
|
+
reference: nil,
|
|
31
|
+
components: nil,
|
|
32
|
+
attachment: nil,
|
|
33
|
+
attachments: nil
|
|
34
|
+
)
|
|
26
35
|
Async do
|
|
27
36
|
payload = {}
|
|
28
37
|
payload[:content] = content if content
|
|
@@ -35,7 +44,7 @@ module Discorb
|
|
|
35
44
|
payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
|
|
36
45
|
payload[:allowed_mentions] =
|
|
37
46
|
allowed_mentions ? allowed_mentions.to_hash(@client.allowed_mentions) : @client.allowed_mentions.to_hash
|
|
38
|
-
payload[:message_reference] = reference.to_reference if reference
|
|
47
|
+
payload[:message_reference] = reference.to_reference.to_hash if reference
|
|
39
48
|
payload[:components] = Component.to_payload(components) if components
|
|
40
49
|
attachments ||= attachment ? [attachment] : []
|
|
41
50
|
|
|
@@ -47,7 +56,10 @@ module Discorb
|
|
|
47
56
|
}
|
|
48
57
|
end
|
|
49
58
|
|
|
50
|
-
_resp, data = @client.http.multipart_request(
|
|
59
|
+
_resp, data = @client.http.multipart_request(
|
|
60
|
+
Route.new("/channels/#{channel_id.wait}/messages", "//channels/:channel_id/messages",
|
|
61
|
+
:post), payload, attachments
|
|
62
|
+
).wait
|
|
51
63
|
Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
|
|
52
64
|
end
|
|
53
65
|
end
|
|
@@ -70,8 +82,16 @@ module Discorb
|
|
|
70
82
|
#
|
|
71
83
|
# @return [Async::Task<void>] The task.
|
|
72
84
|
#
|
|
73
|
-
def edit_message(
|
|
74
|
-
|
|
85
|
+
def edit_message(
|
|
86
|
+
message_id,
|
|
87
|
+
content = Discorb::Unset,
|
|
88
|
+
embed: Discorb::Unset,
|
|
89
|
+
embeds: Discorb::Unset,
|
|
90
|
+
allowed_mentions: Discorb::Unset,
|
|
91
|
+
attachments: Discorb::Unset,
|
|
92
|
+
components: Discorb::Unset,
|
|
93
|
+
supress: Discorb::Unset
|
|
94
|
+
)
|
|
75
95
|
Async do
|
|
76
96
|
payload = {}
|
|
77
97
|
payload[:content] = content if content != Discorb::Unset
|
|
@@ -81,8 +101,11 @@ module Discorb
|
|
|
81
101
|
embeds
|
|
82
102
|
end
|
|
83
103
|
payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
|
|
84
|
-
payload[:allowed_mentions] =
|
|
85
|
-
|
|
104
|
+
payload[:allowed_mentions] = if allowed_mentions == Discorb::Unset
|
|
105
|
+
@client.allowed_mentions.to_hash
|
|
106
|
+
else
|
|
107
|
+
allowed_mentions.to_hash(@client.allowed_mentions)
|
|
108
|
+
end
|
|
86
109
|
payload[:components] = Component.to_payload(components) if components != Discorb::Unset
|
|
87
110
|
payload[:flags] = (supress ? 1 << 2 : 0) if supress != Discorb::Unset
|
|
88
111
|
if attachments != Discorb::Unset
|
|
@@ -95,7 +118,8 @@ module Discorb
|
|
|
95
118
|
end
|
|
96
119
|
end
|
|
97
120
|
@client.http.multipart_request(
|
|
98
|
-
Route.new("/channels/#{channel_id.wait}/messages/#{message_id}",
|
|
121
|
+
Route.new("/channels/#{channel_id.wait}/messages/#{message_id}",
|
|
122
|
+
"//channels/:channel_id/messages/:message_id", :patch),
|
|
99
123
|
payload,
|
|
100
124
|
attachments == Discorb::Unset ? [] : attachments
|
|
101
125
|
).wait
|
|
@@ -113,7 +137,12 @@ module Discorb
|
|
|
113
137
|
#
|
|
114
138
|
def delete_message!(message_id, reason: nil)
|
|
115
139
|
Async do
|
|
116
|
-
@client.http.request(
|
|
140
|
+
@client.http.request(
|
|
141
|
+
Route.new(
|
|
142
|
+
"/channels/#{channel_id.wait}/messages/#{message_id}", "//channels/:channel_id/messages/:message_id",
|
|
143
|
+
:delete
|
|
144
|
+
), {}, audit_log_reason: reason,
|
|
145
|
+
).wait
|
|
117
146
|
end
|
|
118
147
|
end
|
|
119
148
|
|
|
@@ -130,7 +159,8 @@ module Discorb
|
|
|
130
159
|
#
|
|
131
160
|
def fetch_message(id)
|
|
132
161
|
Async do
|
|
133
|
-
_resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/messages/#{id}",
|
|
162
|
+
_resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/messages/#{id}",
|
|
163
|
+
"//channels/:channel_id/messages/:message_id", :get)).wait
|
|
134
164
|
Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
|
|
135
165
|
end
|
|
136
166
|
end
|
|
@@ -154,7 +184,12 @@ module Discorb
|
|
|
154
184
|
after: Discorb::Utils.try(around, :id),
|
|
155
185
|
around: Discorb::Utils.try(before, :id),
|
|
156
186
|
}.filter { |_k, v| !v.nil? }.to_h
|
|
157
|
-
_resp, messages = @client.http.request(
|
|
187
|
+
_resp, messages = @client.http.request(
|
|
188
|
+
Route.new(
|
|
189
|
+
"/channels/#{channel_id.wait}/messages?#{URI.encode_www_form(params)}", "//channels/:channel_id/messages",
|
|
190
|
+
:get
|
|
191
|
+
)
|
|
192
|
+
).wait
|
|
158
193
|
messages.map { |m| Message.new(@client, m.merge({ guild_id: @guild_id.to_s })) }
|
|
159
194
|
end
|
|
160
195
|
end
|
|
@@ -167,7 +202,8 @@ module Discorb
|
|
|
167
202
|
#
|
|
168
203
|
def fetch_pins
|
|
169
204
|
Async do
|
|
170
|
-
_resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/pins",
|
|
205
|
+
_resp, data = @client.http.request(Route.new("/channels/#{channel_id.wait}/pins",
|
|
206
|
+
"//channels/:channel_id/pins", :get)).wait
|
|
171
207
|
data.map { |pin| Message.new(@client, pin) }
|
|
172
208
|
end
|
|
173
209
|
end
|
|
@@ -183,7 +219,10 @@ module Discorb
|
|
|
183
219
|
#
|
|
184
220
|
def pin_message(message, reason: nil)
|
|
185
221
|
Async do
|
|
186
|
-
@client.http.request(
|
|
222
|
+
@client.http.request(
|
|
223
|
+
Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id",
|
|
224
|
+
:put), {}, audit_log_reason: reason,
|
|
225
|
+
).wait
|
|
187
226
|
end
|
|
188
227
|
end
|
|
189
228
|
|
|
@@ -198,7 +237,10 @@ module Discorb
|
|
|
198
237
|
#
|
|
199
238
|
def unpin_message(message, reason: nil)
|
|
200
239
|
Async do
|
|
201
|
-
@client.http.request(
|
|
240
|
+
@client.http.request(
|
|
241
|
+
Route.new("/channels/#{channel_id.wait}/pins/#{message.id}", "//channels/:channel_id/pins/:message_id",
|
|
242
|
+
:delete), {}, audit_log_reason: reason,
|
|
243
|
+
).wait
|
|
202
244
|
end
|
|
203
245
|
end
|
|
204
246
|
|
|
@@ -223,10 +265,11 @@ module Discorb
|
|
|
223
265
|
sleep(5)
|
|
224
266
|
end
|
|
225
267
|
end
|
|
226
|
-
yield
|
|
268
|
+
ret = yield
|
|
227
269
|
ensure
|
|
228
270
|
post_task.stop
|
|
229
271
|
end
|
|
272
|
+
ret
|
|
230
273
|
else
|
|
231
274
|
Async do |_task|
|
|
232
275
|
@client.http.request(Route.new("/channels/#{@id}/typing", "//channels/:channel_id/typing", :post), {})
|
data/lib/discorb/presence.rb
CHANGED
data/lib/discorb/rate_limit.rb
CHANGED
|
@@ -48,7 +48,8 @@ module Discorb
|
|
|
48
48
|
return if (bucket[:remaining]).positive?
|
|
49
49
|
|
|
50
50
|
time = bucket[:reset_at] - Time.now.to_f
|
|
51
|
-
@client.logger.info("rate limit for #{path.identifier} with #{path.major_param} reached,
|
|
51
|
+
@client.logger.info("rate limit for #{path.identifier} with #{path.major_param} reached, " \
|
|
52
|
+
"waiting #{time.round(4)} seconds")
|
|
52
53
|
sleep(time)
|
|
53
54
|
end
|
|
54
55
|
|
|
@@ -59,8 +60,12 @@ module Discorb
|
|
|
59
60
|
# @param [Net::HTTPResponse] resp The response.
|
|
60
61
|
#
|
|
61
62
|
def save(path, resp)
|
|
62
|
-
|
|
63
|
+
if resp["X-Ratelimit-Global"] == "true"
|
|
64
|
+
@global = Time.now.to_f + JSON.parse(resp.body,
|
|
65
|
+
symbolize_names: true)[:retry_after]
|
|
66
|
+
end
|
|
63
67
|
return unless resp["X-RateLimit-Remaining"]
|
|
68
|
+
|
|
64
69
|
@path_ratelimit_hash[path.identifier] = resp["X-Ratelimit-Bucket"]
|
|
65
70
|
@path_ratelimit_bucket[resp["X-Ratelimit-Bucket"] + path.major_param] = {
|
|
66
71
|
remaining: resp["X-RateLimit-Remaining"].to_i,
|
data/lib/discorb/reaction.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Discorb
|
|
|
7
7
|
class Reaction < DiscordModel
|
|
8
8
|
# @return [Integer] The number of users that have reacted with this emoji.
|
|
9
9
|
attr_reader :count
|
|
10
|
-
# @return [Discorb::Emoji] The emoji that was reacted with.
|
|
10
|
+
# @return [Discorb::Emoji, Discorb::PartialEmoji] The emoji that was reacted with.
|
|
11
11
|
attr_reader :emoji
|
|
12
12
|
# @return [Discorb::Message] The message that this reaction is on.
|
|
13
13
|
attr_reader :message
|
|
@@ -33,7 +33,7 @@ module Discorb
|
|
|
33
33
|
#
|
|
34
34
|
# @param (see Message#fetch_reacted_users)
|
|
35
35
|
#
|
|
36
|
-
# @return [Array<Discorb::User
|
|
36
|
+
# @return [Async::Task<Array<Discorb::User>>] The users that reacted with this emoji.
|
|
37
37
|
#
|
|
38
38
|
def fetch_users(...)
|
|
39
39
|
message.fetch_reacted_users(@emoji, ...)
|
data/lib/discorb/role.rb
CHANGED
|
@@ -69,7 +69,7 @@ module Discorb
|
|
|
69
69
|
# @return [Integer] -1 if the other role is higher, 0 if they are equal, 1 if the other role is lower.
|
|
70
70
|
#
|
|
71
71
|
def <=>(other)
|
|
72
|
-
return
|
|
72
|
+
return nil unless other.is_a?(Role)
|
|
73
73
|
|
|
74
74
|
@position <=> other.position
|
|
75
75
|
end
|
|
@@ -106,7 +106,8 @@ module Discorb
|
|
|
106
106
|
#
|
|
107
107
|
def move(position, reason: nil)
|
|
108
108
|
Async do
|
|
109
|
-
@client.http.request(Route.new("/guilds/#{@guild.id}/roles", "//guilds/:guild_id/roles", :patch),
|
|
109
|
+
@client.http.request(Route.new("/guilds/#{@guild.id}/roles", "//guilds/:guild_id/roles", :patch),
|
|
110
|
+
{ id: @id, position: position }, audit_log_reason: reason).wait
|
|
110
111
|
end
|
|
111
112
|
end
|
|
112
113
|
|
|
@@ -125,7 +126,15 @@ module Discorb
|
|
|
125
126
|
#
|
|
126
127
|
# @return [Async::Task<void>] The task.
|
|
127
128
|
#
|
|
128
|
-
def edit(
|
|
129
|
+
def edit(
|
|
130
|
+
name: Discorb::Unset,
|
|
131
|
+
position: Discorb::Unset,
|
|
132
|
+
color: Discorb::Unset,
|
|
133
|
+
hoist: Discorb::Unset,
|
|
134
|
+
mentionable: Discorb::Unset,
|
|
135
|
+
icon: Discorb::Unset,
|
|
136
|
+
reason: nil
|
|
137
|
+
)
|
|
129
138
|
Async do
|
|
130
139
|
payload = {}
|
|
131
140
|
payload[:name] = name if name != Discorb::Unset
|
|
@@ -140,7 +149,10 @@ module Discorb
|
|
|
140
149
|
payload[:unicode_emoji] = icon.to_s
|
|
141
150
|
end
|
|
142
151
|
end
|
|
143
|
-
@client.http.request(
|
|
152
|
+
@client.http.request(
|
|
153
|
+
Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id",
|
|
154
|
+
:patch), payload, audit_log_reason: reason,
|
|
155
|
+
).wait
|
|
144
156
|
end
|
|
145
157
|
end
|
|
146
158
|
|
|
@@ -155,7 +167,10 @@ module Discorb
|
|
|
155
167
|
#
|
|
156
168
|
def delete!(reason: nil)
|
|
157
169
|
Async do
|
|
158
|
-
@client.http.request(
|
|
170
|
+
@client.http.request(
|
|
171
|
+
Route.new("/guilds/#{@guild.id}/roles/#{@id}", "//guilds/:guild_id/roles/:role_id",
|
|
172
|
+
:delete), {}, audit_log_reason: reason,
|
|
173
|
+
).wait
|
|
159
174
|
end
|
|
160
175
|
end
|
|
161
176
|
|
data/lib/discorb/shard.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Discorb
|
|
|
41
41
|
Thread.current.thread_variable_set("shard", self)
|
|
42
42
|
if @index.positive?
|
|
43
43
|
Thread.stop
|
|
44
|
-
sleep 5
|
|
44
|
+
sleep 5 # Somehow discord disconnects the shard without a little sleep.
|
|
45
45
|
end
|
|
46
46
|
client.send(:main_loop, id)
|
|
47
47
|
end
|
data/lib/discorb/sticker.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Discorb
|
|
|
17
17
|
attr_reader :format
|
|
18
18
|
# @return [String] The URL of the sticker.
|
|
19
19
|
attr_reader :description
|
|
20
|
-
# @return [Discorb::
|
|
20
|
+
# @return [Discorb::Snowflake] The ID of the sticker pack.
|
|
21
21
|
attr_reader :pack_id
|
|
22
22
|
# @return [Integer] The sort value of the sticker.
|
|
23
23
|
attr_reader :sort_value
|
|
@@ -85,7 +85,10 @@ module Discorb
|
|
|
85
85
|
payload[:name] = name unless name == Discorb::Unset
|
|
86
86
|
payload[:description] = description unless description == Discorb::Unset
|
|
87
87
|
payload[:tags] = tag.name unless tag == Discorb::Unset
|
|
88
|
-
@client.http.request(
|
|
88
|
+
@client.http.request(
|
|
89
|
+
Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
|
|
90
|
+
:patch), payload, audit_log_reason: reason,
|
|
91
|
+
).wait
|
|
89
92
|
end
|
|
90
93
|
end
|
|
91
94
|
|
|
@@ -99,7 +102,10 @@ module Discorb
|
|
|
99
102
|
#
|
|
100
103
|
def delete!(reason: nil)
|
|
101
104
|
Async do
|
|
102
|
-
@client.http.request(
|
|
105
|
+
@client.http.request(
|
|
106
|
+
Route.new("/guilds/#{@guild_id}/stickers/#{@id}", "//guilds/:guild_id/stickers/:sticker_id",
|
|
107
|
+
:delete), {}, audit_log_reason: reason,
|
|
108
|
+
).wait
|
|
103
109
|
end
|
|
104
110
|
end
|
|
105
111
|
|
|
@@ -161,10 +167,5 @@ module Discorb
|
|
|
161
167
|
@user = data[:user] && (@client.users[data[:user][:id]] || User.new(@client, data[:user]))
|
|
162
168
|
end
|
|
163
169
|
end
|
|
164
|
-
|
|
165
|
-
class << self
|
|
166
|
-
# @private
|
|
167
|
-
attr_reader :sticker_type, :sticker_format
|
|
168
|
-
end
|
|
169
170
|
end
|
|
170
171
|
end
|
data/lib/discorb/user.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Discorb
|
|
|
16
16
|
attr_reader :flag
|
|
17
17
|
# @return [String] The user's discriminator.
|
|
18
18
|
attr_reader :discriminator
|
|
19
|
-
# @return [Discorb::Asset] The user's avatar.
|
|
19
|
+
# @return [Discorb::Asset, Discorb::DefaultAvatar] The user's avatar.
|
|
20
20
|
attr_reader :avatar
|
|
21
21
|
# @return [Boolean] Whether the user is a bot.
|
|
22
22
|
attr_reader :bot
|
|
@@ -95,7 +95,8 @@ module Discorb
|
|
|
95
95
|
Async do
|
|
96
96
|
next @dm_channel_id if @dm_channel_id
|
|
97
97
|
|
|
98
|
-
_resp, dm_channel = @client.http.request(Route.new("/users/@me/channels", "//users/@me/channels", :post),
|
|
98
|
+
_resp, dm_channel = @client.http.request(Route.new("/users/@me/channels", "//users/@me/channels", :post),
|
|
99
|
+
{ recipient_id: @id }).wait
|
|
99
100
|
@dm_channel_id = dm_channel[:id]
|
|
100
101
|
@dm_channel_id
|
|
101
102
|
end
|
|
@@ -146,7 +147,7 @@ module Discorb
|
|
|
146
147
|
@flag = User::Flag.new(data[:public_flags] | (data[:flags] || 0))
|
|
147
148
|
@discriminator = data[:discriminator]
|
|
148
149
|
@avatar = data[:avatar] ? Asset.new(self, data[:avatar]) : DefaultAvatar.new(data[:discriminator])
|
|
149
|
-
@bot = data[:bot]
|
|
150
|
+
@bot = data[:bot] || false
|
|
150
151
|
@raw_data = data
|
|
151
152
|
@client.users[@id] = self unless data[:no_cache]
|
|
152
153
|
@created_at = @id.timestamp
|
data/lib/discorb/voice_state.rb
CHANGED
|
@@ -197,7 +197,8 @@ module Discorb
|
|
|
197
197
|
payload[:topic] = topic if topic != Discorb::Unset
|
|
198
198
|
payload[:privacy_level] = PRIVACY_LEVEL.key(privacy_level) if privacy_level != Discorb::Unset
|
|
199
199
|
@client.http.request(
|
|
200
|
-
Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:channel_id",
|
|
200
|
+
Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:channel_id",
|
|
201
|
+
:patch), payload, audit_log_reason: reason,
|
|
201
202
|
).wait
|
|
202
203
|
self
|
|
203
204
|
end
|
|
@@ -214,7 +215,10 @@ module Discorb
|
|
|
214
215
|
#
|
|
215
216
|
def delete!(reason: nil)
|
|
216
217
|
Async do
|
|
217
|
-
@client.http.request(
|
|
218
|
+
@client.http.request(
|
|
219
|
+
Route.new("/stage-instances/#{@channel_id}", "//stage-instances/:stage_instance_id",
|
|
220
|
+
:delete), {}, audit_log_reason: reason,
|
|
221
|
+
).wait
|
|
218
222
|
self
|
|
219
223
|
end
|
|
220
224
|
end
|
data/lib/discorb/webhook.rb
CHANGED
|
@@ -56,8 +56,8 @@ module Discorb
|
|
|
56
56
|
# @param [Discorb::Embed] embed The embed to send.
|
|
57
57
|
# @param [Array<Discorb::Embed>] embeds The embeds to send.
|
|
58
58
|
# @param [Discorb::AllowedMentions] allowed_mentions The allowed mentions to send.
|
|
59
|
-
# @param [Discorb::
|
|
60
|
-
# @param [Array<Discorb::
|
|
59
|
+
# @param [Discorb::Attachment] attachment The attachment to send.
|
|
60
|
+
# @param [Array<Discorb::Attachment>] attachment The attachments to send.
|
|
61
61
|
# @param [String] username The username of the message.
|
|
62
62
|
# @param [String] avatar_url The avatar URL of the message.
|
|
63
63
|
# @param [Boolean] wait Whether to wait for the message to be sent.
|
|
@@ -65,8 +65,18 @@ module Discorb
|
|
|
65
65
|
# @return [Discorb::Webhook::Message] The message that was sent.
|
|
66
66
|
# @return [Async::Task<nil>] If `wait` is false.
|
|
67
67
|
#
|
|
68
|
-
def post(
|
|
69
|
-
|
|
68
|
+
def post(
|
|
69
|
+
content = nil,
|
|
70
|
+
tts: false,
|
|
71
|
+
embed: nil,
|
|
72
|
+
embeds: nil,
|
|
73
|
+
allowed_mentions: nil,
|
|
74
|
+
attachment: nil,
|
|
75
|
+
attachments: nil,
|
|
76
|
+
username: nil,
|
|
77
|
+
avatar_url: Discorb::Unset,
|
|
78
|
+
wait: true
|
|
79
|
+
)
|
|
70
80
|
Async do
|
|
71
81
|
payload = {}
|
|
72
82
|
payload[:content] = content if content
|
|
@@ -80,8 +90,16 @@ module Discorb
|
|
|
80
90
|
payload[:allowed_mentions] = allowed_mentions&.to_hash
|
|
81
91
|
payload[:username] = username if username
|
|
82
92
|
payload[:avatar_url] = avatar_url if avatar_url != Discorb::Unset
|
|
83
|
-
|
|
84
|
-
_resp, data = @http.multipart_request(
|
|
93
|
+
attachments = [attachment] if attachment
|
|
94
|
+
_resp, data = @http.multipart_request(
|
|
95
|
+
Route.new(
|
|
96
|
+
"#{url}?wait=#{wait}",
|
|
97
|
+
"//webhooks/:webhook_id/:token",
|
|
98
|
+
:post
|
|
99
|
+
),
|
|
100
|
+
attachments,
|
|
101
|
+
payload
|
|
102
|
+
).wait
|
|
85
103
|
data && Webhook::Message.new(self, data)
|
|
86
104
|
end
|
|
87
105
|
end
|
|
@@ -136,8 +154,8 @@ module Discorb
|
|
|
136
154
|
# @param [Discorb::Embed] embed The new embed of the message.
|
|
137
155
|
# @param [Array<Discorb::Embed>] embeds The new embeds of the message.
|
|
138
156
|
# @param [Array<Discorb::Attachment>] attachments The attachments to remain.
|
|
139
|
-
# @param [Discorb::
|
|
140
|
-
# @param [Array<Discorb::
|
|
157
|
+
# @param [Discorb::Attachment] file The file to send.
|
|
158
|
+
# @param [Array<Discorb::Attachment>] files The files to send.
|
|
141
159
|
# @param [Discorb::AllowedMentions] allowed_mentions The allowed mentions to send.
|
|
142
160
|
#
|
|
143
161
|
# @return [Async::Task<void>] The task.
|
|
@@ -157,7 +175,10 @@ module Discorb
|
|
|
157
175
|
payload[:attachments] = attachments.map(&:to_hash) if attachments != Discorb::Unset
|
|
158
176
|
payload[:allowed_mentions] = allowed_mentions if allowed_mentions != Discorb::Unset
|
|
159
177
|
files = [file] if file != Discorb::Unset
|
|
160
|
-
_resp, data = @http.multipart_request(
|
|
178
|
+
_resp, data = @http.multipart_request(
|
|
179
|
+
Route.new("#{url}/messages/#{Utils.try(message, :id)}", "//webhooks/:webhook_id/:token/messages/:message_id",
|
|
180
|
+
:patch), payload, files
|
|
181
|
+
).wait
|
|
161
182
|
message.send(:_set_data, data)
|
|
162
183
|
message
|
|
163
184
|
end
|
|
@@ -172,10 +193,12 @@ module Discorb
|
|
|
172
193
|
#
|
|
173
194
|
def delete_message!(message)
|
|
174
195
|
Async do
|
|
175
|
-
@http.request(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
196
|
+
@http.request(
|
|
197
|
+
Route.new(
|
|
198
|
+
"#{url}/messages/#{Utils.try(message, :id)}",
|
|
199
|
+
"//webhooks/:webhook_id/:token/messages/:message_id", :delete
|
|
200
|
+
)
|
|
201
|
+
).wait
|
|
179
202
|
message
|
|
180
203
|
end
|
|
181
204
|
end
|
|
@@ -191,11 +214,12 @@ module Discorb
|
|
|
191
214
|
# Initializes the webhook from URL.
|
|
192
215
|
#
|
|
193
216
|
# @param [String] url The URL of the webhook.
|
|
217
|
+
# @param [Discorb::Client] client The client to associate with the webhook.
|
|
194
218
|
#
|
|
195
|
-
def initialize(url)
|
|
219
|
+
def initialize(url, client: nil)
|
|
196
220
|
@url = url
|
|
197
221
|
@token = ""
|
|
198
|
-
@http = Discorb::HTTP.new(
|
|
222
|
+
@http = Discorb::HTTP.new(client || Discorb::Client.new)
|
|
199
223
|
end
|
|
200
224
|
end
|
|
201
225
|
|
|
@@ -443,29 +467,38 @@ module Discorb
|
|
|
443
467
|
# Creates URLWebhook.
|
|
444
468
|
#
|
|
445
469
|
# @param [String] url The URL of the webhook.
|
|
470
|
+
# @param [Discorb::Client] client The client to associate with the webhook.
|
|
446
471
|
#
|
|
447
472
|
# @return [Discorb::Webhook::URLWebhook] The URLWebhook.
|
|
448
473
|
#
|
|
449
|
-
def new(url)
|
|
450
|
-
if self
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
return super
|
|
454
|
-
end
|
|
455
|
-
if url.is_a?(String)
|
|
456
|
-
URLWebhook.new(url)
|
|
474
|
+
def new(url, client: nil)
|
|
475
|
+
if self == Webhook
|
|
476
|
+
URLWebhook.new(url, client: client)
|
|
457
477
|
else
|
|
458
|
-
|
|
459
|
-
when 1
|
|
460
|
-
IncomingWebhook
|
|
461
|
-
when 2
|
|
462
|
-
FollowerWebhook
|
|
463
|
-
when 3
|
|
464
|
-
ApplicationWebhook
|
|
465
|
-
end.new(url)
|
|
478
|
+
super
|
|
466
479
|
end
|
|
467
480
|
end
|
|
468
481
|
|
|
482
|
+
#
|
|
483
|
+
# Creates Webhook with discord data.
|
|
484
|
+
# @private
|
|
485
|
+
#
|
|
486
|
+
# @param [Discorb::Client] client The client.
|
|
487
|
+
# @param [Hash] data The data of the webhook.
|
|
488
|
+
#
|
|
489
|
+
# @return [Discorb::Webhook] The Webhook.
|
|
490
|
+
#
|
|
491
|
+
def from_data(client, data)
|
|
492
|
+
case data[:type]
|
|
493
|
+
when 1
|
|
494
|
+
IncomingWebhook
|
|
495
|
+
when 2
|
|
496
|
+
FollowerWebhook
|
|
497
|
+
when 3
|
|
498
|
+
ApplicationWebhook
|
|
499
|
+
end.new(client, data)
|
|
500
|
+
end
|
|
501
|
+
|
|
469
502
|
def from_url(url)
|
|
470
503
|
URLWebhook.new(url)
|
|
471
504
|
end
|
data/lib/discorb.rb
CHANGED
|
@@ -9,7 +9,8 @@ module Discorb
|
|
|
9
9
|
# @private
|
|
10
10
|
#
|
|
11
11
|
# @!macro [new] async
|
|
12
|
-
# @note This is an asynchronous method, it will return a `Async::Task` object.
|
|
12
|
+
# @note This is an asynchronous method, it will return a `Async::Task` object.
|
|
13
|
+
# Use `Async::Task#wait` to get the result.
|
|
13
14
|
#
|
|
14
15
|
# @!macro [new] client_cache
|
|
15
16
|
# @note This method returns an object from client cache. it will return `nil` if the object is not in cache.
|
|
@@ -19,7 +20,8 @@ module Discorb
|
|
|
19
20
|
# @note You must enable `GUILD_MEMBERS` intent to use this method.
|
|
20
21
|
#
|
|
21
22
|
# @!macro edit
|
|
22
|
-
# @note The arguments of this method are defaultly set to `Discorb::Unset`.
|
|
23
|
+
# @note The arguments of this method are defaultly set to `Discorb::Unset`.
|
|
24
|
+
# Specify value to set the value, if not don't specify or specify `Discorb::Unset`.
|
|
23
25
|
#
|
|
24
26
|
# @!macro http
|
|
25
27
|
# @note This method calls HTTP request.
|
|
@@ -42,12 +44,12 @@ module Discorb
|
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
require_order = %w[common flag dictionary error rate_limit http intents emoji_table modules] +
|
|
45
|
-
%w[message_meta allowed_mentions] +
|
|
47
|
+
%w[channel/container message_meta allowed_mentions] +
|
|
46
48
|
%w[user member guild emoji channel embed message] +
|
|
47
|
-
%w[application audit_logs color components event event_handler] +
|
|
49
|
+
%w[application audit_logs color components event event_handler automod] +
|
|
48
50
|
%w[attachment guild_template image integration interaction invite permission] +
|
|
49
51
|
%w[presence reaction role sticker utils voice_state webhook] +
|
|
50
|
-
%w[gateway_requests gateway app_command] +
|
|
52
|
+
%w[gateway_requests gateway_events gateway app_command] +
|
|
51
53
|
%w[asset extension shard client extend]
|
|
52
54
|
require_order.each do |name|
|
|
53
55
|
require_relative "discorb/#{name}.rb"
|