feat: Reminders #44
3 changed files with 50 additions and 9 deletions
|
@ -1,7 +1,8 @@
|
||||||
import { SlashCommandBuilder } from '@discordjs/builders';
|
import { SlashCommandBuilder } from '@discordjs/builders';
|
||||||
import { Client, ChatInputCommandInteraction } from 'discord.js';
|
import { Client, ChatInputCommandInteraction } from 'discord.js';
|
||||||
import { getLocale, getLocalizations } from '../../utils/locales';
|
import { getLocalizations } from '../../utils/locales';
|
||||||
import { getFilename } from '../../utils/misc';
|
import { getFilename } from '../../utils/misc';
|
||||||
|
import { strToSeconds } from '../../utils/time';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: (client: Client) => {
|
data: (client: Client) => {
|
||||||
|
@ -145,7 +146,7 @@ export default {
|
||||||
switch (subcommand) {
|
switch (subcommand) {
|
||||||
// New reminder
|
// New reminder
|
||||||
case loc_default?.get(`c_${filename}_sub1_name`)
|
case loc_default?.get(`c_${filename}_sub1_name`)
|
||||||
?.toLowerCase() ?? '':
|
?.toLowerCase() ?? '': {
|
||||||
// TODO: Ici il y a 2 options, l'un pour le temps et l'autre
|
// TODO: Ici il y a 2 options, l'un pour le temps et l'autre
|
||||||
// pour le message, il faut tout le temps un temps, mais pas
|
// pour le message, il faut tout le temps un temps, mais pas
|
||||||
// tout le temps de message (= message par défaut, le reminder
|
// tout le temps de message (= message par défaut, le reminder
|
||||||
|
@ -158,11 +159,34 @@ export default {
|
||||||
// qui préfèrent tout faire en ligne de commandes et un truc
|
// qui préfèrent tout faire en ligne de commandes et un truc
|
||||||
// plus user-friendly avec une interface (et en plus c'est
|
// plus user-friendly avec une interface (et en plus c'est
|
||||||
// nouveau et cool)
|
// nouveau et cool)
|
||||||
break;
|
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-case-declarations
|
||||||
|
let time = interaction.options.getString(loc_default?.get(`c_${filename}_sub1_opt1_name`) as string);
|
||||||
|
const message = interaction.options.getString(loc_default?.get(`c_${filename}_sub1_opt2_name`) as string);
|
||||||
|
if (time != null) {
|
||||||
|
// Cli
|
||||||
|
let option = OptionReminder.Nothing;
|
||||||
|
|
||||||
|
// Split time
|
||||||
|
if (time?.endsWith('@')) {
|
||||||
|
time = time.slice(0, -1);
|
||||||
|
option = OptionReminder.Mention;
|
||||||
|
} else if (time?.toLowerCase().endsWith('p')) {
|
||||||
|
time = time.slice(0, -1);
|
||||||
|
option = OptionReminder.DirectMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
const seconds = strToSeconds(time);
|
||||||
|
await interaction.reply(`${option} - ${seconds}`);
|
||||||
|
} else {
|
||||||
|
// Boîte de dialogue
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
// List reminders
|
// List reminders
|
||||||
case loc_default?.get(`c_${filename}_sub2_name`)
|
case loc_default?.get(`c_${filename}_sub2_name`)
|
||||||
?.toLowerCase() ?? '':
|
?.toLowerCase() ?? '': {
|
||||||
// TODO: Liste dans un embed, naviguez entre les pages à l'aide
|
// TODO: Liste dans un embed, naviguez entre les pages à l'aide
|
||||||
// de boutons à la place d'utiliser des réactions
|
// de boutons à la place d'utiliser des réactions
|
||||||
// cf. https://discordjs.guide/interactions/modals.html#building-and-responding-with-modals
|
// cf. https://discordjs.guide/interactions/modals.html#building-and-responding-with-modals
|
||||||
|
@ -171,18 +195,26 @@ export default {
|
||||||
// rappels, sinon affiché les rappels de la personne qui fait
|
// rappels, sinon affiché les rappels de la personne qui fait
|
||||||
// la commande.
|
// la commande.
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
// Delete a reminder
|
// Delete a reminder
|
||||||
case loc_default?.get(`c_${filename}_sub3_name`)
|
case loc_default?.get(`c_${filename}_sub3_name`)
|
||||||
?.toLowerCase() ?? '':
|
?.toLowerCase() ?? '': {
|
||||||
// TODO: Message simple qui indique que l'on a supprimé
|
// TODO: Message simple qui indique que l'on a supprimé
|
||||||
// le reminder. Penser à check l'appartenance du reminder.
|
// le reminder. Penser à check l'appartenance du reminder.
|
||||||
// On donne l'ID du reminder en option.
|
// On donne l'ID du reminder en option.
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default: {
|
||||||
console.error(`${__filename}: unknown subcommand (${subcommand})`);
|
console.error(`${__filename}: unknown subcommand (${subcommand})`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum OptionReminder {
|
||||||
|
Nothing,
|
||||||
|
Mention,
|
||||||
|
DirectMessage,
|
||||||
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
"c_reminder_sub1_name": "nouveau",
|
"c_reminder_sub1_name": "nouveau",
|
||||||
"c_reminder_sub1_desc": "Met en place un rappel",
|
"c_reminder_sub1_desc": "Met en place un rappel",
|
||||||
"c_reminder_sub1_opt1_name": "temps",
|
"c_reminder_sub1_opt1_name": "temps",
|
||||||
"c_reminder_sub1_opt1_desc": "Temps désiré avant le rappel",
|
"c_reminder_sub1_opt1_desc": "Temps désiré avant le rappel, accolez un @ pour activer la mention ou un p pour envoyer en DM",
|
||||||
"c_reminder_sub1_opt2_name": "message",
|
"c_reminder_sub1_opt2_name": "message",
|
||||||
"c_reminder_sub1_opt2_desc": "Message du rappel",
|
"c_reminder_sub1_opt2_desc": "Message du rappel",
|
||||||
"c_reminder_sub2_name": "liste",
|
"c_reminder_sub2_name": "liste",
|
||||||
|
|
|
@ -14,3 +14,12 @@ export const showDate = (
|
||||||
locale.get('u_time_at')
|
locale.get('u_time_at')
|
||||||
} `);
|
} `);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Take a cooldown, for example 2min and transform it to seconds, here: 120s
|
||||||
|
* @param time time in human format
|
||||||
|
* @returns time in seconds
|
||||||
|
*/
|
||||||
|
export const strToSeconds = (time: string) => {
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue