From abb15ee52d21183b18ffd5eaaad2a3d4ac8bd9be Mon Sep 17 00:00:00 2001 From: William Harrison Date: Sat, 27 Jul 2024 16:19:10 +0800 Subject: [PATCH] fix occasional duplicates + remove edit command --- src/commands/reminders/edit.ts | 125 --------------------------------- src/events/client/ready.ts | 12 +--- src/util/setReminder.ts | 2 +- 3 files changed, 4 insertions(+), 135 deletions(-) delete mode 100644 src/commands/reminders/edit.ts diff --git a/src/commands/reminders/edit.ts b/src/commands/reminders/edit.ts deleted file mode 100644 index 6213014..0000000 --- a/src/commands/reminders/edit.ts +++ /dev/null @@ -1,125 +0,0 @@ -import Command from "../../classes/Command"; -import ExtendedClient from "../../classes/ExtendedClient"; -import { AutocompleteInteraction, ChatInputCommandInteraction, Interaction, TextChannel } from "discord.js"; - -import { emojis as emoji } from "../../config"; - -import Reminder from "../../models/Reminder"; - -const command: Command = { - name: "edit", - description: "Edit a reminder.", - options: [ - { - type: 3, - name: "id", - description: "The ID of the reminder to edit.", - min_length: 8, - max_length: 8, - required: true, - autocomplete: true - }, - - { - type: 3, - name: "new-reason", - description: "The new reason for the reminder.", - max_length: 1000, - required: true - } - ], - default_member_permissions: null, - botPermissions: [], - cooldown: 5, - enabled: true, - deferReply: true, - ephemeral: true, - async execute(interaction: ChatInputCommandInteraction, client: ExtendedClient, Discord: typeof import("discord.js")) { - try { - const id = interaction.options.get("id").value as string; - const newReason = interaction.options.get("new-reason").value as string; - - const reminder = await Reminder.findOne({ reminder_id: id, user: interaction.user.id }); - - if(!reminder) { - const error = new Discord.EmbedBuilder() - .setColor(client.config_embeds.error) - .setDescription(`${emoji.cross} I could not find that reminder!`) - - await interaction.editReply({ embeds: [error] }); - return; - } - - reminder.reason = newReason; - await reminder.save(); - - const timeoutId = `${interaction.user.id}-${id}`; - - // Clear old timeout - clearTimeout(client.reminders.get(timeoutId)); - - reminder.reason = newReason; - await reminder.save(); - - // Set reminder - client.reminders.set(`${interaction.user.id}-${id}`, setTimeout(async () => { - const embed = new Discord.EmbedBuilder() - .setColor(client.config_embeds.default) - .setTitle("Reminder") - .setDescription(newReason) - .addFields ( - { name: "Set", value: ` ()` } - ) - .setFooter({ text: `ID: ${reminder.reminder_id}` }) - .setTimestamp() - - try { - await interaction.user.send({ embeds: [embed] }); - } catch { - try { - const channel = client.channels.cache.get(interaction.channel.id) as TextChannel; - - if(!channel) return; - - await channel.send({ content: `${interaction.user}`, embeds: [embed] }); - } catch {} - } - - client.reminders.delete(`${interaction.user.id}-${id}`); - await Reminder.findOneAndDelete({ reminder_id: id, user: interaction.user.id }); - }, Number(reminder.due) - Date.now())) - - const edited = new Discord.EmbedBuilder() - .setColor(client.config_embeds.default) - .setDescription(`${emoji.tick} Your reminder has been updated!`) - - await interaction.editReply({ embeds: [edited] }); - } catch(err) { - client.logCommandError(err, interaction, Discord); - } - }, - async autocomplete(interaction: AutocompleteInteraction, client: ExtendedClient) { - const option = interaction.options.getFocused(true); - - if(option.name === "id") { - // Fetch user's reminders - const reminders = await Reminder.find({ user: interaction.user.id }); - - // Filter reminders - const filteredReminders = reminders.filter((reminder) => reminder.reminder_id.startsWith(option.value)); - - // Map reminders - const choices = filteredReminders.map((reminder) => { - return { - name: reminder.reminder_id, - value: reminder.reminder_id - } - }) - - // Set options - await interaction.respond(choices); - } - } -} - -export = command; diff --git a/src/events/client/ready.ts b/src/events/client/ready.ts index f3f9e2f..be1bc33 100644 --- a/src/events/client/ready.ts +++ b/src/events/client/ready.ts @@ -31,8 +31,6 @@ const event: Event = { }, 30 * 1000) // 30 seconds // Manage timeouts - const setReminders: string[] = []; - async function manageExistingTimeouts() { let reminders = await Reminder.find({}); const dueReminders = reminders.filter(reminder => reminder.due <= Date.now().toString()); @@ -84,9 +82,7 @@ const event: Event = { } for(const reminder of reminders) { - const result = await setReminder(reminder, client); - - if(result) setReminders.push(`${reminder.user}-${reminder.reminder_id}`); + await setReminder(reminder, client); } } @@ -97,11 +93,9 @@ const event: Event = { if(reminders.length === 0) return; for(const reminder of reminders) { - if(setReminders.includes(`${reminder.user}-${reminder.reminder_id}`)) continue; - - const result = await setReminder(reminder, client); + if(client.reminders.get(`${reminder.user}-${reminder.reminder_id}`)) continue; - if(result) setReminders.push(`${reminder.user}-${reminder.reminder_id}`); + await setReminder(reminder, client); } }, 60000) }) diff --git a/src/util/setReminder.ts b/src/util/setReminder.ts index 65a69b9..9af4c83 100644 --- a/src/util/setReminder.ts +++ b/src/util/setReminder.ts @@ -15,7 +15,7 @@ export default async function (reminder: any, client: ExtendedClient): Promise` } + { name: "Set", value: ` ()` } ) .setFooter({ text: `ID: ${reminder.reminder_id}` }) .setTimestamp()