AltitudeBot/src/main/java/com/alttd/modalManager/modals/ModalRemindMe.java
Teriuihi 57b86d1933 Update JDA interactions and adjust package imports
This commit updates the handling of JDA interactions to use the latest available methods and classes. Classes such as Modal and SelectMenu have been refactored and updated with new package locations. This change also includes adjustments for event handling where methods dealing with SelectMenuInteractionEvent are updated to GenericSelectMenuInteractionEvent and StringSelectInteractionEvent. Finally, minor changes were made to replace the use of some javax annotations with their JetBrains equivalents.
2024-01-13 08:27:42 +01:00

141 lines
5.4 KiB
Java

package com.alttd.modalManager.modals;
import com.alttd.buttonManager.ButtonManager;
import com.alttd.buttonManager.buttons.remindMeConfirm.ButtonRemindMeConfirm;
import com.alttd.database.queries.QueriesReminders.Reminder;
import com.alttd.database.queries.QueriesReminders.ReminderType;
import com.alttd.modalManager.DiscordModal;
import com.alttd.util.Util;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.modals.Modal;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.interactions.components.text.TextInput;
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
import net.dv8tion.jda.api.interactions.modals.ModalMapping;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.utils.TimeUtil;
import java.util.Date;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
public class ModalRemindMe extends DiscordModal {
private static final HashMap<Long, RemindMeData> userToRemindMeMap = new HashMap<>();
public static synchronized void putData(long userId, TextChannel channel, long timestamp) {
userToRemindMeMap.put(userId, new RemindMeData(channel, timestamp));
}
private static synchronized RemindMeData pullData(long userId) {
return userToRemindMeMap.remove(userId);
}
private final ButtonManager buttonManager;
public ModalRemindMe(ButtonManager buttonManager) {
this.buttonManager = buttonManager;
}
@Override
public String getModalId() {
return "remindme";
}
@Override
public void execute(ModalInteractionEvent event) {
String title = getValidString(event.getValue("title"), event, true);
if (title == null)
return;
String desc = getValidString(event.getValue("description"), event, false);
if (desc == null)
desc = "";
long userId = event.getUser().getIdLong();
RemindMeData remindMeData = pullData(userId);
if (remindMeData == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Couldn't find the data from the command that triggered this modal"))
.setEphemeral(true).queue();
return;
}
Reminder reminder = new Reminder(
-1,
title,
desc,
userId,
remindMeData.textChannel.getGuild().getIdLong(),
remindMeData.textChannel.getIdLong(),
0,
false,
new Date().getTime(),
remindMeData.timestamp,
ReminderType.MANUAL,
null);
Button remindMeConfirm = buttonManager.getButtonFor("remind_me_confirm");
Button remindMeCancel = buttonManager.getButtonFor("remind_me_cancel");
if (remindMeConfirm == null || remindMeCancel == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve continue/cancel buttons"))
.setEphemeral(true).queue();
return;
}
MessageEmbed messageEmbed = new EmbedBuilder()
.setTitle(reminder.title())
.setDescription(reminder.description())
.appendDescription("\n\nWill remind <t:" + TimeUnit.MILLISECONDS.toSeconds(reminder.remindDate()) + ":R>")
.build();
event.deferReply().setEphemeral(true).queue(defer -> {
ButtonRemindMeConfirm.putReminder(userId, defer, reminder);
defer.editOriginalEmbeds(messageEmbed).queue(message ->
defer.editOriginalComponents().setActionRow(remindMeConfirm, remindMeCancel)
.queue(RestAction.getDefaultSuccess(), Util::handleFailure));
});
}
public String getValidString(ModalMapping modalMapping, ModalInteractionEvent event, boolean required) {
if (modalMapping == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Couldn't find modal"))
.setEphemeral(true).queue();
return null;
}
String string = modalMapping.getAsString();
if (string.isEmpty()) {
if (required)
event.replyEmbeds(Util.genericErrorEmbed("Error", "Couldn't find contents of modal"))
.setEphemeral(true).queue();
return null;
}
return string;
}
@Override
public Modal getModal() {
TextInput title = TextInput.create("title", "Title", TextInputStyle.SHORT)
.setPlaceholder("reminder title")
.setRequiredRange(1, 256)
.setRequired(true)
.build();
TextInput desc = TextInput.create("description", "Description", TextInputStyle.PARAGRAPH)
.setPlaceholder("optional reminder description")
.setRequiredRange(1, 4000)
.setRequired(false)
.build();
return Modal.create(getModalId(), "Remind Me")
.addActionRows(ActionRow.of(title), ActionRow.of(desc))
.build();
}
private record RemindMeData(TextChannel textChannel, long timestamp) {}
}