grand commit que tutur attend ( marche pas le raidmode en dev)

sinon il y a pleins de truc comme les anti raid , des coorectif ect
This commit is contained in:
VALOU3336
2024-04-22 18:30:33 +02:00
parent d8912855ff
commit 9bd39c69ca
178 changed files with 9241 additions and 480 deletions
+28 -16
View File
@@ -1,6 +1,29 @@
const fetch = require('node-fetch');
const axios = require('axios');
const { EmbedBuilder } = require('discord.js');
async function getUserBanner(user, message) {
try {
const response = await axios.get(`https://discord.com/api/users/${user.id}`, {
headers: {
Authorization: `Bot ${message.client.token}`
}
});
const data = response.data;
if (!data.banner) {
return null;
}
const format = data.banner.startsWith('a_') ? 'gif' : 'png';
const bannerURL = `https://cdn.discordapp.com/banners/${user.id}/${data.banner}.${format}?size=2048`;
return bannerURL;
} catch (error) {
console.error(error);
message.reply('Une erreur s\'est produite lors de la récupération des données de l\'utilisateur.');
return null;
}
}
module.exports = {
name: 'banner',
aliases: ['bannière', 'banniere'],
@@ -11,26 +34,15 @@ module.exports = {
async execute(message, args, client) {
const user = message.mentions.users.first() || message.author;
const bannerURL = await getUserBanner(user, message);
const response = await fetch(`https://discord.com/api/users/${user.id}`, {
method: 'GET',
headers: {
Authorization: `Bot ${message.client.token}`
}
});
const data = await response.json();
if (!data.banner) {
return message.reply('Cet utilisateur n\'a pas de bannière.');
if (!bannerURL) {
return message.reply('Cet utilisateur n\'a pas de bannière.');
}
const format = data.banner.startsWith('a_') ? 'gif' : 'png';
const bannerURL = `https://cdn.discordapp.com/banners/${user.id}/${data.banner}.${format}?size=2048`;
const embed = new EmbedBuilder()
.setTitle(`Bannière de ${user.tag}`)
.setImage(bannerURL)
.setImage(bannerURL || '')
.setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() })
.setTimestamp();
+25
View File
@@ -0,0 +1,25 @@
const axios = require('axios');
const BlaguesAPI = require('blagues-api');
const { EmbedBuilder } = require('discord.js');
module.exports = {
name: 'blague',
description: 'Envoie une blague au hasard.',
emote: '😄',
utilisation: 'blague ',
category: 'utils',
async execute(message, args, client) {
const blagues = new BlaguesAPI("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMjcyNzI0MTA4NjQ1NDk4ODgwIiwibGltaXQiOjEwMCwia2V5Ijoib3V6cDQ2cjhkT3NlV1I1ZmlmcDNCc1pZSDBGWHJsb0lBQmtSTXpmcnpJalp3NmVidEciLCJjcmVhdGVkX2F0IjoiMjAyNC0wMy0wNVQxODowMjozOCswMDowMCIsImlhdCI6MTcwOTY2MTc1OH0.i-hNHrRXSdceVa_4ozInjVAapkK6KNRPt1PjO5z6I7g");
const blague = await blagues.random();
const question = blague.joke;
const reponse = blague.answer;
const randomColor = Math.floor(Math.random() * 16777215).toString(16);
const blagueEmbed = new EmbedBuilder()
.setDescription(`**${question}**\n➜ ||${reponse}||`)
.setColor(parseInt(randomColor, 16))
message.reply({ embeds: [blagueEmbed] });
},
};
+19 -3
View File
@@ -1,5 +1,5 @@
const { EmbedBuilder } = require('discord.js');
const fetch = require('node-fetch');
module.exports = {
name: 'botconfig',
description: 'Affiche la configuration du bot',
@@ -11,8 +11,23 @@ module.exports = {
async execute(message, args, client) {
const bot = client.user;
const presenceStatus = bot.presence.status;
let presenceEmoji = '';
const axios = require('axios');
const response = await fetch(`https://discord.com/api/users/${bot.id}`, {
method: 'GET',
headers: {
Authorization: `Bot ${message.client.token}`
}
});
const data = await response.json();
if (!data.banner) {
return message.reply('Cet utilisateur n\'a pas de bannière.');
}
const format = data.banner.startsWith('a_') ? 'gif' : 'png';
const bannerURL = `https://cdn.discordapp.com/banners/${bot.id}/${data.banner}.${format}?size=2048`;
let presenceEmoji = '';
switch (presenceStatus) {
case 'online':
presenceEmoji = '🟢';
@@ -36,6 +51,7 @@ module.exports = {
{ name: 'Nom du bot', value: bot.username || 'Inconnu' },
{ name: 'ID du bot', value: bot.id || 'Inconnu'},
{ name: ' ', value: `[URL du profil](${bot.displayAvatarURL({ dynamic: true })})`},
{ name: ' ', value: `[URL de la banniere](${bannerURL})`},
{ name: 'Présence', value: `${presenceEmoji}`},
{ name: 'Statut', value: bot.presence.activities[0] && bot.presence.activities[0].state ? bot.presence.activities[0].state : 'Aucun statut'}
)
+20
View File
@@ -0,0 +1,20 @@
module.exports = {
name: 'christmas',
description: 'Calcule le nombre de jours jusqu\'à Noël.',
emote: '🎄',
utilisation: 'christmas ',
category: 'game',
async execute(message, args, client) {
let today = new Date();
let xmas = new Date(today.getFullYear(), 11, 24);
if (today.getMonth() == 11 && today.getDate() > 24) {
xmas.setFullYear(xmas.getFullYear() + 1);
}
let one_day = 1000 * 60 * 60 * 24;
let daysleft = Math.ceil((xmas.getTime() - today.getTime()) / (one_day));
let days = daysleft + 1;
message.reply(`🎄・Noël\n${days} jours jusqu'à Noël`);
},
};
+1 -1
View File
@@ -28,7 +28,7 @@ module.exports = {
.setTitle('🎬 Films Populaires & Récents 🎥')
.setDescription('Voici les films populaires et les plus récents en ce moment :')
.setThumbnail(botUser.displayAvatarURL())
.setTimestamp() // Ajoute l'heure actuelle
.setTimestamp()
.setFooter({ text: 'Commande Films', iconURL:botUser.displayAvatarURL() });
filmsEmbed.addFields({ name: 'Films Populaires', value: popularFilms.map(film => film.title).join(',') || 'Non disponible' });
filmsEmbed.addFields({ name: 'Nouveautés au Cinéma', value: recentFilms.map(film => film.title).join(',') || 'Non disponible' });
+20
View File
@@ -0,0 +1,20 @@
module.exports = {
name: 'halloween',
description: 'Calcule le nombre de jours jusqu\'à Halloween.',
emote: '🎃',
utilisation: 'halloween ',
category: 'game',
async execute(message, args, client) {
let today = new Date();
let halloween = new Date(today.getFullYear(), 9, 31);
if (today.getMonth() > 9) {
halloween.setFullYear(halloween.getFullYear() + 1);
}
let one_day = 1000 * 60 * 60 * 24;
let daysleft = Math.ceil((halloween.getTime() - today.getTime()) / (one_day));
let days = daysleft + 1;
message.reply(`🎃・Halloween\n${days} jours jusqu'à Halloween`);
},
};
+137 -16
View File
@@ -17,18 +17,126 @@ module.exports = {
const embed = new EmbedBuilder()
.setTitle("Arguments de messages")
.addFields(
{ name: '{MemberMention}', value: `Mentionne le membre concerné` , inline: true },
{ name: '{MemberName}', value: `Le nom du membre concerné` , inline: true },
{ name: '{MemberDisplayName}', value:'Le pseudo de serveur du membre concerné', inline: true },
{ name: '{MemberJoinedAt}',value: `La date à la quelle le membre concerné a rejoint le serveur`, inline: true },
{ name: '{MemberID}', value: `L'ID du membre concerné` , inline: true },
{ name: '{MemberPic}', value:'La photo de profil du membre concerné' , inline: true },
{ name: '{MemberCreatedAt}', value: 'La date de création du compte du membre concerné ', inline: true },
{ name: '{ServerName}', value: 'Le nom du serveur concerné', inline: true },
{ name: '{ServerMembersCount}', value: 'Le nombre total de membres sur le serveur', inline: true }
)
{ name: '{MemberMention}', value: `Mentionne le membre concerné (\`exemple\`: **<@${message.author.id}>**)`, inline: true },
{ name: '{MemberName}', value: `Le nom du membre concerné (\`exemple\`: **${message.author.username}**)`, inline: true },
{ name: '{MemberDisplayName}', value: `Le pseudo de serveur du membre concerné (\`exemple\`: **${message.member.displayName}**)`, inline: true },
{ name: '{MemberJoinedAt}', value: `La date à laquelle le membre concerné a rejoint le serveur (\`exemple\`: **${new Date(message.member.joinedAt).toLocaleDateString('fr-FR')}**)`, inline: true },
{ name: '{MemberID}', value: `L\'ID du membre concerné (\`exemple\`: **${message.author.id}**)`, inline: true },
{ name: '{MemberPic}', value: `La photo de profil du membre concerné (\`exemple\`: **${message.author.displayAvatarURL({dynamic: true})}**)`, inline: true },
{ name: '{MemberCreatedAt}', value: `La date de création du compte du membre concerné (\`exemple\`: **${new Date(message.author.createdAt).toLocaleDateString('fr-FR')}**)`, inline: true },
{ name: '{ServerName}', value: `Le nom du serveur concerné (\`exemple\`: **${message.guild.name}**)`, inline: true },
{ name: '{ServerMembersCount}', value: `Le nombre total de membres sur le serveur (\`exemple\`: **${message.guild.memberCount}**)`, inline: true }
)
return message.reply({ embeds: [embed] });
}
} else if (args[0] === 'antiraid' ) {
const embed = new EmbedBuilder()
.setTitle("Help AntiRaid")
.setDescription(`
**AntiRaid Configuration**
La commande \`antiraid\` permet de configurer la protection anti-raid pour votre serveur. Voici comment vous pouvez la configurer :
**Syntaxe :**
\`\`\`
+antiraid [type] [action]
\`\`\`
**Types disponibles :**
- \`whitelist\` : Permet de limiter l'accès aux actions anti-raid uniquement au whitelist du serveur et aux owners et buyer du bot.
- \`owner\` : Permet de limiter l'accès aux actions anti-raid uniquement au owners et buyer du bot.
- \`buyer\` : Permet de limiter l'accès aux actions anti-raid uniquement aux buyer du bot.
- \`off\` : Désactive la protection anti-raid.
**Actions disponibles :**
- \`derank\` : Retire les rôles dangereux des utilisateurs qui tentent de déclencher un raid.
- \`kick\` : Expulse les utilisateurs qui tentent de déclencher un raid.
- \`ban\` : Bannit les utilisateurs qui tentent de déclencher un raid.
- \`nothing\` : Ne fait rien en réponse à un raid.
**Exemples d'utilisation :**
- Pour activer la protection anti-raid avec une liste blanche : \`+antiraid whitelist derank\`
- Pour désactiver la protection anti-raid : \`+antiraid off\`
Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande.
`)
return message.reply({ embeds: [embed] });
} else if (args[0] === 'backup') {
const embed = new EmbedBuilder()
.setTitle("Aide pour la commande Backup")
.setDescription(`
**Gestion des sauvegardes**
La commande \`backup\` permet de créer, lister, charger ou supprimer des sauvegardes du serveur. Voici comment vous pouvez l'utiliser :
**Syntaxe :**
\`\`\`
+backup <paramètres>
\`\`\`
**Paramètres disponibles :**
- \`create\` : Crée une sauvegarde du serveur actuel.
- \`list\` : Affiche la liste de toutes les sauvegardes disponibles.
- \`load\` : Charge une sauvegarde sur le serveur. Vous devez spécifier l'ID de la sauvegarde à charger.
- \`delete\` : Supprime une sauvegarde. Vous devez spécifier l'ID de la sauvegarde à supprimer.
**Exemples d'utilisation :**
* Pour créer une sauvegarde : \`+backup create\`
* Pour afficher la liste des sauvegardes : \`+backup list\`
* Pour charger une sauvegarde (remplacez \`<backupId>\` par l'ID de la sauvegarde) : \`+backup load <backupId>\`
* Pour supprimer une sauvegarde (remplacez \`<backupId>\` par l'ID de la sauvegarde) : \`+backup delete <backupId>\`
Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande.
`)
return message.reply({ embeds: [embed] });
} else if (args[0] === 'rolelimit') {
const embed = new EmbedBuilder()
.setTitle("Aide pour la commande RoleLimit")
.setDescription(`
**Gestion des limites de rôles**
La commande \`rolelimit\` permet de gérer les limites de rôles pour les utilisateurs. Voici comment vous pouvez l'utiliser :
**Syntaxe :**
\`\`\`
+rolelimit
\`\`\`
**Fonctionnalités :**
- **Ajouter une limite de rôle :** Utilisez le bouton "Add" pour ajouter une limite à un rôle spécifique. Vous devrez mentionner le rôle ou fournir son ID et spécifier la limite.
- **Supprimer une limite de rôle :** Utilisez le bouton "Remove" pour supprimer une limite de rôle. Vous devrez mentionner le rôle ou fournir son ID.
**Exemples d'utilisation :**
- Pour ajouter une limite de rôle : Sélectionnez le bouton "Add", mentionnez le rôle et spécifiez la limite.
- Pour supprimer une limite de rôle : Sélectionnez le bouton "Remove", mentionnez le rôle.
Note : Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande.
`)
return message.reply({ embeds: [embed] });
} else if (args[0] === 'confession') {
const embed = new EmbedBuilder()
.setTitle("Aide pour le système de confession")
.setDescription(`
**Configuration du système de confession**
Le système de confession permet aux utilisateurs de partager leurs confessions de manière anonyme. Voici comment vous pouvez le configurer :
**Syntaxe :**
\`\`\`
+setconfession [channel|send] [channelID|#channel]
\`\`\`
**Paramètres disponibles :**
- \`channel\` : Définit le salon de confession pour le serveur. Vous devez spécifier l'ID du salon ou mentionner le salon.
- \`send\` : Envoie un embed avec un bouton pour ajouter une confession dans le salon spécifié. Vous devez spécifier l'ID du salon ou mentionner le salon.
**Exemples d'utilisation :**
- Pour définir le salon de confession : \`+setconfession channel <channelID|#channel>\`
- Pour envoyer un embed de confession : \`+setconfession send <channelID|#channel>\`
**Note : **Assurez-vous d'avoir les permissions nécessaires pour exécuter cette commande.
`)
return message.reply({ embeds: [embed] });
} else {
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
if (err) {
@@ -43,7 +151,7 @@ module.exports = {
let mainPrefix = data.prefixes && data.prefixes.main ? data.prefixes.main : defaultPrefix;
let serverPrefix = data.prefixes && data.prefixes[guildId];
const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix;
if (args[0]) {
if (args[0] && client.commands.has(args[0])) {
const command = client.commands.get(args[0]);
if (!command) {
return message.reply(`Je n'ai pas trouvé de commande nommée "${args[0]}".`);
@@ -74,7 +182,7 @@ module.exports = {
{ name: 'Permissions', value: commandPerm === 11 ? 'buyer' : commandPerm === 10 ? 'owner' : `Perm level: ${commandPerm}`, inline: true },
)
.setTimestamp()
.setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})})
.setFooter({text: `By Valou336 and tuturp33`, iconURL: client.user.displayAvatarURL({dynamic: true})})
return message.reply({ embeds: [embed_command] });
}
@@ -87,9 +195,21 @@ module.exports = {
game: [],
gestion: [],
utils: [],
invitation: [],
other: [],
};
const categoryEmojis = {
antiraid: '🛡️',
botcontrol: '🛠️',
moderation: '⚖️',
buyer: '💰',
game: '🎮',
gestion: '📝',
utils: '⚙️',
invitation: '📩',
other: '❓',
};
let liste = [];
for (const command of client.commands.values()) {
const existingCommand = liste.find(cmd => cmd.name === command.name);
@@ -144,13 +264,13 @@ module.exports = {
.setPlaceholder('Sélectionnez une catégorie')
.addOptions([
{ label: 'Accueil', value: 'home' },
...Object.keys(categories).map(category => ({ label: `Catégorie ${category}`, value: category })),
...Object.keys(categories).map(category => ({ label: `${categoryEmojis[category]} ${category}`, value: category })),
]);
const row = new ActionRowBuilder()
.addComponents(menu);
const sentMessage = await message.reply({ embeds: [embeds[args[0]] || embeds.home], components: [row] });
const sentMessage = await message.reply({ embeds: [embeds.home], components: [row] });
const filter = i => i.customId === 'help_menu' && i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 60000 });
@@ -161,5 +281,6 @@ module.exports = {
collector.on('end', () => {
sentMessage.edit({ components: [] });
});
}
},
};
+32 -16
View File
@@ -1,6 +1,7 @@
const { EmbedBuilder , ButtonBuilder, ButtonStyle, ActionRowBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
module.exports = {
name: 'helpall',
description: 'Liste toutes les commandes disponibles par niveau de permission',
@@ -35,27 +36,43 @@ try {
commandsByPermission[permissionLevel].push(commandName);
}
const embeds = Object.entries(commandsByPermission).map(([permissionLevel, commands]) => {
const commandDescriptions = commands.map(commandName => {
const command = client.commands.get(commandName);
if (!command) {
if (!command || permissions[command.name] === "off") {
return null;
}
return `**${prefix}${commandName}**\n\`${command.description}\``;
return `* \`${prefix}${command.utilisation}\``;
}).filter(Boolean);
if (commandDescriptions.length === 0) {
return null;
if (commandDescriptions.length === 0) {
return null;
}
const embed = new EmbedBuilder()
.setTitle(`Commandes de niveau de permission ${permissionLevel}`)
.setColor('#0099ff');
const embedsForPermissionLevel = [];
let currentEmbedDescription = '';
commandDescriptions.forEach(description => {
if ((currentEmbedDescription + description).length <= 4096) {
currentEmbedDescription += description + '\n';
} else {
embedsForPermissionLevel.push(currentEmbedDescription);
currentEmbedDescription = description + '\n';
}
});
if (currentEmbedDescription) {
embedsForPermissionLevel.push(currentEmbedDescription);
}
embed.setDescription(commandDescriptions.join('\n'));
return embed;
}).filter(Boolean)
return embedsForPermissionLevel.map(description => {
const embed = new EmbedBuilder()
.setTitle(`Commandes de niveau de permission ${permissionLevel === '0' ? "public" : permissionLevel === '10' ? "owner" : permissionLevel === '11' ? "buyer" : permissionLevel}`)
.setColor('#0099ff');
embed.setDescription(description);
embed.permissionLevel = permissionLevel
return embed;
});
}).flat().filter(Boolean);
if (embeds.length === 0) {
return message.reply("Aucune commande disponible pour ce serveur.");
@@ -81,22 +98,21 @@ try {
filter: (interaction) => interaction.isButton() && interaction.user.id === message.author.id,
time: 60000
});
const userPermissionLevel = await getPermissionLevel(message.member, client);
let currentPage = 0;
collector.on('collect', async (interaction) => {
await interaction.deferUpdate();
if (interaction.customId === 'back') {
currentPage = currentPage > 0 ? --currentPage : embeds.length - 1;
currentPage = currentPage > 0 ? --currentPage : 0;
} else if (interaction.customId === 'next') {
currentPage = currentPage + 1 < embeds.length ? ++currentPage : 0;
currentPage = currentPage + 1 < embeds.length && embeds[currentPage + 1].permissionLevel <= userPermissionLevel ? ++currentPage : 0;
}
await msg.edit({ embeds: [embeds[currentPage]], components: [row] });
});
collector.on('end', () => msg.edit({ embeds: [embeds[currentPage]], components: [] }));
}catch (error) {
console.log(error);
return message.reply("Veuillez changer des commandes de permission pour avoir accès au helpall.");
}
},
+1 -2
View File
@@ -7,7 +7,7 @@ module.exports = {
description: "Recherche et envoie des images basées sur une requête.",
category: 'utils',
emote: '🔍',
utilisation: '+image [requête]',
utilisation: 'image [requête]',
async execute(message, args, client) {
const query = args.join(" ");
if (!query) return message.react("❌");
@@ -25,7 +25,6 @@ module.exports = {
message.channel.send({ embeds: [embed] });
}).catch(error => {
console.error(error);
message.reply('Une erreur est survenue lors de la recherche de l\'image.');
});
+1 -1
View File
@@ -5,7 +5,7 @@ module.exports = {
description: "Permet d'afficher les informations des utilisateurs du serveur.",
category: 'utils',
emote: '🌐',
utilisation: '+statserveur',
utilisation: 'statserveur',
async execute(message, args, client) {
const members = await message.guild.members.fetch();
const totalMembers = members.size;
+56
View File
@@ -0,0 +1,56 @@
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const paginationEmbed = require('discordjs-button-pagination');
module.exports = {
name: 'news',
aliases: ['changelog'],
description: 'Affiche tous les changements récents sur le bot',
category: "utils" ,
emote:"📌",
utilisation: "changelog",
async execute(message, args, client) {
let changelogs = await new Promise((resolve, reject) => {
db.get('SELECT value FROM master WHERE id = ?', ["changelogGestion"], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : []);
});
});
if (changelogs.length === 0) {
const noChangeLogEmbed = new EmbedBuilder()
.setTitle('Aucun changement récent')
.setDescription('Il n\'y a aucun changement récent à afficher.')
.setColor('#0099ff');
return message.channel.send({ embeds: [noChangeLogEmbed] });
}
const embeds = changelogs.map((log, index) => {
const embed = new EmbedBuilder()
.setTitle(new Date(log.timestamp).toLocaleDateString())
.setDescription(log.text)
.setColor('#0099ff');
return embed;
});
const backButton = new ButtonBuilder()
.setCustomId('previousbtn')
.setLabel('Précédent')
.setStyle(ButtonStyle.Danger);
const nextButton = new ButtonBuilder()
.setCustomId('nextbtn')
.setLabel('Suivant')
.setStyle(ButtonStyle.Success);
const buttonList = [backButton, nextButton];
const timeout = 15000;
paginationEmbed(message, embeds, buttonList, timeout);
},
};
+114 -25
View File
@@ -1,43 +1,132 @@
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
const paginationEmbed = require('discordjs-button-pagination');
module.exports = {
name: 'prevname',
description: 'Affiche tous les pseudos précédents et permet de les supprimer',
category: 'utils',
emote: '🔍',
utilisation: 'prevname',
async execute(message, args) {
async execute(message, args, client) {
const userId = message.author.id;
let nameChanges = await new Promise((resolve, reject) => {
db.get('SELECT value FROM prevname WHERE id = ?', [userId], (err, row) => {
if (args[0] === "clear") {
let hasPrevname = await new Promise((resolve, reject) => {
db.get('SELECT value FROM prevname WHERE id = ?', [userId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row !== undefined);
});
});
if (!hasPrevname) {
await message.reply({ content: "Vous n'avez aucun prevname à supprimer."});
return;
}
db.run('DELETE FROM prevname WHERE id = ?', [userId], (err) => {
if (err) {
console.error(err.message);
reject(err);
} else {
message.reply({ content: "Vos prevname ont été correctement supprimés." });
}
resolve(row ? JSON.parse(row.value) : []);
});
});
}else {
let nameChanges = await new Promise((resolve, reject) => {
db.get('SELECT value FROM prevname WHERE id = ?', [userId], (err, row) => {
if (err) {
console.error(err.message);
reject(err);
}
resolve(row ? JSON.parse(row.value) : []);
});
});
let description = 'Vous n\'avez pas de pseudos précédents enregistrés.';
if (nameChanges.length > 0) {
description = nameChanges.map((change, index) => `${index + 1}. ${change.newName} - <t:${change.changeDate}:F>`).join('\n');
if (nameChanges.length === 0) {
const embed = new EmbedBuilder()
.setTitle('Pseudos précédents')
.setDescription('Vous n\'avez pas de pseudos précédents enregistrés.')
.setColor('#0099ff');
await message.reply({ embeds: [embed] });
return;
}
const embeds = [];
for (let i = 0; i < nameChanges.length; i += 10) {
const page = nameChanges.slice(i, i + 10).map((change, index) => `${index + 1}. ${change.newName} - <t:${change.changeDate}:F>`).join('\n');
const embed = new EmbedBuilder()
.setTitle('Pseudos précédents')
.setDescription(page)
.setColor('#0099ff');
embeds.push(embed);
}
const backButton = new ButtonBuilder()
.setCustomId('previousbtn')
.setEmoji('⬅️')
.setStyle(ButtonStyle.Primary);
const nextButton = new ButtonBuilder()
.setCustomId('nextbtn')
.setEmoji('➡️')
.setStyle(ButtonStyle.Primary);
const deleteButton = new ButtonBuilder()
.setCustomId(`deleteprevnames_${message.author.id}`)
.setEmoji('🗑️')
.setStyle(ButtonStyle.Secondary);
const row = new ActionRowBuilder()
.addComponents(backButton, nextButton, deleteButton);
const sentMessage = await message.reply({ embeds: [embeds[0]], components: [row] });
const filter = i => i.user.id === message.author.id;
const collector = sentMessage.createMessageComponentCollector({ filter, time: 30000 });
collector.on('collect', async i => {
if (!i.message.paginationState) {
i.message.paginationState = { currentPage: 0 };
}
if (i.customId === 'previousbtn') {
i.message.paginationState.currentPage--;
} else if (i.customId === 'nextbtn') {
i.message.paginationState.currentPage++;
}
if (i.message.paginationState.currentPage < 0) {
i.message.paginationState.currentPage = 0;
} else if (i.message.paginationState.currentPage >= embeds.length) {
i.message.paginationState.currentPage = embeds.length - 1;
}
const newEmbed = embeds[i.message.paginationState.currentPage];
const backButton = new ButtonBuilder()
.setCustomId('previousbtn')
.setEmoji('⬅️')
.setStyle(ButtonStyle.Primary);
const nextButton = new ButtonBuilder()
.setCustomId('nextbtn')
.setEmoji('➡️')
.setStyle(ButtonStyle.Primary);
const deleteButton = new ButtonBuilder()
.setCustomId(`deleteprevnames_${message.author.id}`)
.setEmoji('🗑️')
.setStyle(ButtonStyle.Primary);
const row = new ActionRowBuilder()
.addComponents(backButton, nextButton, deleteButton);
await i.update({ embeds: [newEmbed], components: [row] });
});
collector.on('end', collected => {
const disabledRow = new ActionRowBuilder()
.addComponents(backButton.setDisabled(true), nextButton.setDisabled(true), deleteButton);
sentMessage.edit({ components: [disabledRow] });
});
}
const embed = new EmbedBuilder()
.setTitle('Pseudos précédents')
.setDescription(description)
.setColor('#0099ff');
const deleteButton = new ButtonBuilder()
.setCustomId(`deleteprevnames_${message.author.id}`)
.setEmoji('🗑️')
.setStyle(ButtonStyle.Secondary);
const row = new ActionRowBuilder()
.addComponents(deleteButton);
await message.reply({ embeds: [embed], components: [row] });
},
};
+1 -1
View File
@@ -3,7 +3,7 @@ const Discord = require('discord.js');
module.exports = {
name: 'wiki',
description: 'Recherche un mot clé sur Wikipedia et affiche le résumé dans un embed.',
utilisation: '+wiki <mot clé>',
utilisation: 'wiki <mot clé>',
category: 'info',
async execute(message, args, client) {