createResponse method

Future<void> createResponse(
  1. Snowflake id,
  2. String token,
  3. InteractionResponseBuilder builder
)

Create a response to an interaction.

Implementation

Future<void> createResponse(Snowflake id, String token, InteractionResponseBuilder builder) async {
  final route = HttpRoute()
    ..interactions(id: id.toString(), token: token)
    ..callback();

  final HttpRequest request;
  if (builder.data case MessageBuilder(:final attachments?) || MessageUpdateBuilder(:final attachments?)
      when !identical(attachments, sentinelList) && attachments.isNotEmpty) {
    final payload = builder.build();

    final files = <MultipartFile>[];
    for (int i = 0; i < attachments.length; i++) {
      files.add(MultipartFile.fromBytes(
        'files[$i]',
        attachments[i].data,
        filename: attachments[i].fileName,
      ));

      (((payload['data'] as Map<String, Object?>)['attachments'] as List)[i] as Map<String, Object?>)['id'] = i.toString();
    }

    request = MultipartRequest(
      route,
      method: 'POST',
      jsonPayload: jsonEncode(payload),
      files: files,
      applyGlobalRateLimit: false,
    );
  } else {
    request = BasicRequest(
      route,
      method: 'POST',
      body: jsonEncode(builder.build()),
      applyGlobalRateLimit: false,
    );
  }

  await client.httpHandler.executeSafe(request);
}