Module: Discorb::Interaction::UpdateResponse

Included in:
MessageComponentInteraction
Defined in:
lib/discorb/interaction.rb

Overview

A module for response with update.

Instance Method Summary collapse

Instance Method Details

#defer_update(ephemeral: false) -> Object

Response with DEFERRED_UPDATE_MESSAGE(6).

Parameters:

  • ephemeral (Boolean) (defaults to: false)

    Whether to make the response ephemeral.



189
190
191
192
193
194
195
196
197
198
# File 'lib/discorb/interaction.rb', line 189

def defer_update(ephemeral: false)
  Async do
    @client.http.post("/interactions/#{@id}/#{@token}/callback", {
      type: 7,
      data: {
        flags: (ephemeral ? 1 << 6 : 0),
      },
    }).wait
  end
end

#edit(content, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, ephemeral: false) -> Object

Note:

This is an asynchronous method, it will return a Async::Task object. Use Async::Task#wait to get the result.

Note:

This method calls HTTP request.

Response with UPDATE_MESSAGE(7).

Parameters:

  • content (String)

    The content of the response.

  • tts (Boolean) (defaults to: false)

    Whether to send the message as text-to-speech.

  • embed (Discorb::Embed) (defaults to: nil)

    The embed to send.

  • embeds (Array<Discorb::Embed>) (defaults to: nil)

    The embeds to send. (max: 10)

  • allowed_mentions (Discorb::AllowedMentions) (defaults to: nil)

    The allowed mentions to send.

  • components (Array<Discorb::Component>, Array<Array<Discorb::Component>>) (defaults to: nil)

    The components to send.

  • ephemeral (Boolean) (defaults to: false)

    Whether to make the response ephemeral.

Raises:



214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/discorb/interaction.rb', line 214

def edit(content, tts: false, embed: nil, embeds: nil, allowed_mentions: nil, components: nil, ephemeral: false)
  Async do
    payload = {}
    payload[:content] = content if content
    payload[:tts] = tts
    tmp_embed = if embed
        [embed]
      elsif embeds
        embeds
      end
    payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
    payload[:allowed_mentions] = allowed_mentions ? allowed_mentions.to_hash(@client.allowed_mentions) : @client.allowed_mentions.to_hash
    if components
      tmp_components = []
      tmp_row = []
      components.each do |c|
        case c
        when Array
          tmp_components << tmp_row
          tmp_row = []
          tmp_components << c
        when SelectMenu
          tmp_components << tmp_row
          tmp_row = []
          tmp_components << [c]
        else
          tmp_row << c
        end
      end
      tmp_components << tmp_row
      payload[:components] = tmp_components.filter { |c| c.length.positive? }.map { |c| { type: 1, components: c.map(&:to_hash) } }
    end
    payload[:flags] = (ephemeral ? 1 << 6 : 0)
    @client.http.post("/interactions/#{@id}/#{@token}/callback", { type: 6, data: payload }).wait
  end
end