discorb 0.9.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b1edef0884cfed1af49f9e0fac34b69330a1b00a23820287ea621b429773c09
4
- data.tar.gz: 87e7244d44d9ad963a0579db577b066047643ca16dbc6e2fcb7860bcba8fad28
3
+ metadata.gz: fbb61003015daf1f1731f80809e9c739cad169f60b7b5f7cc6c1ac7580d61bd1
4
+ data.tar.gz: e2d7bcad6c493bea84b7f2608a1d1366f76e95675c50052b034742be322d0569
5
5
  SHA512:
6
- metadata.gz: 8f54c1eb6a5167e00b2670caf80e04bfa0d5f664e6efff8e731bb6a3c01048961a81c7cfa08a2f2dce5a380defcccd2ccedef0009e8f4d70d7778c811babca7a
7
- data.tar.gz: 64d3cce130262a18bb59fdb76715c99e8e7a8574af84b8ebf00e39bb3582cf0e0f9ef4a3c65e1c0af457bbed82568af9f259db0351718ed6e12f83cb5bb95bab
6
+ metadata.gz: 9b2cee7155fe0273181fc7cf1fdd048ebd0b9d1adba4ca7c4444a31a92b5cd86a65c77511e581858c379e1abb53d1d092ab6115394b0a9fbc076b6692b04312b
7
+ data.tar.gz: 245db18f6b68599ccf199e5c1571a3f38181d4a4a6dc5371cf55e29bc9dd1d95766ff67047091558aaf392f41ea3fb0d28b726972c120ad7dd80a216a1e3699c
data/Changelog.md CHANGED
@@ -234,4 +234,14 @@ end
234
234
 
235
235
  ## 0.9.1
236
236
 
237
- - Fix: Fix member fetching
237
+ - Fix: Fix member fetching
238
+
239
+ ## 0.9.2 (yanked)
240
+
241
+ - Add: Make `Async::Task#inspect` shorter
242
+ - Add: `SourceResponse#post` will return message now
243
+ - Fix: Fix member caching
244
+
245
+ ## 0.9.3
246
+
247
+ - Fix: Fix interaction responding
data/docs/faq.md CHANGED
@@ -35,7 +35,7 @@ Use {Discorb::Client#update_presence} method.
35
35
  client.on event do
36
36
  client.update_presence(
37
37
  Discorb::Activity.new(
38
- name: "#{client.guilds.length} Servers"
38
+ "#{client.guilds.length} Servers"
39
39
  ),
40
40
  status: :online
41
41
  )
@@ -4,7 +4,7 @@ module Discorb
4
4
  # @return [String] The API base URL.
5
5
  API_BASE_URL = "https://discord.com/api/v9"
6
6
  # @return [String] The version of discorb.
7
- VERSION = "0.9.1"
7
+ VERSION = "0.9.3"
8
8
  # @return [String] The user agent for the bot.
9
9
  USER_AGENT = "DiscordBot (https://github.com/discorb-lib/discorb #{VERSION}) Ruby/#{RUBY_VERSION}"
10
10
 
@@ -3,7 +3,6 @@
3
3
  require "async/http"
4
4
  require "async/websocket"
5
5
  require "async/barrier"
6
- require "async/semaphore"
7
6
  require "json"
8
7
  require "zlib"
9
8
 
@@ -1035,10 +1034,9 @@ module Discorb
1035
1034
  if @fetch_member
1036
1035
  @log.debug "Fetching members"
1037
1036
  barrier = Async::Barrier.new
1038
- semaphore = Async::Semaphore.new(@guilds.length)
1039
1037
 
1040
1038
  @guilds.each do |guild|
1041
- semaphore.async(parent: barrier) do
1039
+ barrier.async(parent: barrier) do
1042
1040
  guild.fetch_members
1043
1041
  end
1044
1042
  end
@@ -131,6 +131,8 @@ module Discorb
131
131
  # @param [Array<Discorb::Component>, Array<Array<Discorb::Component>>] components The components to send.
132
132
  # @param [Boolean] ephemeral Whether to make the response ephemeral.
133
133
  #
134
+ # @return [Discorb::Interaction::SourceResponse::CallbackMessage, Discorb::Webhook::Message] The callback message.
135
+ #
134
136
  def post(content = nil, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, ephemeral: false)
135
137
  Async do
136
138
  payload = {}
@@ -165,14 +167,79 @@ module Discorb
165
167
  end
166
168
  payload[:flags] = (ephemeral ? 1 << 6 : 0)
167
169
 
168
- if @responded
169
- @client.http.post("/webhooks/#{@application_id}/#{@token}", payload).wait
170
- elsif @defered
171
- @client.http.patch("/webhooks/#{@application_id}/#{@token}/messages/@original", payload).wait
172
- else
173
- @client.http.post("/interactions/#{@id}/#{@token}/callback", { type: 4, data: payload }).wait
174
- end
170
+ ret = if @responded
171
+ _resp, data = @client.http.post("/webhooks/#{@application_id}/#{@token}", payload).wait
172
+ webhook = Webhook::URLWebhook.new("/webhooks/#{@application_id}/#{@token}")
173
+ Webhook::Message.new(webhook, data, @client)
174
+ elsif @defered
175
+ @client.http.patch("/webhooks/#{@application_id}/#{@token}/messages/@original", payload).wait
176
+ CallbackMessage.new(@client, payload, @application_id, @token)
177
+ else
178
+ @client.http.post("/interactions/#{@id}/#{@token}/callback", { type: 4, data: payload }).wait
179
+ CallbackMessage.new(@client, payload, @application_id, @token)
180
+ end
175
181
  @responded = true
182
+ ret
183
+ end
184
+ end
185
+
186
+ class CallbackMessage
187
+ # @!visibility private
188
+ def initialize(client, data, application_id, token)
189
+ @client = client
190
+ @data = data
191
+ @application_id = application_id
192
+ @token = token
193
+ end
194
+
195
+ #
196
+ # Edits the callback message.
197
+ # @macro async
198
+ # @macro http
199
+ # @macro edit
200
+ #
201
+ # @param [Discorb::Webhook::Message] message The message to edit.
202
+ # @param [String] content The new content of the message.
203
+ # @param [Discorb::Embed] embed The new embed of the message.
204
+ # @param [Array<Discorb::Embed>] embeds The new embeds of the message.
205
+ # @param [Array<Discorb::Attachment>] attachments The attachments to remain.
206
+ # @param [Discorb::File] file The file to send.
207
+ # @param [Array<Discorb::File>] files The files to send.
208
+ #
209
+ def edit(
210
+ content = :unset,
211
+ embed: :unset, embeds: :unset,
212
+ file: :unset, files: :unset,
213
+ attachments: :unset
214
+ )
215
+ Async do
216
+ payload = {}
217
+ payload[:content] = content if content != :unset
218
+ payload[:embeds] = embed ? [embed.to_hash] : [] if embed != :unset
219
+ payload[:embeds] = embeds.map(&:to_hash) if embeds != :unset
220
+ payload[:attachments] = attachments.map(&:to_hash) if attachments != :unset
221
+ files = [file] if file != :unset
222
+ if files == :unset
223
+ headers = {
224
+ "Content-Type" => "application/json",
225
+ }
226
+ else
227
+ headers, payload = HTTP.multipart(payload, files)
228
+ end
229
+ @client.http.patch("/webhooks/#{@application_id}/#{@token}/messages/@original", payload, headers: headers).wait
230
+ end
231
+ end
232
+
233
+ alias modify edit
234
+
235
+ #
236
+ # Deletes the callback message.
237
+ # @note This will fail if the message is ephemeral.
238
+ #
239
+ def delete!
240
+ Async do
241
+ @client.http.delete("/webhooks/#{@application_id}/#{@token}/messages/@original").wait
242
+ end
176
243
  end
177
244
  end
178
245
  end
data/lib/discorb/utils.rb CHANGED
@@ -14,3 +14,23 @@ module Discorb
14
14
  module_function :try
15
15
  end
16
16
  end
17
+
18
+ class Async::Node
19
+ def description
20
+ @object_name ||= "#{self.class}:0x#{object_id.to_s(16)}#{@transient ? ' transient' : nil}"
21
+
22
+ if @annotation
23
+ "#{@object_name} #{@annotation}"
24
+ elsif line = self.backtrace(0, 1)&.first
25
+ "#{@object_name} #{line}"
26
+ else
27
+ @object_name
28
+ end
29
+ end
30
+
31
+ def to_s
32
+ "\#<#{self.description}>"
33
+ end
34
+
35
+ alias inspect to_s
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discorb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - sevenc-nanashi