diff --git a/commands/antiraid/antieveryone.js b/commands/antiraid/antieveryone.js new file mode 100644 index 0000000..dcbb83f --- /dev/null +++ b/commands/antiraid/antieveryone.js @@ -0,0 +1,45 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'antieveryone', + description: 'Active ou désactive la protection contre les mentions de tout le monde dans le serveur.', + utilisation: '+antieveryone on/off', + category: 'antiraid', + + async execute(message, args, client) { + const botId = client.user.id; + const guildId = message.guild.id; + const status = args[0]; + + if (!status || (status !== 'on' && status !== 'off'&& status !== 'max')) { + return message.reply('Veuillez utiliser la commande correctement: `+antieveryone on/off`.'); + } + + 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] = {}; + } + + data[guildId].antieveryone = { + status: status + }; + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(data)], function(err) { + if (err) { + console.error(err.message); + return message.reply('Une erreur est survenue lors de la mise à jour de la configuration.'); + } + message.reply(`La protection contre les mentions de tout le monde a été ${status === 'on' ? 'activée' : status === 'max' ? 'maximisée' : 'désactivée'}.`); + }); + }, +}; \ No newline at end of file diff --git a/commands/antiraid/antilink.js b/commands/antiraid/antilink.js index d56358e..38121ff 100644 --- a/commands/antiraid/antilink.js +++ b/commands/antiraid/antilink.js @@ -5,7 +5,7 @@ module.exports = { name: 'antilink', description: 'Active ou désactive la protection contre les liens dans le serveur.', utilisation: '+antilink on/off all/invite', - category: 'moderation', + category: 'antiraid', async execute(message, args, client) { const botId = client.user.id; diff --git a/commands/utils/wiki.js b/commands/utils/wiki.js index 363dd77..313fef7 100644 --- a/commands/utils/wiki.js +++ b/commands/utils/wiki.js @@ -1,28 +1,38 @@ +const axios = require('axios'); const Discord = require('discord.js'); -const wiki = require('wikipedia'); - - module.exports = { - name: "wiki", - aliases: ["wikipedia"], - description: "Permet de faire une recherche wikipédia depuis votre serveur ", - category: "utils" , - emote:"🌍", - utilisation: "wiki ", + name: 'wiki', + description: 'Recherche un mot clé sur Wikipedia et affiche le résumé dans un embed.', + utilisation: '+wiki ', + category: 'info', + async execute(message, args, client) { - let query = args.join(" "); - if(!query) return; - + if (!args.length) { + return message.channel.send(`Veuillez fournir un mot clé pour la recherche.`); + } + + const query = encodeURIComponent(args.join(' ')); + const url = `https://fr.wikipedia.org/w/api.php?action=query&format=json&origin=*&prop=extracts&exintro=&explaintext=&titles=${query}`; + try { - const searchResults = await wiki.summary(query.toLocaleLowerCase()); + const response = await axios.get(url); + const data = response.data; + const pages = data.query.pages; + const pageId = Object.keys(pages)[0]; + const extract = pages[pageId].extract; + + // Utiliser le premier résultat sans filtrer par le nombre de mots + const firstResult = pages[pageId]; const embed = new Discord.EmbedBuilder() - .setColor('#00FFFF') - .setTitle(`${searchResults.title}`) - .setDescription(`${searchResults.extract}`); - message.reply({ embeds: [embed] }); + .setColor('#0099ff') + .setTitle(firstResult.title) + .setURL(`https://fr.wikipedia.org/wiki/${encodeURIComponent(firstResult.title)}`) + .setDescription(extract.substring(0, 200) + '...') + .addFields({ name: 'Lien', value: '[Lire plus](https://fr.wikipedia.org/wiki/${encodeURIComponent(firstResult.title)})', inline: true }); + + message.channel.send({ embeds: [embed] }); } catch (error) { - console.error(error); - message.reply('Je n\'ai pas pu trouver cette page sur Wikipedia. Veuillez vérifier le mot-clé et réessayer.'); + message.channel.send('Une erreur est survenue lors de la recherche.'); } }, }; \ No newline at end of file diff --git a/events/antiraid.js/messageCreate.js b/events/antiraid.js/messageCreate.js new file mode 100644 index 0000000..292c65e --- /dev/null +++ b/events/antiraid.js/messageCreate.js @@ -0,0 +1,46 @@ + +const sqlite3 = require('sqlite3').verbose(); +const { Events, ChannelType } = 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; + if (message.channel.type === ChannelType.DM) return; + if (!message.content.includes('@everyone')) 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) : {}); + }); + }); + const antieveryoneConfig = data[guildId]?.antieveryone; + let status = 'off'; + + if (antieveryoneConfig) { + ({ status} = antieveryoneConfig); + } + if (status === "off") return; + data.whitelist = data.whitelist || {}; + data.whitelist[guildId] = data.whitelist[guildId] || {}; + const whitelist = data.whitelist[guildId]; + const user = message.member; + if (status === "on") { + if (await getPermissionLevel(user, client) >= 10) return; + if (whitelist[message.author.id]) return; + message.delete().catch(err => {; + }); + } else if (status === "max") { + const levelperm = await getPermissionLevel(user, client); + if (levelperm >= 10) return; + message.delete().catch(err => {; + }); + } + + }, +}; \ No newline at end of file diff --git a/permissions.json b/permissions.json index 9ffa0bd..5d134e8 100644 --- a/permissions.json +++ b/permissions.json @@ -167,5 +167,12 @@ "statserveur": 3, "prevname": 3, "servericon": 3, - "weather": 3 + "weather": 3, + "antieveryone": 3, + "antilink": 3, + "changeall": 3, + "setconfession": 3, + "presetlog": 3, + "blword": 3, + "wiki": 3 } \ No newline at end of file