All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fr.alexpado.jda.interactions.impl.handlers.SinkResponseHandler Maven / Gradle / Ivy

package fr.alexpado.jda.interactions.impl.handlers;

import fr.alexpado.jda.interactions.entities.DispatchEvent;
import fr.alexpado.jda.interactions.interfaces.interactions.InteractionResponseHandler;
import net.dv8tion.jda.api.interactions.Interaction;
import net.dv8tion.jda.api.interactions.callbacks.IAutoCompleteCallback;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.CommandAutoCompleteInteraction;
import net.dv8tion.jda.api.interactions.commands.SlashCommandInteraction;
import net.dv8tion.jda.api.interactions.components.buttons.ButtonInteraction;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import net.dv8tion.jda.api.utils.messages.MessageEditBuilder;
import net.dv8tion.jda.api.utils.messages.MessageRequest;
import org.jetbrains.annotations.Nullable;

import java.util.function.Consumer;

/**
 * Class implementing the {@link InteractionResponseHandler} where its sole purpose is to handle null-responses.
 * 

* Although discouraged, null-responses are valid but will provide no feedback to the user. *

* This may even be more problematic when the response is from an {@link SlashCommandInteraction} where the user expect * an answer explicitly, just as Discord, so a default response will be sent instead. */ public class SinkResponseHandler implements InteractionResponseHandler { /** * Check if this {@link InteractionResponseHandler} can handle the provided response. * * @param event * The {@link DispatchEvent} source of the response. * @param response * The object representing the response given by an interaction. * * @return True if able to handle, false otherwise. */ @Override public boolean canHandle(DispatchEvent event, @Nullable Object response) { return response == null; } /** * Handle the response resulting from the {@link DispatchEvent} event provided. * * @param event * The {@link DispatchEvent} source of the response. * @param response * The {@link Object} to handle. */ @Override public void handleResponse(DispatchEvent event, @Nullable Object response) { if (event.getInteraction() instanceof SlashCommandInteraction slash) { this.answer(slash, data -> data.setContent("*Nothing to display*")); } else if (event.getInteraction() instanceof ButtonInteraction button) { this.acknowledgeButton(button); } else if (event.getInteraction() instanceof CommandAutoCompleteInteraction auto) { this.acknowledgeAutocomplete(auto); } } private void answer(T interaction, Consumer> consumer) { if (interaction.isAcknowledged()) { MessageEditBuilder builder = new MessageEditBuilder(); consumer.accept(builder); interaction.getHook().editOriginal(builder.build()).complete(); } else { MessageCreateBuilder builder = new MessageCreateBuilder(); consumer.accept(builder); interaction.reply(builder.build()).setEphemeral(true).complete(); } } private void acknowledgeButton(IReplyCallback button) { if (!button.isAcknowledged()) { button.deferReply().complete(); } } private void acknowledgeAutocomplete(IAutoCompleteCallback auto) { if (!auto.isAcknowledged()) { auto.replyChoices().complete(); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy