From ea1bc83be3844a04c85579db5e1f144ce524ff5b Mon Sep 17 00:00:00 2001 From: Taz03 Date: Fri, 30 Dec 2022 00:29:57 +0530 Subject: [PATCH 1/3] added cancel feature to reminders --- .../commands/reminder/ReminderCommand.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java index a0bb1ee9a3..5735655d59 100644 --- a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java @@ -7,9 +7,12 @@ import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.emoji.Emoji; import net.dv8tion.jda.api.entities.emoji.EmojiUnion; +import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; +import net.dv8tion.jda.api.interactions.AutoCompleteQuery; import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback; +import net.dv8tion.jda.api.interactions.commands.Command; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.dv8tion.jda.api.interactions.commands.build.SubcommandData; @@ -24,6 +27,7 @@ import org.togetherjava.tjbot.commands.SlashCommandAdapter; import org.togetherjava.tjbot.commands.utils.MessageUtils; import org.togetherjava.tjbot.commands.utils.Pagination; +import org.togetherjava.tjbot.commands.utils.StringDistances; import org.togetherjava.tjbot.db.Database; import org.togetherjava.tjbot.db.generated.tables.records.PendingRemindersRecord; @@ -54,6 +58,9 @@ public final class ReminderCommand extends SlashCommandAdapter { private static final String COMMAND_NAME = "reminder"; private static final String LIST_SUBCOMMAND = "list"; + private static final String CANCEL_COMMAND = "cancel"; + private static final String CANCEL_ALL_COMMAND = "cancle-all"; + private static final String CANCEL_REMINDER_OPTION = "reminder"; static final String CREATE_SUBCOMMAND = "create"; static final String TIME_AMOUNT_OPTION = "time-amount"; static final String TIME_UNIT_OPTION = "time-unit"; @@ -94,6 +101,10 @@ public ReminderCommand(Database database) { getData().addSubcommands( new SubcommandData(CREATE_SUBCOMMAND, "creates a reminder").addOptions(timeAmount, timeUnit, content), + new SubcommandData(CANCEL_COMMAND, "cancels a pending reminder").addOption( + OptionType.STRING, CANCEL_REMINDER_OPTION, "reminder to cancel", true, + true), + new SubcommandData(CANCEL_ALL_COMMAND, "cancels all your pending reminders"), new SubcommandData(LIST_SUBCOMMAND, "shows all your currently pending reminders")); this.database = database; @@ -103,6 +114,8 @@ public ReminderCommand(Database database) { public void onSlashCommand(SlashCommandInteractionEvent event) { switch (event.getSubcommandName()) { case CREATE_SUBCOMMAND -> handleCreateCommand(event); + case CANCEL_COMMAND -> handleCancelCommand(event); + case CANCEL_ALL_COMMAND -> handleCancelAllCommand(event); case LIST_SUBCOMMAND -> handleListCommand(event); default -> throw new AssertionError( "Unexpected Subcommand: " + event.getSubcommandName()); @@ -127,6 +140,26 @@ public void onButtonClick(ButtonInteractionEvent event, List args) { event.editMessage(MessageEditData.fromCreateData(message)).queue(); } + @Override + public void onAutoComplete(CommandAutoCompleteInteractionEvent event) { + AutoCompleteQuery focusedOption = event.getFocusedOption(); + + if (!focusedOption.getName().equals(CANCEL_REMINDER_OPTION)) { + throw new IllegalArgumentException( + "Unexpected option, was : " + focusedOption.getName()); + } + + List pendingReminders = getPendingReminders(event.getGuild(), event.getUser()) + .map(PendingRemindersRecord::getContent); + List choices = StringDistances + .closeMatches(focusedOption.getValue(), pendingReminders, REMINDERS_PER_PAGE) + .stream() + .map(content -> new Command.Choice(content, content)) + .toList(); + + event.replyChoices(choices).queue(); + } + private void handleCreateCommand(SlashCommandInteractionEvent event) { int timeAmount = Math.toIntExact(event.getOption(TIME_AMOUNT_OPTION).getAsLong()); String timeUnit = event.getOption(TIME_UNIT_OPTION).getAsString(); @@ -157,6 +190,25 @@ private void handleCreateCommand(SlashCommandInteractionEvent event) { .insert()); } + private void handleCancelCommand(SlashCommandInteractionEvent event) { + String content = event.getOption(CANCEL_REMINDER_OPTION).getAsString(); + + database.write(context -> context.delete(PENDING_REMINDERS) + .where(PENDING_REMINDERS.CONTENT.eq(content) + .and(PENDING_REMINDERS.AUTHOR_ID.eq(event.getUser().getIdLong()))) + .execute()); + + event.reply("Your reminder is canceled").setEphemeral(true).queue(); + } + + private void handleCancelAllCommand(SlashCommandInteractionEvent event) { + database.write(context -> context.delete(PENDING_REMINDERS) + .where(PENDING_REMINDERS.AUTHOR_ID.eq(event.getUser().getIdLong())) + .execute()); + + event.reply("All your reminder are canceled").setEphemeral(true).queue(); + } + private void handleListCommand(SlashCommandInteractionEvent event) { Result pendingReminders = getPendingReminders(event.getGuild(), event.getUser()); From 6f5c7daddb9dbd50e89a9a0244d7b68f47daa257 Mon Sep 17 00:00:00 2001 From: Taz03 Date: Sun, 22 Jan 2023 19:22:05 +0530 Subject: [PATCH 2/3] removed cancel all command --- .../tjbot/commands/reminder/ReminderCommand.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java index 5735655d59..2d5bbe327a 100644 --- a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java @@ -59,7 +59,6 @@ public final class ReminderCommand extends SlashCommandAdapter { private static final String COMMAND_NAME = "reminder"; private static final String LIST_SUBCOMMAND = "list"; private static final String CANCEL_COMMAND = "cancel"; - private static final String CANCEL_ALL_COMMAND = "cancle-all"; private static final String CANCEL_REMINDER_OPTION = "reminder"; static final String CREATE_SUBCOMMAND = "create"; static final String TIME_AMOUNT_OPTION = "time-amount"; @@ -104,7 +103,6 @@ public ReminderCommand(Database database) { new SubcommandData(CANCEL_COMMAND, "cancels a pending reminder").addOption( OptionType.STRING, CANCEL_REMINDER_OPTION, "reminder to cancel", true, true), - new SubcommandData(CANCEL_ALL_COMMAND, "cancels all your pending reminders"), new SubcommandData(LIST_SUBCOMMAND, "shows all your currently pending reminders")); this.database = database; @@ -115,7 +113,6 @@ public void onSlashCommand(SlashCommandInteractionEvent event) { switch (event.getSubcommandName()) { case CREATE_SUBCOMMAND -> handleCreateCommand(event); case CANCEL_COMMAND -> handleCancelCommand(event); - case CANCEL_ALL_COMMAND -> handleCancelAllCommand(event); case LIST_SUBCOMMAND -> handleListCommand(event); default -> throw new AssertionError( "Unexpected Subcommand: " + event.getSubcommandName()); @@ -201,14 +198,6 @@ private void handleCancelCommand(SlashCommandInteractionEvent event) { event.reply("Your reminder is canceled").setEphemeral(true).queue(); } - private void handleCancelAllCommand(SlashCommandInteractionEvent event) { - database.write(context -> context.delete(PENDING_REMINDERS) - .where(PENDING_REMINDERS.AUTHOR_ID.eq(event.getUser().getIdLong())) - .execute()); - - event.reply("All your reminder are canceled").setEphemeral(true).queue(); - } - private void handleListCommand(SlashCommandInteractionEvent event) { Result pendingReminders = getPendingReminders(event.getGuild(), event.getUser()); From 7f994e1fe567ea99ec21cb1af1b0092478c3fbd3 Mon Sep 17 00:00:00 2001 From: Taz03 Date: Mon, 23 Jan 2023 18:55:35 +0530 Subject: [PATCH 3/3] code fixes --- .../togetherjava/tjbot/commands/reminder/ReminderCommand.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java index 2d5bbe327a..b9daf7404b 100644 --- a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/ReminderCommand.java @@ -142,8 +142,7 @@ public void onAutoComplete(CommandAutoCompleteInteractionEvent event) { AutoCompleteQuery focusedOption = event.getFocusedOption(); if (!focusedOption.getName().equals(CANCEL_REMINDER_OPTION)) { - throw new IllegalArgumentException( - "Unexpected option, was : " + focusedOption.getName()); + throw new AssertionError("Unexpected option, was : " + focusedOption.getName()); } List pendingReminders = getPendingReminders(event.getGuild(), event.getUser())