feat: command archive #55
4 changed files with 255 additions and 1 deletions
112
src/commands/misc/archive.ts
Normal file
112
src/commands/misc/archive.ts
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
import { SlashCommandBuilder } from '@discordjs/builders';
|
||||||
|
import { ChannelType, Client, CommandInteraction, EmbedBuilder } from 'discord.js';
|
||||||
|
import { getLocale, getLocalizations } from '../../utils/locales';
|
||||||
|
import { getFilename } from '../../utils/misc';
|
||||||
|
import '../../modules/string';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data: (client: Client) => {
|
||||||
|
const filename = getFilename(__filename);
|
||||||
|
return new SlashCommandBuilder()
|
||||||
|
.setName(
|
||||||
|
filename.toLowerCase())
|
||||||
|
.setDescription(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_desc`) ?? '')
|
||||||
|
.setNameLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_name`, true))
|
||||||
|
.setDescriptionLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_desc`))
|
||||||
|
|
||||||
|
// Command option
|
||||||
|
.addStringOption(option => option
|
||||||
|
.setName(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_opt1_name`) ?? '')
|
||||||
|
.setDescription(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_opt1_desc`) ?? '')
|
||||||
|
.setNameLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_opt1_name`, true))
|
||||||
|
.setDescriptionLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_opt1_desc`))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
interaction: async (interaction: CommandInteraction, client: Client) => {
|
||||||
|
const loc = getLocale(client, interaction.locale);
|
||||||
|
const desired_cat = interaction.options.get(client
|
||||||
|
.locales
|
||||||
|
.get(client.config.default_lang)
|
||||||
|
?.get(`c_${getFilename(__filename)}_opt1_name`) ?? '')?.value as string;
|
||||||
|
|
||||||
|
// If a category isn't specified
|
||||||
|
if (!desired_cat) {
|
||||||
|
|
||||||
|
// Sends a list of commands sorted into categories
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new EmbedBuilder()
|
||||||
|
.setColor('Blurple')
|
||||||
|
.setTitle(loc.get('c_archive1'))
|
||||||
|
.setDescription(loc.get('c_archive2')),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a category is specified
|
||||||
|
const clean_cat = ['L1', 'L2', 'L3', 'M1', 'M2'];
|
||||||
|
const channel = clean_cat.includes(desired_cat);
|
||||||
|
if (!channel) {
|
||||||
|
// Category doesn't exist or is not included
|
||||||
|
return interaction.reply({
|
||||||
|
content: `${loc.get('c_archive3')} \`${desired_cat}\``,
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send information about the command
|
||||||
|
const allChannel = interaction.guild?.channels.fetch();
|
||||||
|
allChannel?.then(channel_guild => {
|
||||||
|
const cat_to_archive = channel_guild.filter(chan => chan.type == ChannelType.GuildCategory).filter(chan => chan.name == desired_cat);
|
||||||
|
const cat_to_archive_id = cat_to_archive.map(cat => cat.id);
|
||||||
|
const cat_to_archive_name = cat_to_archive.map(cat => cat.name);
|
||||||
|
|
||||||
|
const cat_archived = channel_guild.filter(chan => chan.type == ChannelType.GuildCategory).filter(chan => chan.name == 'archive - ' + desired_cat);
|
||||||
|
const cat_archived_id = cat_archived.map(cat => cat.id);
|
||||||
|
const cat_archived_name = cat_archived.map(cat => cat.name);
|
||||||
|
|
||||||
|
const all_channel_desired = channel_guild.filter(chan => chan.type == 0).filter(chan => chan.parentId == cat_to_archive_id[0]);
|
||||||
|
if (all_channel_desired.size == 0) {
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new EmbedBuilder()
|
||||||
|
.setColor('Blurple')
|
||||||
|
.setTitle(loc.get('c_archive6'))
|
||||||
|
.setDescription(
|
||||||
|
// Loads the description
|
||||||
|
// according to the user's locals
|
||||||
|
loc.get('c_archive7')
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const all_channel_desired_name = all_channel_desired.map(cg_d => cg_d.name);
|
||||||
|
console.log(all_channel_desired_name);
|
||||||
|
all_channel_desired.forEach(elem =>
|
||||||
|
elem.setParent(cat_archived_id[0])
|
||||||
|
);
|
||||||
|
|
||||||
|
const list_cg_moved = all_channel_desired_name.toString().replaceAll(',', '\n');
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new EmbedBuilder()
|
||||||
|
.setColor('Blurple')
|
||||||
|
.setTitle(loc.get('c_archive4') + cat_to_archive_name + loc.get('c_archive5') + cat_archived_name + '`')
|
||||||
|
.setDescription(
|
||||||
|
// Loads the description
|
||||||
|
// according to the user's locals
|
||||||
|
list_cg_moved
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
117
src/commands/misc/prep.ts
Normal file
117
src/commands/misc/prep.ts
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
import { SlashCommandBuilder } from '@discordjs/builders';
|
||||||
|
import { ChannelType, Client, CommandInteraction, EmbedBuilder } from 'discord.js';
|
||||||
|
import { getLocale, getLocalizations } from '../../utils/locales';
|
||||||
|
import { getFilename } from '../../utils/misc';
|
||||||
|
import '../../modules/string';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data: (client: Client) => {
|
||||||
|
const filename = getFilename(__filename);
|
||||||
|
return new SlashCommandBuilder()
|
||||||
|
.setName(
|
||||||
|
filename.toLowerCase())
|
||||||
|
.setDescription(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_desc`) ?? '')
|
||||||
|
.setNameLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_name`, true))
|
||||||
|
.setDescriptionLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_desc`))
|
||||||
|
|
||||||
|
// Command option
|
||||||
|
.addStringOption(option => option
|
||||||
|
.setName(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_opt1_name`) ?? '')
|
||||||
|
.setDescription(client.locales.get(client.config.default_lang)
|
||||||
|
?.get(`c_${filename}_opt1_desc`) ?? '')
|
||||||
|
.setNameLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_opt1_name`, true))
|
||||||
|
.setDescriptionLocalizations(
|
||||||
|
getLocalizations(client, `c_${filename}_opt1_desc`))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
interaction: async (interaction: CommandInteraction, client: Client) => {
|
||||||
|
const loc = getLocale(client, interaction.locale);
|
||||||
|
const desired_cat = interaction.options.get(client
|
||||||
|
.locales
|
||||||
|
.get(client.config.default_lang)
|
||||||
|
?.get(`c_${getFilename(__filename)}_opt1_name`) ?? '')?.value as string;
|
||||||
|
|
||||||
|
// If a category isn't specified
|
||||||
|
if (!desired_cat) {
|
||||||
|
|
||||||
|
// Sends a list of commands sorted into categories
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new EmbedBuilder()
|
||||||
|
.setColor('Blurple')
|
||||||
|
.setTitle(loc.get('c_prep1'))
|
||||||
|
.setDescription(loc.get('c_prep2')),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a category is specified
|
||||||
|
const clean_cat = ['L1', 'L2', 'L3', 'M1', 'M2'];
|
||||||
|
const channel = clean_cat.includes(desired_cat);
|
||||||
|
if (!channel) {
|
||||||
|
// Category doesn't exist or is not included
|
||||||
|
return interaction.reply({
|
||||||
|
content: `${loc.get('c_prep3')} \`${desired_cat}\``,
|
||||||
|
ephemeral: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send information about the command
|
||||||
|
const allChannel = interaction.guild?.channels.fetch();
|
||||||
|
allChannel?.then(channel_guild => {
|
||||||
|
const cat_to_prep = channel_guild.filter(chan => chan.type == ChannelType.GuildCategory).filter(chan => chan.name == desired_cat);
|
||||||
|
const cat_to_prep_id = cat_to_prep.map(cat => cat.id);
|
||||||
|
const cat_to_prep_name = cat_to_prep.map(cat => cat.name);
|
||||||
|
|
||||||
|
// console.log(cat_to_prep);
|
||||||
|
const all_channel_desired = channel_guild.filter(chan => chan.type == 0).filter(chan => chan.parentId == cat_to_prep_id[0]);
|
||||||
|
const all_channel_desired_name = all_channel_desired.map(c_d => c_d.name);
|
||||||
|
|
||||||
|
let desc = '';
|
||||||
|
|
||||||
|
const general = 'général';
|
||||||
|
if (all_channel_desired_name.filter(cdn => cdn == general).length == 0) {
|
||||||
|
interaction.guild?.channels.create({
|
||||||
|
name: general,
|
||||||
|
type: 0,
|
||||||
|
parent: cat_to_prep_id[0],
|
||||||
|
});
|
||||||
|
desc = general + loc.get('c_prep5') + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
const info = 'informations';
|
||||||
|
if (all_channel_desired_name.filter(cdn => cdn == info).length == 0) {
|
||||||
|
interaction.guild?.channels.create({
|
||||||
|
name: info,
|
||||||
|
type: 0,
|
||||||
|
parent: cat_to_prep_id[0],
|
||||||
|
});
|
||||||
|
|
||||||
|
desc += info + loc.get('c_prep5') + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (desc == '') {
|
||||||
|
desc = loc.get('c_prep6');
|
||||||
|
}
|
||||||
|
|
||||||
|
return interaction.reply({
|
||||||
|
embeds: [
|
||||||
|
new EmbedBuilder()
|
||||||
|
.setColor('Blurple')
|
||||||
|
.setTitle(loc.get('c_prep4') + cat_to_prep_name)
|
||||||
|
.setDescription(
|
||||||
|
// Loads the description
|
||||||
|
// according to the user's locals
|
||||||
|
desc,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
|
@ -16,6 +16,29 @@
|
||||||
"c_help2": "`/help <commande>` pour obtenir plus d'informations sur une commande.",
|
"c_help2": "`/help <commande>` pour obtenir plus d'informations sur une commande.",
|
||||||
"c_help3": "Impossible de trouver :",
|
"c_help3": "Impossible de trouver :",
|
||||||
|
|
||||||
|
"c_archive_name": "Nettoyer",
|
||||||
|
"c_archive_desc": "Nettoyage pour le passage à niveau",
|
||||||
|
"c_archive_opt1_name": "catégorie",
|
||||||
|
"c_archive_opt1_desc": "Nom de la catégorie à nettoyer",
|
||||||
|
"c_archive1": "Liste des catégories soumis au nettoyage",
|
||||||
|
"c_archive2": "`L1`, `L2`, `L3`, `M1`, `M2`",
|
||||||
|
"c_archive3": "Impossible de trouver/nettoyer le salon :",
|
||||||
|
"c_archive4": "Listes des Salons archivés de la catégorie `",
|
||||||
|
"c_archive5": "` vers `",
|
||||||
|
"c_archive6": "Nettoyage",
|
||||||
|
"c_archive7": "Catégorie déjà nettoyée",
|
||||||
|
|
||||||
|
"c_prep_name": "Préparation",
|
||||||
|
"c_prep_desc": "Préparation des salons généraux pour la nouvelle année",
|
||||||
|
"c_prep_opt1_name": "année",
|
||||||
|
"c_prep_opt1_desc": "Nom de l'année à préparer'",
|
||||||
|
"c_prep1": "Liste des catégories soumis à la préparation",
|
||||||
|
"c_prep2": "`L1`, `L2`, `L3`, `M1`, `M2`",
|
||||||
|
"c_prep3": "Impossible de trouver/nettoyer le salon :",
|
||||||
|
"c_prep4": "Listes des Salons préparés `",
|
||||||
|
"c_prep5": "créé",
|
||||||
|
"c_prep6": "Pas besoin de préparation",
|
||||||
|
|
||||||
"u_time_at": "à",
|
"u_time_at": "à",
|
||||||
|
|
||||||
"c_reminder_name": "rappel",
|
"c_reminder_name": "rappel",
|
||||||
|
|
|
@ -12,7 +12,9 @@
|
||||||
|
|
||||||
/* Language and Environment */
|
/* Language and Environment */
|
||||||
"target": "es6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
"target": "es6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
"lib": [
|
||||||
|
"ES2021.String"
|
||||||
|
], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||||
|
|
Loading…
Reference in a new issue