respond method

  1. @override
Future<void> respond(
  1. MessageBuilder builder,
  2. {bool hidden = false}
)
override

Used to acknowledge a Interaction and send a response. Once this is sent you can then only send ChannelMessages.

Implementation

@override
Future<void> respond(MessageBuilder builder, {bool hidden = false}) async {
  final now = DateTime.now();
  if (_hasAcked && now.isAfter(receivedAt.add(const Duration(minutes: 15)))) {
    throw InteractionExpiredError.fifteenMins();
  } else if (!_hasAcked && now.isAfter(receivedAt.add(const Duration(seconds: 3)))) {
    throw InteractionExpiredError.threeSecs();
  }

  logger.fine("Sending respond for for interaction: ${interaction.id}");
  if (_hasAcked) {
    await interactions.interactionsEndpoints.respondEditOriginal(interaction.token, client.appId, builder, hidden);
  } else {
    if (!builder.canBeUsedAsNewMessage()) {
      throw ArgumentError("Cannot sent message when MessageBuilder doesn't have set either content, embed or files");
    }

    await interactions.interactionsEndpoints.respondCreateResponse(interaction.token, interaction.id.toString(), builder, hidden, _respondOpcode);
  }

  _hasAcked = true;
}