best configuration for embed , blrank and alias et ajout du system des blword ( badword)

This commit is contained in:
VALOU3336
2024-03-03 19:18:19 +01:00
parent b3fd7d79a8
commit 52da255455
7 changed files with 202 additions and 34 deletions
+18 -2
View File
@@ -28,6 +28,11 @@ module.exports = {
if (!command) {
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) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
@@ -45,7 +50,7 @@ module.exports = {
for (const cmd in data.alias) {
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}\`.`);
}
}
@@ -118,4 +123,15 @@ module.exports = {
return message.reply('Sous-commande invalide. Veuillez utiliser add, remove, ou list.');
}
},
};
};
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
View File
@@ -1,6 +1,6 @@
const { EmbedBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('myDatabase.db');
module.exports = {
name: 'blrank',
description: 'Affiché ou gérés la blrankn',
@@ -9,11 +9,10 @@ module.exports = {
category: 'gestion',
async execute(message, args, client) {
const db = new sqlite3.Database('myDatabase.db');
const botId = message.client.user.id;
const guildId = message.guild.id;
if (args.length > 0) {
if (args.length > 0) {
const userId = args[0].replace(/<@!?(\d+)>/, '$1');
let data = await new Promise((resolve, reject) => {
db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => {
@@ -25,12 +24,13 @@ module.exports = {
});
});
if (!data.blrank) {
data.blrank = {};
// Initialiser la structure de données si elle n'existe pas
if (!data[guildId]) {
data[guildId] = { blrank: {} };
}
if (data.blrank[userId]) {
delete data.blrank[userId];
if (data[guildId].blrank[userId]) {
delete data[guildId].blrank[userId];
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], (err) => {
if (err) {
console.error(err.message);
@@ -38,7 +38,7 @@ module.exports = {
});
message.reply('Utilisateur retiré de la blrank.');
} 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) => {
if (err) {
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()
.setTitle('Blrank')
.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})});
message.channel.send({ embeds: [embed] });
}
},
+1 -1
View File
@@ -2,7 +2,7 @@ const { PermissionsBitField } = require("discord.js");
module.exports = {
name: 'clear',
aliases: ['purge', 'delete', 'suppr', 'efface', 'nettoie', 'vide', 'clean', 'effacer'],
aliases: ['purge'],
description: 'Clear des messages',
emote: '🗑️',
utilisation: 'clear <nombre de messages>',
+61 -19
View File
@@ -2,7 +2,7 @@ const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, ButtonBuilder,
module.exports = {
name: 'embed',
aliases: ['embedcreate', 'createembed'],
aliases: ['embedcreate'],
description: 'Crée un embed customisable',
emote: '📝',
utilisation: 'embed',
@@ -52,6 +52,8 @@ module.exports = {
let msgg = collected.first()
embed.setTitle(msgg.content)
msg.edit({ embeds: [embed]})
question.delete().catch(() => false);
msgg.delete().catch(() => false);
})
}
if(i.values[0] == "embeddescription") {
@@ -60,25 +62,61 @@ module.exports = {
let msgg = collected.first()
embed.setDescription(msgg.content)
msg.edit({ embeds: [embed]})
question.delete().catch(() => false);
msgg.delete().catch(() => false);
})
}
if(i.values[0] == "embedauthor") {
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 msgg = collected.first()
embed.setAuthor({name: msgg.content})
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embedfooter") {
let question = await message.channel.send({ content: "Veuillez saisir le footer de l'embed" })
let collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setFooter({text: msgg.content})
msg.edit({ embeds: [embed]})
})
}
if(i.values[0] == "embedauthor") {
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 });
let msgg = collected.first();
let authorName = msgg.content;
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"] });
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.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") {
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"] })
@@ -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 collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setURL(msgg.content)
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 collected = await question.channel.awaitMessages({ filter: m => m.author.id === message.author.id, max: 1 }).then(collected => {
let msgg = collected.first()
embed.setColor(msgg.content)
msg.edit({ embeds: [embed]})
question.delete().catch(() => false);
msgg.delete().catch(() => false);
})
}
+74
View File
@@ -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`.');
}
},
};
+36
View File
@@ -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) {
}
}
},
};
+2 -2
View File
@@ -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));
addedRoles.forEach(async role => {
try {