diff --git a/backups.db b/backups.db new file mode 100644 index 0000000..db4dc0f Binary files /dev/null and b/backups.db differ diff --git a/commands/antiraid/antilink.js b/commands/antiraid/antilink.js new file mode 100644 index 0000000..d56358e --- /dev/null +++ b/commands/antiraid/antilink.js @@ -0,0 +1,47 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +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', + + async execute(message, args, client) { + const botId = client.user.id; + const guildId = message.guild.id; + const status = args[0]; + const type = args[1]; + + if (!status || !type || (status !== 'on' && status !== 'off'&& status !== 'max') || (type !== 'all' && type !== 'invite')) { + return message.reply('Veuillez utiliser la commande correctement: `+antilink on/off all/invite`.'); + } + + 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].antilink = { + status: status, + type: type + }; + + 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 liens a été ${status === 'on' ? 'activée' : status === 'max' ? 'maximisée' : 'désactivée'} pour les ${type === 'all' ? 'tous les liens' : type === 'invite' ? 'invitations' : 'aucun type spécifié'}.`); + }); + }, +}; \ No newline at end of file diff --git a/commands/backup/backup.js b/commands/backup/backup.js new file mode 100644 index 0000000..51876cf --- /dev/null +++ b/commands/backup/backup.js @@ -0,0 +1,138 @@ +const Discord = require('discord.js'); +const backup = require('discord-backup'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('./backups.db'); +async function createBackup(botId, guild) { + const backupData = await backup.create(guild, { + maxMessagesPerChannel: 0, + jsonBeautify: true + }); + + const createdAt = new Date().toISOString(); + db.run(`INSERT INTO backups(botId, backupId, createdAt) VALUES(?, ?, ?)`, [botId, backupData.id, createdAt], function(err) { + if (err) { + console.error(err.message); + } + }); + + return backupData.id; +} +function listBackups(botId, color) { + return new Promise((resolve, reject) => { + const db = new sqlite3.Database('./backups.db'); + db.all(`SELECT * FROM backups WHERE botId = ?`, [botId], (err, rows) => { + if (err) { + reject(err); + } else { + let backupList = 'Liste des sauvegardes:\n'; + rows.forEach((row) => { + backupList += `ID: ${row.backupId}, Créé le: ${row.createdAt}\n`; + }); + + const embed = new Discord.EmbedBuilder() + .setAuthor({name:'📰 Liste des backups'}) + .setDescription(`\`\`\`${backupList}\`\`\``) + .setColor(color); + + resolve(embed); + } + }); + db.close(); + }); +} +async function loadBackup(botId, backupId, guild) { + return new Promise((resolve, reject) => { + const db = new sqlite3.Database('./backups.db'); + db.get(`SELECT * FROM backups WHERE botId = ? AND backupId = ?`, [botId, backupId], async (err, row) => { + if (err) { + reject(err); + } + if (!row) { + console.log('Backup not found'); + reject(new Error('Backup not found')); + } + + try { + await backup.load(backupId, guild); + resolve(); + } catch (error) { + reject(error); + } + }); + }); +} + +function deleteBackup(botId, backupId) { + const db = new sqlite3.Database('./backups.db'); + db.run(`DELETE FROM backups WHERE botId = ? AND backupId = ?`, [botId, backupId], function(err) { + if (err) { + console.error(err.message); + } + }); + + backup.remove(backupId); +} + +module.exports = { + name: 'backup', + description: 'Crée, liste, charge ou supprime des backups du bot.', + emote: '💾', + utilisation: 'backup ', + category: 'gestion', + async execute(message, args, client) { + const botId = client.user.id; + const author = message.author; + const create = args[0] === "create"; + const list = args[0] === 'list'; + const load = args[0] === 'load'; + const del = args[0] === 'delete'; + + if (!args[0]) { + const helpEmbed = new Discord.EmbedBuilder() + .setTimestamp() + .setFooter({text: `Backup Gestion | ${client.user.username}`}) + .addFields( + { name: 'Backup:', value: '\`backup create\` ・ Permet de créer une backup du serveur actuel\n\`backup delete\` ・ Permet de supprimer une backup\n\`backup list\` ・ Permet d\'afficher la liste de toutes les backup\n\`backup load\` ・ Permet de charger une backup sur un serveur' } + ); + message.channel.send({ embeds: [helpEmbed] }); + } else if (create) { + const messageCreate = await message.channel.send("\`🔃\`La backup est entrain de ce crée ......"); + const backupId = await createBackup(botId, message.guild); + messageCreate.edit(`\`✅\`Backup correctement créé, faites \`backup load ${backupId}\` pour charger la backup`); + } else if (list) { + const color = '#00FFFF'; + listBackups(botId, color) + .then(backupListEmbed => { + message.channel.send({ embeds: [backupListEmbed] }); + }) + .catch(err => { + console.error(err); + message.channel.send('Une erreur est survenue lors de la récupération de la liste des sauvegardes.'); + }); + } else if (load) { + const backupId = args[1]; + if (!backupId) { + return message.channel.send(`Vous devez spécifier une ID de backup valide !`); + } + await loadBackup(botId, backupId, message.guild).then(() => { + const textChannel = message.guild.channels.cache.find(channel => channel.type === Discord.ChannelType.GuildText); + if (textChannel) { + textChannel.send(`@${message.author.username}, la backup a fini d'être chargée.`); + } else { + // Si aucun salon texte n'est trouvé, envoyer un message dans le salon actuel + author.send(`@${message.author.username}, la backup a fini d'être chargée, mais aucun salon texte n'a été trouvé pour envoyer le message.`); + } + }).catch((error) => { + console.error(`Failed to load backup: ${error}`); + message.channel.send(`Une erreur est survenue lors du chargement de la backup: ${error.message}`); + }); + } else if (del) { + const backupId = args[1]; + if (!backupId) { + return message.channel.send(`Veuillez spécifier l'ID de la backup que vous voulez supprimer`); + } + deleteBackup(botId, backupId); + message.channel.send(`La backup ${backupId} a été supprimée avec succès`); + } + } +}; \ No newline at end of file diff --git a/commands/gestion/suggest.js b/commands/gestion/suggest.js index b975743..1e25047 100644 --- a/commands/gestion/suggest.js +++ b/commands/gestion/suggest.js @@ -1,5 +1,5 @@ const sqlite3 = require('sqlite3').verbose(); - +const db = new sqlite3.Database('myDatabase.db'); module.exports = { name: 'suggest', description: 'configure le salon de suggestion', @@ -8,7 +8,6 @@ module.exports = { category: 'gestion', async execute(message, args, client) { - const db = new sqlite3.Database('myDatabase.db'); const botId = client.user.id; const guildId = message.guild.id; diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js index b828204..92cf243 100644 --- a/commands/moderation/ban.js +++ b/commands/moderation/ban.js @@ -1,5 +1,5 @@ const { EmbedBuilder, User } = require("discord.js") -const { getPermissionLevel } = require('../fonction'); +const { getPermissionLevel } = require('../../fonction/getPermissionLevel'); module.exports = { name: 'ban', diff --git a/commands/moderation/derank.js b/commands/moderation/derank.js index 953cd4a..af85519 100644 --- a/commands/moderation/derank.js +++ b/commands/moderation/derank.js @@ -1,5 +1,5 @@ const { EmbedBuilder, User } = require("discord.js") -const { getPermissionLevel } = require('../fonction'); +const { getPermissionLevel } = require('../../fonction/getPermissionLevel'); module.exports = { name: 'derank', diff --git a/commands/moderation/kick.js b/commands/moderation/kick.js index 3d422b4..49bc4a3 100644 --- a/commands/moderation/kick.js +++ b/commands/moderation/kick.js @@ -1,5 +1,5 @@ const { EmbedBuilder, User } = require("discord.js") -const { getPermissionLevel } = require('../fonction'); +const { getPermissionLevel } = require('../../fonction/getPermissionLevel'); module.exports = { name: 'kick', diff --git a/commands/owner/clearwl.js b/commands/owner/clearwl.js index 5137f36..8c09f15 100644 --- a/commands/owner/clearwl.js +++ b/commands/owner/clearwl.js @@ -12,14 +12,45 @@ module.exports = { async execute(message, args, client) { const botId = message.client.user.id; const guildId = message.guild.id; - db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify({ whitelist: {} })], (err) => { + + let data = await getWhitelistData(db, botId, guildId); + + if (data.whitelist[guildId]) { + delete data.whitelist[guildId]; + await updateWhitelist(db, botId, data); + message.reply("Toutes la whitelist a été supprimée pour cette guilde."); + } else { + message.reply("Il n'y avait pas de liste blanche à supprimer pour cette guilde."); + } + }, +}; + +async function getWhitelistData(db, botId, guildId) { + return new Promise((resolve, reject) => { + db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { console.error(err.message); reject(err); } else { - resolve({ message: 'La liste blanche a été effacée.' }); + const data = row ? JSON.parse(row.value) : {}; + data.whitelist = data.whitelist || {}; + data.whitelist[guildId] = data.whitelist[guildId] || {}; + resolve(data); } }); - message.reply("Toutes la whitelist a etait supprimer") - }, -}; \ No newline at end of file + }); +} + +async function updateWhitelist(db, botId, data) { + return new Promise((resolve, reject) => { + const updatedData = JSON.stringify(data); + db.run('UPDATE gestion SET value = ? WHERE id = ?', [updatedData, botId], (err) => { + if (err) { + console.error(err.message); + reject(err); + } else { + resolve(); + } + }); + }); +} \ No newline at end of file diff --git a/commands/owner/unwl.js b/commands/owner/unwl.js index 4cf652d..a86be30 100644 --- a/commands/owner/unwl.js +++ b/commands/owner/unwl.js @@ -11,16 +11,17 @@ module.exports = { async execute(message, args) { const botId = message.client.user.id; + const guildId = message.guild.id; const user = message.mentions.users.first() || (args[0] && message.client.users.cache.get(args[0])); if (!user) { return message.channel.send('Veuillez mentionner un utilisateur à retirer de la liste blanche.'); } - let data = await getWhitelistData(db, botId); + let data = await getWhitelistData(db, botId, guildId); - if (data.whitelist[user.id]) { - delete data.whitelist[user.id]; + if (data.whitelist[guildId] && data.whitelist[guildId][user.id]) { + delete data.whitelist[guildId][user.id]; await updateWhitelist(db, botId, data); message.channel.send('Utilisateur retiré de la liste blanche.'); } else { @@ -29,7 +30,7 @@ module.exports = { }, }; -async function getWhitelistData(db, botId) { +async function getWhitelistData(db, botId, guildId) { return new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { @@ -37,7 +38,8 @@ async function getWhitelistData(db, botId) { reject(err); } else { const data = row ? JSON.parse(row.value) : {}; - data.whitelist = data.whitelist || {}; + data.whitelist = data.whitelist || {}; + data.whitelist[guildId] = data.whitelist[guildId] || {}; resolve(data); } }); diff --git a/commands/owner/wl.js b/commands/owner/wl.js index 0c2ef86..2f6ff3f 100644 --- a/commands/owner/wl.js +++ b/commands/owner/wl.js @@ -12,31 +12,34 @@ module.exports = { async execute(message, args, client) { const db = new sqlite3.Database('myDatabase.db'); const botId = message.client.user.id; + const guildId = message.guild.id; const user = message.mentions.users.first() || (args[0] && message.client.users.cache.get(args[0])); + if (user) { - let data = await getWhitelistData(db, botId); - if (!data.whitelist[user.id]) { - data.whitelist[user.id] = true; // Ajoute l'utilisateur à la liste blanche + let data = await getWhitelistData(db, botId, guildId); + if (!data.whitelist[guildId][user.id]) { + data.whitelist[guildId][user.id] = true; await updateWhitelist(db, botId, data); message.reply('Utilisateur ajouté à la liste blanche.'); } else { message.reply('Cet utilisateur est déjà sur la liste blanche.'); } } else { - let data = await getWhitelistData(db, botId); - const whitelist = data.whitelist || {}; + let data = await getWhitelistData(db, botId, guildId); + const whitelist = data.whitelist[guildId] || {}; const embed = new EmbedBuilder() .setTitle('Liste blanche') .setDescription(Object.keys(whitelist).map(id => `<@${id}>`).join('\n') || 'Aucun utilisateur sur la liste blanche') .setFooter({ text: 'design by valou336', iconURL: client.user.displayAvatarURL({dynamic: true})}); + message.channel.send({ embeds: [embed] }); } }, }; -async function getWhitelistData(db, botId) { +async function getWhitelistData(db, botId, guildId) { return new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { @@ -44,7 +47,8 @@ async function getWhitelistData(db, botId) { reject(err); } else { const data = row ? JSON.parse(row.value) : {}; - data.whitelist = data.whitelist || {}; + data.whitelist = data.whitelist || {}; + data.whitelist[guildId] = data.whitelist[guildId] || {}; resolve(data); } }); diff --git a/commands/utils/wiki.js b/commands/utils/wiki.js new file mode 100644 index 0000000..472fb4b --- /dev/null +++ b/commands/utils/wiki.js @@ -0,0 +1,28 @@ +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: "utilitaire" , + emote:"🌍", + utilisation: "wiki ", + async execute(message, args, client) { + let query = args.join(" "); + if(!query) return; + + try { + const searchResults = await wiki.summary(query.toLocaleLowerCase()); + const embed = new Discord.EmbedBuilder() + .setColor('#00FFFF') + .setTitle(`${searchResults.title}`) + .setDescription(`${searchResults.extract}`); + message.reply({ 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.'); + } + }, +}; \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index 4b0834f..a4bd90f 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -11,6 +11,13 @@ module.exports = { } console.log('Connected to the SQLite database.'); }); + const backupdb = new sqlite3.Database('backups.db', (err) => { + if (err) { + console.error(err.message); + } + console.log('Connected to the backups database.'); + }); + await new Promise((resolve, reject) => { @@ -32,6 +39,20 @@ module.exports = { console.log('Table prevname created or already exists.'); } }); + backupdb.run(`CREATE TABLE IF NOT EXISTS backups ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + botId TEXT NOT NULL, + backupId TEXT NOT NULL, + createdAt TEXT NOT NULL + )`, (err) => { + if (err) { + console.error(err.message); + reject(err); + } else { + console.log('Table backups created or already exists.'); + } + }); + db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { if (err) { diff --git a/events/gestion/messageCreate.js b/events/gestion/messageCreate.js index 7c03146..6a8d5bd 100644 --- a/events/gestion/messageCreate.js +++ b/events/gestion/messageCreate.js @@ -1,14 +1,14 @@ -const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js'); +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) { + async execute(message, client) { const botId = message.client.user.id; const guildId = message.guild.id; - + 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) { @@ -21,8 +21,14 @@ module.exports = { const suggestChannelId = data.suggestChannel && data.suggestChannel[guildId]; data.piconly = data.piconly || {}; data.piconly[guildId] = data.piconly[guildId] || {}; - const channelID = data.piconly[guildId]; - + const channelIDpiconly = data.piconly[guildId]; + const antilinkConfig = data[guildId]?.antilink; + let status = 'off'; + let type = 'invite'; + + if (antilinkConfig) { + ({ status, type } = antilinkConfig); + } if (message.channel.id === suggestChannelId && !message.author.bot) { await message.delete(); @@ -43,11 +49,41 @@ module.exports = { const suggestionMessage = await message.channel.send({ embeds: [embed], components: [row] }); suggestionMessage.react('👎') suggestionMessage.react('👍') - } else if (message.channel.id === channelID) { + } else if (message.channel.id === channelIDpiconly) { if (message.attachments.size === 0) { message.delete() } - } + } else if (status === 'on') { + data.whitelist = data.whitelist || {}; + data.whitelist[guildId] = data.whitelist[guildId] || {}; + const whitelist = data.whitelist[guildId]; + const user = message.member; + if (await getPermissionLevel(user, client) >= 10) return; + if (whitelist[message.author.id]) return; + const messageContent = message.content; + if (type === 'all' && messageContent.includes('https://')) { + message.delete().catch(err => {; + }); + } + if (type === 'invite' && (messageContent.includes('discord.com') || messageContent.includes('discord.gg'))) { + message.delete().catch(err => { + }); + } + } else if (status === 'max') { + if (message.channel.type === ChannelType.DM) return; + const user = message.member; + if (await getPermissionLevel(user, client) >= 10) return; + + const messageContent = message.content; + if (type === 'all' && messageContent.includes('https://')) { + message.delete().catch(err => {; + }); + } + if (type === 'invite' && (messageContent.includes('discord.com') || messageContent.includes('discord.gg'))) { + message.delete().catch(err => { + }); + } + } }, }; \ No newline at end of file diff --git a/commands/fonction.js b/fonction/getPermissionLevel.js similarity index 99% rename from commands/fonction.js rename to fonction/getPermissionLevel.js index 9b76232..ef72d19 100644 --- a/commands/fonction.js +++ b/fonction/getPermissionLevel.js @@ -1,6 +1,5 @@ const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('myDatabase.db'); - async function getPermissionLevel(member, client) { const botId = client.user.id; const guildId = member.guild.id; diff --git a/package-lock.json b/package-lock.json index 2ece768..1f538af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@m3rcena/weky": "^4.3.1", "axios": "^1.6.7", "better-sqlite3": "^9.4.3", "color-name-list": "^10.19.0", + "discord-backup": "^3.3.2", "discord-gamecord": "^4.4.1", "discord-giveaway": "^1.1.5", "discord-giveaways": "^6.0.1", @@ -27,7 +27,8 @@ "quick.db": "^9.1.7", "sqlite3": "^5.1.7", "to-zalgo": "^1.0.1", - "weather": "^1.0.4" + "weather": "^1.0.4", + "wikipedia": "^2.1.2" } }, "node_modules/@babel/runtime": { @@ -167,82 +168,6 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "optional": true }, - "node_modules/@m3rcena/weky": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@m3rcena/weky/-/weky-4.3.1.tgz", - "integrity": "sha512-rSQMH0YROX+i2k3SajXzcjts005Hi4FUNKkmg+DCiL3HsbEI1PvxZnruTaFwCPuR7dAgRk2+eb8MgSRJYlUotg==", - "dependencies": { - "chalk": "^5.3.0", - "html-entities": "^2.4.0", - "mathjs": "^12.2.1", - "node-fetch": "^3.3.2", - "quick.db": "^9.1.7", - "string-width": "^7.0.0" - } - }, - "node_modules/@m3rcena/weky/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@m3rcena/weky/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" - }, - "node_modules/@m3rcena/weky/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/@m3rcena/weky/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@m3rcena/weky/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@npmcli/fs": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", @@ -614,23 +539,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" + } + }, "node_modules/centra": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/centra/-/centra-2.6.0.tgz", "integrity": "sha512-dgh+YleemrT8u85QL11Z6tYhegAs3MMxsaWAq/oXeAmYJ7VxL3SI9TZtnfaEvNDMAPolj25FXIb3S+HCI4wQaQ==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." }, - "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/charenc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", @@ -718,18 +640,6 @@ "node": ">= 0.8" } }, - "node_modules/complex.js": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz", - "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -793,14 +703,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -824,11 +726,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "optional": true }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -926,6 +823,14 @@ "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" }, + "node_modules/discord-backup": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/discord-backup/-/discord-backup-3.3.2.tgz", + "integrity": "sha512-C2CBplvnVG3XUG2byf2dBF4PX9J9aaEcMpJzjI+c53+9Lr9WNW0lQe6Fxzf/LMxApFe1oCbwtaqE5ioMuoN6Eg==", + "dependencies": { + "discord.js": "^14.2.0" + } + }, "node_modules/discord-gamecord": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/discord-gamecord/-/discord-gamecord-4.4.1.tgz", @@ -1225,11 +1130,6 @@ "node": ">= 0.4" } }, - "node_modules/escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -1259,28 +1159,6 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, "node_modules/figlet": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", @@ -1329,29 +1207,6 @@ "node": ">= 6" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fraction.js": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz", - "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1401,17 +1256,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -1667,6 +1511,18 @@ "wrappy": "1" } }, + "node_modules/infobox-parser": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/infobox-parser/-/infobox-parser-3.6.4.tgz", + "integrity": "sha512-d2lTlxKZX7WsYxk9/UPt51nkmZv5tbC75SSw4hfHqZ3LpRAn6ug0oru9xI2X+S78va3aUAze3xl/UqMuwLmJUw==", + "dependencies": { + "camelcase": "^4.1.0" + }, + "funding": { + "type": "individual", + "url": "https://www.buymeacoffee.com/2tmRKi9" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1736,11 +1592,6 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "optional": true }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" - }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", @@ -1832,28 +1683,6 @@ "remove-accents": "0.5.0" } }, - "node_modules/mathjs": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.0.tgz", - "integrity": "sha512-4Moy0RNjwMSajEkGGxNUyMMC/CZAcl87WBopvNsJWB4E4EFebpTedr+0/rhqmnOSTH3Wu/3WfiWiw6mqiaHxVw==", - "dependencies": { - "@babel/runtime": "^7.23.9", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.3", - "escape-latex": "^1.2.0", - "fraction.js": "4.3.4", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.1" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -2253,24 +2082,6 @@ "node": "^16 || ^18 || >= 20" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -2685,11 +2496,6 @@ "node": ">=6" } }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -2991,11 +2797,6 @@ "node": ">=8" } }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, "node_modules/to-zalgo": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-zalgo/-/to-zalgo-1.0.1.tgz", @@ -3035,14 +2836,6 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, - "node_modules/typed-function": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz", - "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==", - "engines": { - "node": ">= 14" - } - }, "node_modules/undici": { "version": "5.27.2", "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", @@ -3098,14 +2891,6 @@ "phin": "^3.4.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "engines": { - "node": ">= 8" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -3144,6 +2929,18 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, + "node_modules/wikipedia": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/wikipedia/-/wikipedia-2.1.2.tgz", + "integrity": "sha512-RAYaMpXC9/E873RaSEtlEa8dXK4e0p5k98GKOd210MtkE5emm6fcnwD+N6ZA4cuffjDWagvhaQKtp/mGp2BOVQ==", + "dependencies": { + "axios": "^1.4.0", + "infobox-parser": "^3.6.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 7db7f29..02cd42a 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,10 @@ }, "homepage": "https://github.com/Tutur33/gestion#readme", "dependencies": { - "@m3rcena/weky": "^4.3.1", "axios": "^1.6.7", "better-sqlite3": "^9.4.3", "color-name-list": "^10.19.0", + "discord-backup": "^3.3.2", "discord-gamecord": "^4.4.1", "discord-giveaway": "^1.1.5", "discord-giveaways": "^6.0.1", @@ -35,6 +35,7 @@ "quick.db": "^9.1.7", "sqlite3": "^5.1.7", "to-zalgo": "^1.0.1", - "weather": "^1.0.4" + "weather": "^1.0.4", + "wikipedia": "^2.1.2" } } diff --git a/yourDatabase.db b/yourDatabase.db new file mode 100644 index 0000000..e69de29