respond method
- MessageBuilder builder,
- {ResponseLevel? level}
inherited
Send a response to the command.
level
can be set to change how the response is set. If is is not passed,
CommandOptions.defaultResponseLevel is used instead.
You might also be interested in:
- InteractionInteractiveContext.acknowledge, for acknowledging interactions without responding.
Implementation
@override
Future<Message> respond(MessageBuilder builder, {ResponseLevel? level}) async {
builder = MessageCreateUpdateBuilder.fromMessageBuilder(builder);
await _acknowledgeLock;
if (_delegate != null) {
return _delegate!.respond(builder, level: level);
}
level ??= _nearestCommandContext.command.resolvedOptions.defaultResponseLevel!;
if (_hasResponded) {
// We've already responded, just send a followup.
return interaction.createFollowup(builder, isEphemeral: level.hideInteraction);
}
_hasResponded = true;
if (_responseLevel != null && _responseLevel!.hideInteraction != level.hideInteraction) {
// We acknowledged the interaction but our original acknowledgement doesn't correspond to
// what's being requested here.
// It's a bit ugly, but send an empty response and delete it to match [level].
await interaction.respond(MessageBuilder(content: ''));
await interaction.deleteOriginalResponse();
return interaction.createFollowup(builder, isEphemeral: level.hideInteraction);
}
// Only update the message if we don't want to preserve it and the message's ephemerality
// matches whether we want the response to be ephemeral or not.
if (interaction is MessageComponentInteraction &&
!level.preserveComponentMessages &&
interaction.message?.flags.isEphemeral == level.hideInteraction) {
// Using interactionEvent.respond is actually the same as editing a message in the case where
// the interaction is a message component. In those cases, leaving `componentRows` as `null`
// would leave the existing components on the message - which likely isn't what our users
// expect. Instead, we override them and set the builder to have no components.
builder.components ??= [];
await (interaction as MessageComponentInteraction).respond(builder, updateMessage: true);
return interaction.fetchOriginalResponse();
}
await interaction.respond(builder, isEphemeral: level.hideInteraction);
return interaction.fetchOriginalResponse();
}