aboutsummaryrefslogtreecommitdiff
path: root/bot/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'bot/src/commands')
-rw-r--r--bot/src/commands/timer.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/bot/src/commands/timer.js b/bot/src/commands/timer.js
new file mode 100644
index 0000000..3b3807e
--- /dev/null
+++ b/bot/src/commands/timer.js
@@ -0,0 +1,51 @@
+import { SlashCommandBuilder, time, TimestampStyles } from 'discord.js';
+
+export default {
+ data: new SlashCommandBuilder()
+ .setName('timer')
+ .setDescription('Reminds you for something after a certain amount of time.')
+ .addIntegerOption(option =>
+ option
+ .setName('seconds')
+ .setDescription('Seconds to wait for.'))
+ .addIntegerOption(option =>
+ option
+ .setName('minutes')
+ .setDescription('Minutes to wait for.'))
+ .addIntegerOption(option =>
+ option
+ .setName('hours')
+ .setDescription('Hours to wait for.'))
+ .addStringOption(option =>
+ option
+ .setName('message')
+ .setDescription('Enter the message you want to be reminded of.')),
+ async execute(interaction) {
+ let timer = 0;
+ const seconds = interaction.options.getInteger('seconds') || 0;
+ const minutes = interaction.options.getInteger('minutes') || 0;
+ const hours = interaction.options.getInteger('hours') || 0;
+ const message = interaction.options.getString('message');
+ const content = message ? `Reason: \`\`\`\n${message}\n\`\`\`` : '';
+ if (!seconds && !minutes && !hours) return await interaction.reply({ content: 'Please provide a time to wait for.', ephemeral: true });
+
+ timer = seconds + (minutes * 60) + (hours * 3600);
+
+ if (timer > 0) {
+ const date = new Date();
+ date.setSeconds(date.getSeconds() + timer);
+ const timeString = time(date, TimestampStyles.RelativeTime);
+ await interaction.reply(`Timer set! Will remind you ${timeString}`);
+ }
+
+ setTimeout(async function(){
+ if (interaction.guild) {
+ let remindChannel = interaction.client.channels.cache.get(interaction.channel.id);
+ if (!remindChannel) return console.error('Unknown channel.');
+ return await remindChannel.send({ content: `${interaction.user}, You have been reminded.${message ? '\n\n' + content : ''}` });
+ } else {
+ return await interaction.user.send({ content: `You have been reminded.${message ? '\n\n' + content : ''}` });
+ }
+ }, timer * 1000);
+ }
+};