mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-16 08:12:36 +02:00
best configuration for embed , blrank and alias et ajout du system des blword ( badword)
This commit is contained in:
@@ -28,6 +28,11 @@ module.exports = {
|
|||||||
if (!command) {
|
if (!command) {
|
||||||
return message.reply(`La commande ${commandName} n'existe pas.`);
|
return message.reply(`La commande ${commandName} n'existe pas.`);
|
||||||
}
|
}
|
||||||
|
const aliasCheck = isAliasUnique(client, newAlias);
|
||||||
|
if (!aliasCheck.isUnique) {
|
||||||
|
return message.reply(`Cet alias est déjà utilisé par la commande \`${aliasCheck.conflictCommand}\`.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let data = await new Promise((resolve, reject) => {
|
let data = await new Promise((resolve, reject) => {
|
||||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||||
@@ -45,7 +50,7 @@ module.exports = {
|
|||||||
|
|
||||||
for (const cmd in data.alias) {
|
for (const cmd in data.alias) {
|
||||||
if (data.alias[cmd][newAlias]) {
|
if (data.alias[cmd][newAlias]) {
|
||||||
return message.reply('Cet alias est déjà utilisé pour une autre commande.');
|
return message.reply(`Cet alias est déjà utilisé par la commande \`${cmd}\`.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,3 +124,14 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
function isAliasUnique(client, newAlias) {
|
||||||
|
for (const command of client.commands.values()) {
|
||||||
|
if (command.name === newAlias) {
|
||||||
|
return { isUnique: false, conflictCommand: command.name };
|
||||||
|
}
|
||||||
|
if (command.aliases && command.aliases.includes(newAlias)) {
|
||||||
|
return { isUnique: false, conflictCommand: command.name };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { isUnique: true };
|
||||||
|
}
|
||||||
+10
-10
@@ -1,6 +1,6 @@
|
|||||||
const { EmbedBuilder } = require('discord.js');
|
const { EmbedBuilder } = require('discord.js');
|
||||||
const sqlite3 = require('sqlite3').verbose();
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'blrank',
|
name: 'blrank',
|
||||||
description: 'Affiché ou gérés la blrankn',
|
description: 'Affiché ou gérés la blrankn',
|
||||||
@@ -9,11 +9,10 @@ module.exports = {
|
|||||||
category: 'gestion',
|
category: 'gestion',
|
||||||
|
|
||||||
async execute(message, args, client) {
|
async execute(message, args, client) {
|
||||||
const db = new sqlite3.Database('myDatabase.db');
|
|
||||||
const botId = message.client.user.id;
|
const botId = message.client.user.id;
|
||||||
const guildId = message.guild.id;
|
const guildId = message.guild.id;
|
||||||
|
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
|
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
|
||||||
let data = await new Promise((resolve, reject) => {
|
let data = await new Promise((resolve, reject) => {
|
||||||
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||||
@@ -25,12 +24,13 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!data.blrank) {
|
// Initialiser la structure de données si elle n'existe pas
|
||||||
data.blrank = {};
|
if (!data[guildId]) {
|
||||||
|
data[guildId] = { blrank: {} };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.blrank[userId]) {
|
if (data[guildId].blrank[userId]) {
|
||||||
delete data.blrank[userId];
|
delete data[guildId].blrank[userId];
|
||||||
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err.message);
|
console.error(err.message);
|
||||||
@@ -38,7 +38,7 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
message.reply('Utilisateur retiré de la blrank.');
|
message.reply('Utilisateur retiré de la blrank.');
|
||||||
} else {
|
} else {
|
||||||
data.blrank[userId] = true;
|
data[guildId].blrank[userId] = true;
|
||||||
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err.message);
|
console.error(err.message);
|
||||||
@@ -57,13 +57,13 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const blrank = data.blrank || {};
|
// Récupérer la liste spécifique au serveur
|
||||||
|
const blrank = data[guildId] && data[guildId].blrank ? data[guildId].blrank : {};
|
||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
.setTitle('Blrank')
|
.setTitle('Blrank')
|
||||||
.setDescription(Object.keys(blrank).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche')
|
.setDescription(Object.keys(blrank).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche')
|
||||||
.setFooter({ text: message.client.user.username, iconURL: client.user.displayAvatarURL({dynamic: true})});
|
.setFooter({ text: message.client.user.username, iconURL: client.user.displayAvatarURL({dynamic: true})});
|
||||||
|
|
||||||
|
|
||||||
message.channel.send({ embeds: [embed] });
|
message.channel.send({ embeds: [embed] });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const { PermissionsBitField } = require("discord.js");
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'clear',
|
name: 'clear',
|
||||||
aliases: ['purge', 'delete', 'suppr', 'efface', 'nettoie', 'vide', 'clean', 'effacer'],
|
aliases: ['purge'],
|
||||||
description: 'Clear des messages',
|
description: 'Clear des messages',
|
||||||
emote: '🗑️',
|
emote: '🗑️',
|
||||||
utilisation: 'clear <nombre de messages>',
|
utilisation: 'clear <nombre de messages>',
|
||||||
|
|||||||
+61
-19
@@ -2,7 +2,7 @@ const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, ButtonBuilder,
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'embed',
|
name: 'embed',
|
||||||
aliases: ['embedcreate', 'createembed'],
|
aliases: ['embedcreate'],
|
||||||
description: 'Crée un embed customisable',
|
description: 'Crée un embed customisable',
|
||||||
emote: '📝',
|
emote: '📝',
|
||||||
utilisation: 'embed',
|
utilisation: 'embed',
|
||||||
@@ -52,6 +52,8 @@ module.exports = {
|
|||||||
let msgg = collected.first()
|
let msgg = collected.first()
|
||||||
embed.setTitle(msgg.content)
|
embed.setTitle(msgg.content)
|
||||||
msg.edit({ embeds: [embed]})
|
msg.edit({ embeds: [embed]})
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if(i.values[0] == "embeddescription") {
|
if(i.values[0] == "embeddescription") {
|
||||||
@@ -60,25 +62,61 @@ module.exports = {
|
|||||||
let msgg = collected.first()
|
let msgg = collected.first()
|
||||||
embed.setDescription(msgg.content)
|
embed.setDescription(msgg.content)
|
||||||
msg.edit({ embeds: [embed]})
|
msg.edit({ embeds: [embed]})
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if(i.values[0] == "embedauthor") {
|
if(i.values[0] == "embedauthor") {
|
||||||
let question = await message.channel.send({ content: "Veuillez saisir l'auteur de l'embed" })
|
let question = await message.channel.send({ content: "Veuillez saisir l'auteur de l'embed" });
|
||||||
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 });
|
||||||
let msgg = collected.first()
|
let msgg = collected.first();
|
||||||
embed.setAuthor({name: msgg.content})
|
let authorName = msgg.content;
|
||||||
msg.edit({ embeds: [embed]})
|
|
||||||
})
|
let question2 = await message.channel.send({ content: "Veuillez fournir une URL d'image ou télécharger une image pour l'auteur." });
|
||||||
}
|
collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] });
|
||||||
if(i.values[0] == "embedfooter") {
|
let msgg2 = collected.first();
|
||||||
let question = await message.channel.send({ content: "Veuillez saisir le footer de l'embed" })
|
let content = msgg2.content;
|
||||||
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
let imageUrl = msgg2.attachments.first() ? msgg2.attachments.first().url : content;
|
||||||
let msgg = collected.first()
|
|
||||||
embed.setFooter({text: msgg.content})
|
const imageUrlRegex = /^https?:\/\/.*\/.*\.(png|gif|webp|jpeg|jpg|svg)\??.*$/gmi;
|
||||||
msg.edit({ embeds: [embed]})
|
if (imageUrlRegex.test(imageUrl)) {
|
||||||
})
|
embed.setAuthor({name: authorName, iconURL: imageUrl});
|
||||||
}
|
} else {
|
||||||
|
embed.setAuthor({name: authorName});
|
||||||
|
}
|
||||||
|
msg.edit({ embeds: [embed]});
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
|
question2.delete().catch(() => false);
|
||||||
|
msgg2.delete().catch(() => false);
|
||||||
|
}
|
||||||
|
if(i.values[0] == "embedfooter") {
|
||||||
|
let question = await message.channel.send({ content: "Veuillez saisir le texte du footer de l'embed" });
|
||||||
|
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 });
|
||||||
|
let msgg = collected.first();
|
||||||
|
let footerText = msgg.content;
|
||||||
|
|
||||||
|
let question2 = await message.channel.send({ content: "Veuillez fournir une URL d'image ou télécharger une image pour le footer." });
|
||||||
|
collected = await question2.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] });
|
||||||
|
let msgg2 = collected.first();
|
||||||
|
let content = msgg2.content;
|
||||||
|
let imageUrl = msgg2.attachments.first() ? msgg2.attachments.first().url : content;
|
||||||
|
|
||||||
|
|
||||||
|
const imageUrlRegex = /^https?:\/\/.*\/.*\.(png|gif|webp|jpeg|jpg|svg)\??.*$/gmi;
|
||||||
|
if (imageUrlRegex.test(imageUrl)) {
|
||||||
|
embed.setFooter({text: footerText, iconURL: imageUrl});
|
||||||
|
msg.edit({ embeds: [embed]});
|
||||||
|
} else {
|
||||||
|
embed.setFooter({text: footerText});
|
||||||
|
}
|
||||||
|
msg.edit({ embeds: [embed]});
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
|
question2.delete().catch(() => false);
|
||||||
|
msgg2.delete().catch(() => false);
|
||||||
|
}
|
||||||
if(i.values[0] == "embedthumbnail") {
|
if(i.values[0] == "embedthumbnail") {
|
||||||
var yx = await message.channel.send({ content: "Quel sera le **Thumnail** de l'embed ?" })
|
var yx = await message.channel.send({ content: "Quel sera le **Thumnail** de l'embed ?" })
|
||||||
let collected = await message.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] })
|
let collected = await message.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1, time: 60000, errors: ["time"] })
|
||||||
@@ -140,21 +178,25 @@ module.exports = {
|
|||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if(i.customId == "embedurl") {
|
if(i.values[0] === "embedurl") {
|
||||||
let question = await message.channel.send({ content: "Veuillez saisir l'URL de l'embed" })
|
let question = await message.channel.send({ content: "Veuillez saisir l'URL de l'embed" })
|
||||||
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
||||||
let msgg = collected.first()
|
let msgg = collected.first()
|
||||||
embed.setURL(msgg.content)
|
embed.setURL(msgg.content)
|
||||||
msg.edit({ embeds: [embed]})
|
msg.edit({ embeds: [embed]})
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if(i.customId == "embedcolor") {
|
if(i.values[0] === "embedcolor") {
|
||||||
let question = await message.channel.send({ content: "Veuillez saisir la couleur de l'embed" })
|
let question = await message.channel.send({ content: "Veuillez saisir la couleur de l'embed" })
|
||||||
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
|
||||||
let msgg = collected.first()
|
let msgg = collected.first()
|
||||||
embed.setColor(msgg.content)
|
embed.setColor(msgg.content)
|
||||||
msg.edit({ embeds: [embed]})
|
msg.edit({ embeds: [embed]})
|
||||||
|
question.delete().catch(() => false);
|
||||||
|
msgg.delete().catch(() => false);
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
const { EmbedBuilder } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'blword',
|
||||||
|
aliases: ['badword'],
|
||||||
|
description: 'Affiché ou gérés les blword',
|
||||||
|
emote: '🔧',
|
||||||
|
utilisation: 'blword <add/del/list> [mot]',
|
||||||
|
category: 'moderation',
|
||||||
|
async execute(message, args, client) {
|
||||||
|
const botId = message.client.user.id;
|
||||||
|
const guildId = message.guild.id;
|
||||||
|
const add = args[0] === "add";
|
||||||
|
const del = args[0] === "del";
|
||||||
|
const list = args[0] === "list";
|
||||||
|
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
data[guildId] = data[guildId] || {};
|
||||||
|
data[guildId].badwords = data[guildId].badwords || [];
|
||||||
|
|
||||||
|
if (add) {
|
||||||
|
const word = args[1];
|
||||||
|
if (!data[guildId].badwords.includes(word)) {
|
||||||
|
data[guildId].badwords.push(word);
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
message.reply('Une erreur est survenue lors de la mise à jour de la base de données.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
message.reply(`Le mot "${word}" a été ajouté à la liste des mots interdits.`);
|
||||||
|
} else {
|
||||||
|
message.reply(`Le mot "${word}" est déjà dans la liste des mots interdits.`);
|
||||||
|
}
|
||||||
|
} else if (del) {
|
||||||
|
const word = args[1];
|
||||||
|
const index = data[guildId].badwords.indexOf(word);
|
||||||
|
if (index !== -1) {
|
||||||
|
data[guildId].badwords.splice(index, 1);
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
message.reply('Une erreur est survenue lors de la mise à jour de la base de données.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
message.reply(`Le mot "${word}" a été retiré de la liste des mots interdits.`);
|
||||||
|
} else {
|
||||||
|
message.reply(`Le mot "${word}" n'est pas dans la liste des mots interdits.`);
|
||||||
|
}
|
||||||
|
} else if (list) {
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setTitle('Liste des mots interdits')
|
||||||
|
.setDescription(data[guildId].badwords.join('\n') || 'Aucun mot interdit n\'est défini.')
|
||||||
|
.setFooter({text: `Mots interdits | ${client.user.username}`})
|
||||||
|
.setColor('#0099ff');
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
} else {
|
||||||
|
message.reply('Commande invalide. Utilisez `badword add [mot]`, `badword del [mot]` ou `badword list`.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, ChannelType } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const { Events } = require("discord.js");
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
const { getPermissionLevel } = require('../../fonction/getPermissionLevel');
|
||||||
|
module.exports = {
|
||||||
|
name: Events.MessageCreate,
|
||||||
|
async execute(message, client) {
|
||||||
|
const botId = message.client.user.id;
|
||||||
|
const guildId = message.guild.id;
|
||||||
|
const user = message.member;
|
||||||
|
if (message.channel.type === ChannelType.DM) return;
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (!data[guildId]) {
|
||||||
|
data[guildId] = { badwords: [] };
|
||||||
|
}
|
||||||
|
const badwords = data[guildId].badwords || [];
|
||||||
|
const containsBadword = badwords.some(word => message.content.toLowerCase().includes(word.toLowerCase()));
|
||||||
|
|
||||||
|
if (containsBadword) {
|
||||||
|
if (message.author.id === client.user.id || await getPermissionLevel(user, client) >= 10) return;
|
||||||
|
try {
|
||||||
|
await message.delete({ reason: 'Contient un mot interdit' });
|
||||||
|
} catch (error) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -19,9 +19,9 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
let blrank = data.blrank || {};
|
let blrank = data[guildId] && data[guildId].blrank ? data[guildId].blrank : {};
|
||||||
|
|
||||||
if (blrank[guildId] && blrank[guildId][newMember.id]) {
|
if (blrank[newMember.id]) {
|
||||||
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
|
const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id));
|
||||||
addedRoles.forEach(async role => {
|
addedRoles.forEach(async role => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user