discorb 0.13.0 → 0.13.1

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_main.yml +1 -0
  3. data/.github/workflows/build_version.yml +1 -0
  4. data/.github/workflows/crowdin.yml +32 -0
  5. data/.gitignore +3 -1
  6. data/.yardopts +2 -0
  7. data/Changelog.md +399 -388
  8. data/Gemfile +5 -1
  9. data/README.md +1 -1
  10. data/Rakefile +139 -9
  11. data/crowdin.yml +2 -0
  12. data/docs/Examples.md +2 -0
  13. data/docs/application_command.md +7 -5
  14. data/docs/cli/irb.md +2 -0
  15. data/docs/cli/new.md +2 -0
  16. data/docs/cli/run.md +3 -1
  17. data/docs/cli/setup.md +4 -2
  18. data/docs/cli.md +2 -0
  19. data/docs/events.md +6 -4
  20. data/docs/extension.md +2 -2
  21. data/docs/faq.md +4 -2
  22. data/docs/license.md +2 -0
  23. data/docs/tutorial.md +4 -3
  24. data/docs/voice_events.md +2 -0
  25. data/lib/discorb/app_command.rb +8 -7
  26. data/lib/discorb/application.rb +1 -1
  27. data/lib/discorb/channel.rb +100 -76
  28. data/lib/discorb/client.rb +13 -15
  29. data/lib/discorb/common.rb +3 -1
  30. data/lib/discorb/emoji.rb +5 -7
  31. data/lib/discorb/emoji_table.rb +3891 -3891
  32. data/lib/discorb/event.rb +8 -7
  33. data/lib/discorb/exe/show.rb +2 -0
  34. data/lib/discorb/extension.rb +1 -1
  35. data/lib/discorb/flag.rb +1 -1
  36. data/lib/discorb/gateway.rb +9 -13
  37. data/lib/discorb/guild.rb +63 -89
  38. data/lib/discorb/guild_template.rb +12 -9
  39. data/lib/discorb/http.rb +82 -44
  40. data/lib/discorb/integration.rb +3 -0
  41. data/lib/discorb/interaction/response.rb +27 -25
  42. data/lib/discorb/interaction/root.rb +8 -0
  43. data/lib/discorb/invite.rb +3 -2
  44. data/lib/discorb/member.rb +41 -12
  45. data/lib/discorb/message.rb +28 -17
  46. data/lib/discorb/modules.rb +19 -26
  47. data/lib/discorb/role.rb +15 -11
  48. data/lib/discorb/sticker.rb +8 -12
  49. data/lib/discorb/user.rb +7 -7
  50. data/lib/discorb/voice_state.rb +8 -5
  51. data/lib/discorb/webhook.rb +38 -47
  52. data/lib/discorb.rb +1 -1
  53. data/po/yard.pot +7772 -5154
  54. data/sig/discorb.rbs +3316 -3819
  55. data/template-replace/scripts/locale_ja.rb +62 -0
  56. metadata +5 -3
data/lib/discorb/http.rb CHANGED
@@ -18,14 +18,14 @@ module Discorb
18
18
 
19
19
  #
20
20
  # Execute a GET request.
21
- # @macro async
21
+ # @async
22
22
  #
23
23
  # @param [String] path The path to the resource.
24
24
  # @param [Hash] headers The headers to send with the request.
25
25
  # @param [String] audit_log_reason The audit log reason to send with the request.
26
26
  # @param [Hash] kwargs The keyword arguments.
27
27
  #
28
- # @return [Array(Net::HTTPResponse, Hash)] The response and as JSON.
28
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
29
29
  # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
30
30
  #
31
31
  # @raise [Discorb::HTTPError] The request was failed.
@@ -42,7 +42,7 @@ module Discorb
42
42
 
43
43
  #
44
44
  # Execute a POST request.
45
- # @macro async
45
+ # @async
46
46
  #
47
47
  # @param [String] path The path to the resource.
48
48
  # @param [String, Hash] body The body of the request.
@@ -50,7 +50,7 @@ module Discorb
50
50
  # @param [String] audit_log_reason The audit log reason to send with the request.
51
51
  # @param [Hash] kwargs The keyword arguments.
52
52
  #
53
- # @return [Array(Net::HTTPResponse, Hash)] The response and as JSON.
53
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
54
54
  # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
55
55
  #
56
56
  # @raise [Discorb::HTTPError] The request was failed.
@@ -65,9 +65,46 @@ module Discorb
65
65
  end
66
66
  end
67
67
 
68
+ #
69
+ # Execute a multipart POST request.
70
+ # @async
71
+ #
72
+ # @param [String] path The path to the resource.
73
+ # @param [String, Hash] body The body of the request.
74
+ # @param [Array<Discorb::File>] files The files to upload.
75
+ # @param [Hash] headers The headers to send with the request.
76
+ # @param [String] audit_log_reason The audit log reason to send with the request.
77
+ # @param [Hash] kwargs The keyword arguments.
78
+ #
79
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
80
+ # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
81
+ #
82
+ # @raise [Discorb::HTTPError] The request was failed.
83
+ #
84
+ def multipart_post(path, body = "", files, headers: nil, audit_log_reason: nil, **kwargs)
85
+ Async do |task|
86
+ @ratelimit_handler.wait("POST", path)
87
+ req = Net::HTTP::Post.new(get_path(path), get_headers(headers, body, audit_log_reason), **kwargs)
88
+ data = [
89
+ ["payload_json", get_body(body)],
90
+ ]
91
+ files&.each_with_index do |file, i|
92
+ next if file.nil?
93
+ data << ["files[#{i}]", file.io, { filename: file.filename, content_type: file.content_type }]
94
+ end
95
+ req.set_form(data, "multipart/form-data")
96
+ session = Net::HTTP.new("discord.com", 443)
97
+ session.use_ssl = true
98
+ resp = session.request(req)
99
+ data = get_response_data(resp)
100
+ @ratelimit_handler.save("POST", path, resp)
101
+ handle_response(:post, resp, data, path, body, headers, audit_log_reason, kwargs)
102
+ end
103
+ end
104
+
68
105
  #
69
106
  # Execute a PATCH request.
70
- # @macro async
107
+ # @async
71
108
  #
72
109
  # @param [String] path The path to the resource.
73
110
  # @param [String, Hash] body The body of the request.
@@ -75,7 +112,7 @@ module Discorb
75
112
  # @param [String] audit_log_reason The audit log reason to send with the request.
76
113
  # @param [Hash] kwargs The keyword arguments.
77
114
  #
78
- # @return [Array(Net::HTTPResponse, Hash)] The response and as JSON.
115
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
79
116
  # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
80
117
  #
81
118
  # @raise [Discorb::HTTPError] The request was failed.
@@ -90,9 +127,44 @@ module Discorb
90
127
  end
91
128
  end
92
129
 
130
+ #
131
+ # Execute a PATCH request.
132
+ # @async
133
+ #
134
+ # @param [String] path The path to the resource.
135
+ # @param [String, Hash] body The body of the request.
136
+ # @param [Hash] headers The headers to send with the request.
137
+ # @param [String] audit_log_reason The audit log reason to send with the request.
138
+ # @param [Hash] kwargs The keyword arguments.
139
+ #
140
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
141
+ # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
142
+ #
143
+ # @raise [Discorb::HTTPError] The request was failed.
144
+ #
145
+ def multipart_patch(path, body = "", headers: nil, audit_log_reason: nil, **kwargs)
146
+ Async do |task|
147
+ @ratelimit_handler.wait("PATCH", path)
148
+ req = Net::HTTP::Patch.new(get_path(path), get_headers(headers, body, audit_log_reason), **kwargs)
149
+ data = [
150
+ ["payload_json", get_body(body)],
151
+ ]
152
+ files&.each_with_index do |file, i|
153
+ data << ["files[#{i}]", file.io, { filename: file.filename, content_type: file.content_type }]
154
+ end
155
+ req.set_form(data, "multipart/form-data")
156
+ session = Net::HTTP.new("discord.com", 443)
157
+ session.use_ssl = true
158
+ resp = session.request(req)
159
+ data = get_response_data(resp)
160
+ @ratelimit_handler.save("PATCH", path, resp)
161
+ handle_response(:patch, resp, data, path, body, headers, audit_log_reason, kwargs)
162
+ end
163
+ end
164
+
93
165
  #
94
166
  # Execute a PUT request.
95
- # @macro async
167
+ # @async
96
168
  #
97
169
  # @param [String] path The path to the resource.
98
170
  # @param [String, Hash] body The body of the request.
@@ -100,7 +172,7 @@ module Discorb
100
172
  # @param [String] audit_log_reason The audit log reason to send with the request.
101
173
  # @param [Hash] kwargs The keyword arguments.
102
174
  #
103
- # @return [Array(Net::HTTPResponse, Hash)] The response and as JSON.
175
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
104
176
  # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
105
177
  #
106
178
  # @raise [Discorb::HTTPError] The request was failed.
@@ -117,14 +189,14 @@ module Discorb
117
189
 
118
190
  #
119
191
  # Execute a DELETE request.
120
- # @macro async
192
+ # @async
121
193
  #
122
194
  # @param [String] path The path to the resource.
123
195
  # @param [Hash] headers The headers to send with the request.
124
196
  # @param [String] audit_log_reason The audit log reason to send with the request.
125
197
  # @param [Hash] kwargs The keyword arguments.
126
198
  #
127
- # @return [Array(Net::HTTPResponse, Hash)] The response and as JSON.
199
+ # @return [Async::Task<Array(Net::HTTPResponse, Hash)>] The response and as JSON.
128
200
  # @return [Async::Task<Array(Net::HTTPResponse, nil)>] The response was 204.
129
201
  #
130
202
  # @raise [Discorb::HTTPError] The request was failed.
@@ -143,40 +215,6 @@ module Discorb
143
215
  "#<#{self.class} client=#{@client}>"
144
216
  end
145
217
 
146
- #
147
- # A helper method to send multipart/form-data requests for creating messages.
148
- #
149
- # @param [Hash] payload The payload to send.
150
- # @param [Array<Discorb::File>] files The files to send.
151
- #
152
- # @return [Array(String, String)] The boundary and body.
153
- #
154
- def self.multipart(payload, files)
155
- boundary = "DiscorbBySevenC7CMultipartFormData#{Time.now.to_f}"
156
- str_payloads = [<<~HTTP]
157
- Content-Disposition: form-data; name="payload_json"
158
- Content-Type: application/json
159
-
160
- #{payload.to_json}
161
- HTTP
162
- files.each_with_index do |single_file, i|
163
- str_payloads << <<~HTTP
164
- Content-Disposition: form-data; name="files[#{i}]"; filename="#{single_file.filename}"
165
- Content-Type: #{single_file.content_type}
166
-
167
- #{single_file.io.read}
168
- HTTP
169
- end
170
- payload = +"--#{boundary}".encode(Encoding::ASCII_8BIT)
171
- str_payloads.each do |str_payload|
172
- payload << "\r\n".encode(Encoding::ASCII_8BIT)
173
- payload << str_payload.force_encoding(Encoding::ASCII_8BIT)
174
- payload << "\r\n--#{boundary}".encode(Encoding::ASCII_8BIT)
175
- end
176
- payload += +"--".encode(Encoding::ASCII_8BIT)
177
- [boundary, payload]
178
- end
179
-
180
218
  private
181
219
 
182
220
  def handle_response(method, resp, data, path, body, headers, audit_log_reason, kwargs)
@@ -58,9 +58,12 @@ module Discorb
58
58
 
59
59
  #
60
60
  # Delete the integration.
61
+ # @async
61
62
  #
62
63
  # @param [String] reason The reason for deleting the integration.
63
64
  #
65
+ # @return [Async::Task<void>] The task.
66
+ #
64
67
  def delete!(reason: nil)
65
68
  Async do
66
69
  @client.http.delete("/guilds/#{@guild}/integrations/#{@id}", audit_log_reason: reason).wait
@@ -7,11 +7,12 @@ module Discorb
7
7
  #
8
8
  # Response with `DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE`(`5`).
9
9
  #
10
- # @macro async
11
- # @macro http
10
+ # @async
12
11
  #
13
12
  # @param [Boolean] ephemeral Whether to make the response ephemeral.
14
13
  #
14
+ # @return [Async::Task<void>] The task.
15
+ #
15
16
  def defer_source(ephemeral: false)
16
17
  Async do
17
18
  @client.http.post("/interactions/#{@id}/#{@token}/callback", {
@@ -27,8 +28,7 @@ module Discorb
27
28
  #
28
29
  # Response with `CHANNEL_MESSAGE_WITH_SOURCE`(`4`).
29
30
  #
30
- # @macro async
31
- # @macro http
31
+ # @async
32
32
  #
33
33
  # @param [String] content The content of the response.
34
34
  # @param [Boolean] tts Whether to send the message as text-to-speech.
@@ -77,8 +77,7 @@ module Discorb
77
77
 
78
78
  #
79
79
  # Edits the callback message.
80
- # @macro async
81
- # @macro http
80
+ # @async
82
81
  # @macro edit
83
82
  #
84
83
  # @param [String] content The new content of the message.
@@ -88,27 +87,23 @@ module Discorb
88
87
  # @param [Discorb::File] file The file to send.
89
88
  # @param [Array<Discorb::File>] files The files to send.
90
89
  #
90
+ # @return [Async::Task<void>] The task.
91
+ #
91
92
  def edit(
92
- content = :unset,
93
- embed: :unset, embeds: :unset,
94
- file: :unset, files: :unset,
95
- attachments: :unset
93
+ content = Discorb::Unset,
94
+ embed: Discorb::Unset, embeds: Discorb::Unset,
95
+ file: Discorb::Unset, files: Discorb::Unset,
96
+ attachments: Discorb::Unset
96
97
  )
97
98
  Async do
98
99
  payload = {}
99
- payload[:content] = content if content != :unset
100
- payload[:embeds] = embed ? [embed.to_hash] : [] if embed != :unset
101
- payload[:embeds] = embeds.map(&:to_hash) if embeds != :unset
102
- payload[:attachments] = attachments.map(&:to_hash) if attachments != :unset
103
- files = [file] if file != :unset
104
- if files == :unset
105
- headers = {
106
- "Content-Type" => "application/json",
107
- }
108
- else
109
- headers, payload = HTTP.multipart(payload, files)
110
- end
111
- @client.http.patch("/webhooks/#{@application_id}/#{@token}/messages/@original", payload, headers: headers).wait
100
+ payload[:content] = content if content != Discorb::Unset
101
+ payload[:embeds] = embed ? [embed.to_hash] : [] if embed != Discorb::Unset
102
+ payload[:embeds] = embeds.map(&:to_hash) if embeds != Discorb::Unset
103
+ payload[:attachments] = attachments.map(&:to_hash) if attachments != Discorb::Unset
104
+ files = [file] if file != Discorb::Unset
105
+ files = [] if files == Discorb::Unset
106
+ @client.http.multipart_patch("/webhooks/#{@application_id}/#{@token}/messages/@original", payload, files, headers: headers).wait
112
107
  end
113
108
  end
114
109
 
@@ -116,8 +111,11 @@ module Discorb
116
111
 
117
112
  #
118
113
  # Deletes the callback message.
114
+ # @async
119
115
  # @note This will fail if the message is ephemeral.
120
116
  #
117
+ # @return [Async::Task<void>] The task.
118
+ #
121
119
  def delete!
122
120
  Async do
123
121
  @client.http.delete("/webhooks/#{@application_id}/#{@token}/messages/@original").wait
@@ -132,9 +130,12 @@ module Discorb
132
130
  module UpdateResponse
133
131
  #
134
132
  # Response with `DEFERRED_UPDATE_MESSAGE`(`6`).
133
+ # @async
135
134
  #
136
135
  # @param [Boolean] ephemeral Whether to make the response ephemeral.
137
136
  #
137
+ # @return [Async::Task<void>] The task.
138
+ #
138
139
  def defer_update(ephemeral: false)
139
140
  Async do
140
141
  @client.http.post("/interactions/#{@id}/#{@token}/callback", {
@@ -149,8 +150,7 @@ module Discorb
149
150
  #
150
151
  # Response with `UPDATE_MESSAGE`(`7`).
151
152
  #
152
- # @macro async
153
- # @macro http
153
+ # @async
154
154
  #
155
155
  # @param [String] content The content of the response.
156
156
  # @param [Boolean] tts Whether to send the message as text-to-speech.
@@ -160,6 +160,8 @@ module Discorb
160
160
  # @param [Array<Discorb::Component>, Array<Array<Discorb::Component>>] components The components to send.
161
161
  # @param [Boolean] ephemeral Whether to make the response ephemeral.
162
162
  #
163
+ # @return [Async::Task<void>] The task.
164
+ #
163
165
  def edit(content, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, ephemeral: false)
164
166
  Async do
165
167
  payload = {}
@@ -18,6 +18,12 @@ module Discorb
18
18
  attr_reader :version
19
19
  # @return [String] The token for the interaction.
20
20
  attr_reader :token
21
+ # @return [Symbol] The locale of the user that created the interaction.
22
+ # @note This modifies the language code, `-` will be replaced with `_`.
23
+ attr_reader :locale
24
+ # @return [Symbol] The locale of the guild that created the interaction.
25
+ # @note This modifies the language code, `-` will be replaced with `_`.
26
+ attr_reader :guild_locale
21
27
 
22
28
  # @!attribute [r] guild
23
29
  # @macro client_cache
@@ -43,6 +49,8 @@ module Discorb
43
49
  @member = guild.members[data[:member][:id]] || Member.new(@client, @guild_id, data[:member][:user], data[:member]) if data[:member]
44
50
  @user = @client.users[data[:user][:id]] || User.new(@client, data[:user]) if data[:user]
45
51
  @token = data[:token]
52
+ @locale = data[:locale].to_s.gsub("-", "_").to_sym
53
+ @guild_locale = data[:guild_locale].to_s.gsub("-", "_").to_sym
46
54
  @version = data[:version]
47
55
  @defered = false
48
56
  @responded = false
@@ -100,8 +100,9 @@ module Discorb
100
100
  end
101
101
 
102
102
  # Delete the invite.
103
- # @macro async
104
- # @macro http
103
+ # @async
104
+ # @return [Async::Task<void>] The task.
105
+ #
105
106
  def delete!(reason: nil)
106
107
  Async do
107
108
  @client.http.delete("/invites/#{@code}", audit_log_reason: reason)
@@ -143,12 +143,13 @@ module Discorb
143
143
 
144
144
  #
145
145
  # Add a role to the member.
146
- # @macro http
147
- # @macro async
146
+ # @async
148
147
  #
149
148
  # @param [Discorb::Role] role The role to add.
150
149
  # @param [String] reason The reason for the action.
151
150
  #
151
+ # @return [Async::Task<void>] The task.
152
+ #
152
153
  def add_role(role, reason: nil)
153
154
  Async do
154
155
  @client.http.put("/guilds/#{@guild_id}/members/#{@id}/roles/#{role.is_a?(Role) ? role.id : role}", nil, audit_log_reason: reason).wait
@@ -157,12 +158,13 @@ module Discorb
157
158
 
158
159
  #
159
160
  # Remove a role to the member.
160
- # @macro http
161
- # @macro async
161
+ # @async
162
162
  #
163
163
  # @param [Discorb::Role] role The role to add.
164
164
  # @param [String] reason The reason for the action.
165
165
  #
166
+ # @return [Async::Task<void>] The task.
167
+ #
166
168
  def remove_role(role, reason: nil)
167
169
  Async do
168
170
  @client.http.delete("/guilds/#{@guild_id}/members/#{@id}/roles/#{role.is_a?(Role) ? role.id : role}", audit_log_reason: reason).wait
@@ -171,8 +173,7 @@ module Discorb
171
173
 
172
174
  #
173
175
  # Edit the member.
174
- # @macro http
175
- # @macro async
176
+ # @async
176
177
  # @macro edit
177
178
  #
178
179
  # @param [String] nick The nickname of the member.
@@ -180,27 +181,54 @@ module Discorb
180
181
  # @param [Boolean] mute Whether the member is muted.
181
182
  # @param [Boolean] deaf Whether the member is deafened.
182
183
  # @param [Discorb::StageChannel] channel The channel the member is moved to.
184
+ # @param [Time, nil] communication_disabled_until The time the member is timed out. Set to `nil` to end the timeout.
185
+ # @param [Time, nil] timeout_until Alias of `communication_disabled_until`.
183
186
  # @param [String] reason The reason for the action.
184
187
  #
185
- def edit(nick: :unset, role: :unset, mute: :unset, deaf: :unset, channel: :unset, reason: nil)
188
+ # @return [Async::Task<void>] The task.
189
+ #
190
+ def edit(
191
+ nick: Discorb::Unset, role: Discorb::Unset, mute: Discorb::Unset, deaf: Discorb::Unset, channel: Discorb::Unset, communication_disabled_until: Discorb::Unset, timeout_until: Discorb::Unset,
192
+ reason: nil
193
+ )
186
194
  Async do
187
195
  payload = {}
188
- payload[:nick] = nick if nick != :unset
189
- payload[:roles] = role if role != :unset
190
- payload[:mute] = mute if mute != :unset
191
- payload[:deaf] = deaf if deaf != :unset
192
- payload[:channel_id] = channel&.id if channel != :unset
196
+ payload[:nick] = nick if nick != Discorb::Unset
197
+ payload[:roles] = role if role != Discorb::Unset
198
+ payload[:mute] = mute if mute != Discorb::Unset
199
+ payload[:deaf] = deaf if deaf != Discorb::Unset
200
+ communication_disabled_until = timeout_until if timeout_until != Discorb::Unset
201
+ payload[:communication_disabled_until] = communication_disabled_until&.iso8601 if communication_disabled_until != Discorb::Unset
202
+ payload[:channel_id] = channel&.id if channel != Discorb::Unset
193
203
  @client.http.patch("/guilds/#{@guild_id}/members/#{@id}", payload, audit_log_reason: reason).wait
194
204
  end
195
205
  end
196
206
 
197
207
  alias modify edit
198
208
 
209
+ #
210
+ # Timeout the member.
211
+ # @async
212
+ #
213
+ # @param [Time] time The time until the member is timeout.
214
+ # @param [String] reason The reason for the action.
215
+ #
216
+ # @return [Async::Task<void>] The task.
217
+ #
218
+ def timeout(time, reason: nil)
219
+ edit(communication_disabled_until: time, reason: reason)
220
+ end
221
+
222
+ alias disable_communication timeout
223
+
199
224
  #
200
225
  # Kick the member.
226
+ # @async
201
227
  #
202
228
  # @param [String] reason The reason for the action.
203
229
  #
230
+ # @return [Async::Task<void>] The task.
231
+ #
204
232
  def kick(reason: nil)
205
233
  Async do
206
234
  guild.kick_member(self, reason: reason).wait
@@ -209,6 +237,7 @@ module Discorb
209
237
 
210
238
  #
211
239
  # Ban the member.
240
+ # @async
212
241
  #
213
242
  # @param [Integer] delete_message_days The number of days to delete messages.
214
243
  # @param [String] reason The reason for the action.
@@ -294,6 +294,7 @@ module Discorb
294
294
 
295
295
  #
296
296
  # Edit the message.
297
+ # @async
297
298
  #
298
299
  # @param [String] content The message content.
299
300
  # @param [Discorb::Embed] embed The embed to send.
@@ -302,6 +303,8 @@ module Discorb
302
303
  # @param [Array<Discorb::Component>, Array<Array<Discorb::Component>>] components The components to send.
303
304
  # @param [Boolean] supress Whether to supress embeds.
304
305
  #
306
+ # @return [Async::Task<void>] The task.
307
+ #
305
308
  def edit(content = nil, embed: nil, embeds: nil, allowed_mentions: nil,
306
309
  components: nil, supress: nil)
307
310
  Async do
@@ -312,9 +315,12 @@ module Discorb
312
315
 
313
316
  #
314
317
  # Delete the message.
318
+ # @async
315
319
  #
316
320
  # @param [String] reason The reason for deleting the message.
317
321
  #
322
+ # @return [Async::Task<void>] The task.
323
+ #
318
324
  def delete!(reason: nil)
319
325
  Async do
320
326
  channel.delete_message!(@id, reason: reason).wait
@@ -342,8 +348,7 @@ module Discorb
342
348
  end
343
349
 
344
350
  # Reply to the message.
345
- # @macro async
346
- # @macro http
351
+ # @async
347
352
  # @param (see #post)
348
353
  # @return [Async::Task<Discorb::Message>] The message.
349
354
  def reply(*args, **kwargs)
@@ -354,8 +359,9 @@ module Discorb
354
359
 
355
360
  #
356
361
  # Publish the message.
357
- # @macro async
358
- # @macro http
362
+ # @async
363
+ #
364
+ # @return [Async::Task<void>] The task.
359
365
  #
360
366
  def publish
361
367
  Async do
@@ -365,11 +371,12 @@ module Discorb
365
371
 
366
372
  #
367
373
  # Add a reaction to the message.
368
- # @macro async
369
- # @macro http
374
+ # @async
370
375
  #
371
376
  # @param [Discorb::Emoji] emoji The emoji to react with.
372
377
  #
378
+ # @return [Async::Task<void>] The task.
379
+ #
373
380
  def add_reaction(emoji)
374
381
  Async do
375
382
  @client.http.put("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me", nil).wait
@@ -380,11 +387,12 @@ module Discorb
380
387
 
381
388
  #
382
389
  # Remove a reaction from the message.
383
- # @macro async
384
- # @macro http
390
+ # @async
385
391
  #
386
392
  # @param [Discorb::Emoji] emoji The emoji to remove.
387
393
  #
394
+ # @return [Async::Task<void>] The task.
395
+ #
388
396
  def remove_reaction(emoji)
389
397
  Async do
390
398
  @client.http.delete("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/@me").wait
@@ -395,12 +403,13 @@ module Discorb
395
403
 
396
404
  #
397
405
  # Remove other member's reaction from the message.
398
- # @macro async
399
- # @macro http
406
+ # @async
400
407
  #
401
408
  # @param [Discorb::Emoji] emoji The emoji to remove.
402
409
  # @param [Discorb::Member] member The member to remove the reaction from.
403
410
  #
411
+ # @return [Async::Task<void>] The task.
412
+ #
404
413
  def remove_reaction_of(emoji, member)
405
414
  Async do
406
415
  @client.http.delete("/channels/#{@channel_id}/messages/#{@id}/reactions/#{emoji.to_uri}/#{member.is_a?(Member) ? member.id : member}").wait
@@ -411,8 +420,7 @@ module Discorb
411
420
 
412
421
  #
413
422
  # Fetch reacted users of reaction.
414
- # @macro async
415
- # @macro http
423
+ # @async
416
424
  #
417
425
  # @param [Discorb::Emoji] emoji The emoji to fetch.
418
426
  # @param [Integer, nil] limit The maximum number of users to fetch. `nil` for no limit.
@@ -445,11 +453,12 @@ module Discorb
445
453
 
446
454
  #
447
455
  # Pin the message.
448
- # @macro async
449
- # @macro http
456
+ # @async
450
457
  #
451
458
  # @param [String] reason The reason for pinning the message.
452
459
  #
460
+ # @return [Async::Task<void>] The task.
461
+ #
453
462
  def pin(reason: nil)
454
463
  Async do
455
464
  channel.pin_message(self, reason: reason).wait
@@ -458,11 +467,12 @@ module Discorb
458
467
 
459
468
  #
460
469
  # Unpin the message.
461
- # @macro async
462
- # @macro http
470
+ # @async
463
471
  #
464
472
  # @param [String] reason The reason for unpinning the message.
465
473
  #
474
+ # @return [Async::Task<void>] The task.
475
+ #
466
476
  def unpin(reason: nil)
467
477
  Async do
468
478
  channel.unpin_message(self, reason: reason).wait
@@ -471,10 +481,11 @@ module Discorb
471
481
 
472
482
  #
473
483
  # Start thread from the message.
484
+ # @async
474
485
  #
475
486
  # @param (see Discorb::Channel#start_thread)
476
487
  #
477
- # @return [Async::Task<<Type>>] <description>
488
+ # @return [Async::Task<Discorb::ThreadChannel>] <description>
478
489
  #
479
490
  def start_thread(*args, **kwargs)
480
491
  Async do