diff --git a/index.js b/index.js index af980d8ee707d84551f4bbe716f739daefdb46e6..ace8fada22cb21d9ba901da8170033866503e14f 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ const config = require('./config'); // Driver SQL const Sequelize = require('sequelize'); -const { Op } = require("sequelize"); +const {Op} = require("sequelize"); // API externe const express = require('express') const app = express() @@ -10,8 +10,8 @@ const XMLHttpRequest = require('xhr2'); // Couleurs de la console require('colors'); // API discord -const { REST } = require('@discordjs/rest'); -const { Routes } = require('discord-api-types/v9'); +const {REST} = require('@discordjs/rest'); +const {Routes} = require('discord-api-types/v9'); // Moment JS const moment = require('moment'); @@ -35,7 +35,7 @@ const sequelize = new Sequelize(config.get("BDD_NAME"), config.get("BDD_USER"), // Paramètres du bot const botSettings = sequelize.define('discord_settings', { - name: { type: Sequelize.STRING(128), primaryKey: true }, + name: {type: Sequelize.STRING(128), primaryKey: true}, value: Sequelize.STRING(512), }, { timestamps: false @@ -43,7 +43,7 @@ const botSettings = sequelize.define('discord_settings', { // Entrées et sorties des membres const entries = sequelize.define('discord_entries', { - id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true }, + id: {type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true}, memberId: Sequelize.BIGINT(255), isJoin: Sequelize.BOOLEAN, date: Sequelize.DATE, @@ -53,8 +53,8 @@ const entries = sequelize.define('discord_entries', { // Paramètres des membres const memberSettings = sequelize.define('discord_memberSettings', { - memberId: { type: Sequelize.BIGINT(255), primaryKey: true }, - name: { type: Sequelize.STRING(128), primaryKey: true }, + memberId: {type: Sequelize.BIGINT(255), primaryKey: true}, + name: {type: Sequelize.STRING(128), primaryKey: true}, value: Sequelize.STRING(512), }, { timestamps: false @@ -62,8 +62,8 @@ const memberSettings = sequelize.define('discord_memberSettings', { // Paramètres des joueurs MC const minecraftPlayerSetting = sequelize.define('site_userSetting', { - uuid: { type: Sequelize.STRING(36), primaryKey: true }, - name: { type: Sequelize.STRING(128), primaryKey: true }, + uuid: {type: Sequelize.STRING(36), primaryKey: true}, + name: {type: Sequelize.STRING(128), primaryKey: true}, value: Sequelize.TEXT, }, { timestamps: false, @@ -72,10 +72,10 @@ const minecraftPlayerSetting = sequelize.define('site_userSetting', { // Codes de liaison du serveur MC const mcLinkCode = sequelize.define('site_linkCode', { - uuid: { type: Sequelize.STRING(36), primaryKey: true }, - code: { type: Sequelize.STRING(8), unique: true }, - time: { type: 'TIMESTAMP', defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false }, - used: { type: Sequelize.BOOLEAN, defaultValue: false }, + uuid: {type: Sequelize.STRING(36), primaryKey: true}, + code: {type: Sequelize.STRING(8), unique: true}, + time: {type: 'TIMESTAMP', defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'), allowNull: false}, + used: {type: Sequelize.BOOLEAN, defaultValue: false}, }, { timestamps: false, freezeTableName: true @@ -87,41 +87,41 @@ const commands = [{ name: 'ping', description: 'Répond avec pong!' }, -{ - name: 'setanniv', - description: 'Permet de définir ta date d\'anniversaire (usage unique).', - options: [{ - name: "date", // no uppercase as well - description: "Date au format DD/MM/YYYY - 31/12/2001", - type: 3, - required: true - }] -}, -{ - name: 'delanniv', - description: '[Admin] Supprime la date d\'anniversaire d\'un membre.', - options: [{ - name: "membre", // no uppercase as well - description: "Membre à supprimer la date d'anniversaire.", - type: 6, - required: true - }] -}, -{ - name: 'linkmc', - description: 'Te permet de lier ton compte Minecraft au serveur Discord.', - options: [{ - name: "code", // no uppercase as well - description: "Code généré par la commande /getlinkcode.", - type: 3, - required: true - }] -}]; + { + name: 'setanniv', + description: 'Permet de définir ta date d\'anniversaire (usage unique).', + options: [{ + name: "date", // no uppercase as well + description: "Date au format DD/MM/YYYY - 31/12/2001", + type: 3, + required: true + }] + }, + { + name: 'delanniv', + description: '[Admin] Supprime la date d\'anniversaire d\'un membre.', + options: [{ + name: "membre", // no uppercase as well + description: "Membre à supprimer la date d'anniversaire.", + type: 6, + required: true + }] + }, + { + name: 'linkmc', + description: 'Te permet de lier ton compte Minecraft au serveur Discord.', + options: [{ + name: "code", // no uppercase as well + description: "Code généré par la commande /getlinkcode.", + type: 3, + required: true + }] + }]; //////////////////////////////////////////////////////////////// // INITIALISATION DES COMMANDES ET CONNEXION À LA BASE DE DONNÉES //////////////////////////////////////////////////////////////// -const rest = new REST({ version: '9' }).setToken(config.get("DISCORD_BOT_TOKEN")); +const rest = new REST({version: '9'}).setToken(config.get("DISCORD_BOT_TOKEN")); (async () => { console.log('[' + 'INFO'.yellow + '] Connexion à la base de donnée...'.brightWhite); @@ -135,7 +135,7 @@ const rest = new REST({ version: '9' }).setToken(config.get("DISCORD_BOT_TOKEN") //console.log(JSON.stringify(commands)); await rest.put( Routes.applicationGuildCommands(config.get("CLIENT_ID"), config.get("GUILD_ID")), - { body: commands }, + {body: commands}, ); console.log('[' + 'SUCCES'.brightGreen + '] Toutes les commandes ont été actualisées.'); @@ -161,7 +161,7 @@ async function initialiseDatabaseTables() { await mcLinkCode.sync(); // Basiquement on regarde si l'entrée existe, puis on agit en conséquence - let token = await botSettings.findOne({ where: { name: "token" } }); + let token = await botSettings.findOne({where: {name: "token"}}); if (token == null) { // INSERT si elle n'existe pas console.log('[' + 'INSERT'.brightMagenta + '] Insertion de token'.brightWhite); @@ -172,18 +172,18 @@ async function initialiseDatabaseTables() { } else { // UPDATE si différente if (token.value !== config.get("DISCORD_BOT_TOKEN")) { - token.update({ value: config.get("DISCORD_BOT_TOKEN") }) + token.update({value: config.get("DISCORD_BOT_TOKEN")}) .then(() => { console.log('[' + 'UPDATE'.brightMagenta + '] Mise à jour du token dans la base de donnée'.brightWhite); }).catch(err => { - console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de token dans la base de donnée: '.brightWhite + '\n'); - throw new Error(err); - }); + console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de token dans la base de donnée: '.brightWhite + '\n'); + throw new Error(err); + }); } } // Et c'est pareil à chaque fois - let clientId = await botSettings.findOne({ where: { name: "clientId" } }); + let clientId = await botSettings.findOne({where: {name: "clientId"}}); if (clientId == null) { console.log('[' + 'INSERT'.brightMagenta + '] Insertion de clientId'.brightWhite); botSettings.create({ @@ -192,17 +192,17 @@ async function initialiseDatabaseTables() { }); } else { if (clientId.value !== config.get("CLIENT_ID")) { - clientId.update({ value: config.get("CLIENT_ID") }) + clientId.update({value: config.get("CLIENT_ID")}) .then(() => { console.log('[' + 'UPDATE'.brightMagenta + '] Mise à jour du clientId dans la base de donnée'.brightWhite); }).catch(err => { - console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de clientId dans la base de donnée: '.brightWhite + '\n'); - throw new Error(err); - }); + console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de clientId dans la base de donnée: '.brightWhite + '\n'); + throw new Error(err); + }); } } - let guildId = await botSettings.findOne({ where: { name: "guildId" } }); + let guildId = await botSettings.findOne({where: {name: "guildId"}}); if (guildId == null) { console.log('[' + 'INSERT'.brightMagenta + '] Insertion de guildId'.brightWhite); botSettings.create({ @@ -211,13 +211,13 @@ async function initialiseDatabaseTables() { }); } else { if (guildId.value !== config.get("GUILD_ID")) { - guildId.update({ value: config.get("GUILD_ID") }) + guildId.update({value: config.get("GUILD_ID")}) .then(() => { console.log('[' + 'UPDATE'.brightMagenta + '] Mise à jour du guildId dans la base de donnée'.brightWhite); }).catch(err => { - console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de guildId dans la base de donnée: '.brightWhite + '\n'); - throw new Error(err); - }); + console.log('[' + 'ERREUR'.brightRed + '] Erreur lors de la màj de guildId dans la base de donnée: '.brightWhite + '\n'); + throw new Error(err); + }); } } @@ -278,7 +278,7 @@ recursiveAsyncReadLine(); //we have to actually start our recursion somehow // BOT DISCORD //////////////////////////////////////////////////////////////// // require the needed discord.js classes -const { Client, GatewayIntentBits, WebhookClient, EmbedBuilder} = require('discord.js'); +const {Client, GatewayIntentBits, WebhookClient, EmbedBuilder} = require('discord.js'); // create a new Discord client const client = new Client({ intents: [ @@ -356,7 +356,7 @@ client.on('guildMemberRemove', async (member) => { // Lorsqu'un message est envoyé client.on('messageCreate', async message => { - if(!message.author.bot){ + if (!message.author.bot) { // On va regarder si le client est dans la liste des shadowban for (let i = 0; i < shadowBanIds.length; i++) { if (message.author.id === shadowBanIds[i]) { @@ -366,12 +366,12 @@ client.on('messageCreate', async message => { const embed = new EmbedBuilder() .setColor('#da373c') .setTitle('Message supprimé') - .setAuthor({ name: message.author.username, iconURL: message.author.avatarURL() }) + .setAuthor({name: message.author.username, iconURL: message.author.avatarURL()}) .setDescription(message.content) .setTimestamp() - .setFooter({ text: 'Shadowban' }); + .setFooter({text: 'Shadowban'}); - client.channels.cache.get(config.get("CANAL_LOG")).send({ embeds: [embed] }); + client.channels.cache.get(config.get("CANAL_LOG")).send({embeds: [embed]}); await message.delete(); return; } @@ -400,7 +400,7 @@ client.on('messageCreate', async message => { name: 'playerName' } }); - if(userMcUsername != null) { + if (userMcUsername != null) { playerName = userMcUsername.value; } } @@ -419,7 +419,6 @@ client.on('messageCreate', async message => { }); - // Commandes client.on('interactionCreate', async interaction => { if (interaction.isCommand()) { @@ -461,7 +460,7 @@ client.on('interactionCreate', async interaction => { name: "birthday", value: birthday }); - await interaction.reply({ content: 'Je m\'en souviendrai. :thumbup:', ephemeral: true }); + await interaction.reply({content: 'Je m\'en souviendrai. :thumbup:', ephemeral: true}); await checkAnniv(); } catch (error) { console.error('[' + 'ERREUR'.brightRed + '] Erreur lors de l\'insertion de la date d\'anniversaire: '.brightWhite + '\n', error); @@ -487,10 +486,16 @@ client.on('interactionCreate', async interaction => { await interaction.reply("J'ai eu un petit problème pour supprimer la date d'anniversaire, re-essaie plus-tard. :p"); } - await interaction.reply({ content: 'La date d\'anniversaire de <@' + interaction.options.getMember('membre') + '> a été supprimée.', ephemeral: true }); + await interaction.reply({ + content: 'La date d\'anniversaire de <@' + interaction.options.getMember('membre') + '> a été supprimée.', + ephemeral: true + }); await checkAnniv(); } else { - await interaction.reply({ content: "Tu n'as pas le droit d'exécuter cette commande. :p", ephemeral: true }); + await interaction.reply({ + content: "Tu n'as pas le droit d'exécuter cette commande. :p", + ephemeral: true + }); } } else if (interaction.commandName === 'linkmc') { @@ -543,14 +548,20 @@ client.on('interactionCreate', async interaction => { }); // On va envoyer le message - await interaction.reply({ content: 'Ton compte a été associé avec le compte Minecraft de **' + playerName.value + '** !', ephemeral: true }); + await interaction.reply({ + content: 'Ton compte a été associé avec le compte Minecraft de **' + playerName.value + '** !', + ephemeral: true + }); } else { // Le code n'est pas valide - await interaction.reply({ content: 'Le code que tu as entré est invalide. :p', ephemeral: true }); + await interaction.reply({content: 'Le code que tu as entré est invalide. :p', ephemeral: true}); } } else { // Il l'a déjà associé - await interaction.reply({ content: 'Tu as déjà associé ton compte minecraft avec le serveur Discord. :thinking:', ephemeral: true }); + await interaction.reply({ + content: 'Tu as déjà associé ton compte minecraft avec le serveur Discord. :thinking:', + ephemeral: true + }); } } } @@ -572,7 +583,7 @@ async function checkAnniv() { } today = mm + '/' + dd; - let { count, rows } = await memberSettings.findAndCountAll({ + let {count, rows} = await memberSettings.findAndCountAll({ where: { name: "birthday", value: { @@ -622,17 +633,17 @@ async function checkAnniv() { } async function verifyMcChatWebhook() { - let mcChatWebhookId = await botSettings.findOne({ where: { name: "mcChatWebhookId" } }); - let devMcChatWebhookId = await botSettings.findOne({ where: { name: "devMcChatWebhookId" } }); + let mcChatWebhookId = await botSettings.findOne({where: {name: "mcChatWebhookId"}}); + let devMcChatWebhookId = await botSettings.findOne({where: {name: "devMcChatWebhookId"}}); if (mcChatWebhookId != null && devMcChatWebhookId != null) { console.log("[" + 'INFO'.yellow + "] Le Webhook du serveur MC est déjà configuré."); - let mcChatWebhookToken = await botSettings.findOne({ where: { name: "mcChatWebhookToken" } }); - let devMcChatWebhookToken = await botSettings.findOne({ where: { name: "devMcChatWebhookToken" } }); + let mcChatWebhookToken = await botSettings.findOne({where: {name: "mcChatWebhookToken"}}); + let devMcChatWebhookToken = await botSettings.findOne({where: {name: "devMcChatWebhookToken"}}); if (mcChatWebhookToken != null && devMcChatWebhookToken != null) { - mcChatWebhook = new WebhookClient({ id: mcChatWebhookId.value, token: mcChatWebhookToken.value }); - devMcChatWebhook = new WebhookClient({ id: devMcChatWebhookId.value, token: devMcChatWebhookToken.value }); + mcChatWebhook = new WebhookClient({id: mcChatWebhookId.value, token: mcChatWebhookToken.value}); + devMcChatWebhook = new WebhookClient({id: devMcChatWebhookId.value, token: devMcChatWebhookToken.value}); } else { console.log("[" + 'ERREUR'.brightRed + "] Impossible de trouver le token du webhook dans la base de donnée."); await createMcChatWebhook(); @@ -656,7 +667,7 @@ async function createMcChatWebhook() { name: "mcChatWebhookToken", value: webhook.token }); - mcChatWebhook = new WebhookClient({ id: webhook.id, token: webhook.token }); + mcChatWebhook = new WebhookClient({id: webhook.id, token: webhook.token}); console.log("[" + 'INFO'.yellow + "] Le Webhook du serveur MC a été configuré avec succès."); }) .catch(console.error); @@ -674,28 +685,28 @@ async function createMcChatWebhook() { name: "devMcChatWebhookToken", value: webhook.token }); - devMcChatWebhook = new WebhookClient({ id: webhook.id, token: webhook.token }); + devMcChatWebhook = new WebhookClient({id: webhook.id, token: webhook.token}); console.log("[" + 'INFO'.yellow + "] Le Webhook du serveur MC Dev a été configuré avec succès."); }) .catch(console.error); } function sendMessageFromMcChat(username, message, serverType) { - if(username === "SL-Craft"){ - if(serverType === "dev"){ + if (username === "SL-Craft") { + if (serverType === "dev") { devMcChatWebhook.send({ content: message, username: username, avatarURL: 'https://sl-craft.fr/data/images/logo/favicon-color.png', }); - }else{ + } else { mcChatWebhook.send({ content: message, username: username, avatarURL: 'https://sl-craft.fr/data/images/logo/favicon-color.png', }); } - }else{ + } else { // On va vérifier que le joueur ne fait pas de @everyone ou de @here message = message.replace("<@everyone>", "**everyone**"); message = message.replace("<@here>", "**here**"); @@ -705,24 +716,24 @@ function sendMessageFromMcChat(username, message, serverType) { // On va regarder si le joueur souhaite tagger quelqu'un avec un @ const regex = /@(.*?\s)/g; const match = regex.exec(message); - if (match){ + if (match) { // console.log("ça a matché"); const member = match[1].trim(); // console.log(member+"flag"); const memberFetch = client.users.cache.find(user => user.username === member).id; - if (memberFetch){ + if (memberFetch) { // console.log("Le membre existe"); - message = message.replace("@"+member, "<@" + memberFetch + ">"); + message = message.replace("@" + member, "<@" + memberFetch + ">"); } } - if(serverType === "dev"){ + if (serverType === "dev") { devMcChatWebhook.send({ content: message, username: username, avatarURL: 'https://live.mc.sl-projects.com/tiles/faces/32x32/' + username + '.png', }); - }else{ + } else { mcChatWebhook.send({ content: message, username: username, @@ -732,6 +743,7 @@ function sendMessageFromMcChat(username, message, serverType) { } } + schedule.scheduleJob('0 0 * * *', function () { console.log('[' + 'INFO'.yellow + '] Éxecution des tâches de fonds quotidiennes...'.brightWhite); checkAnniv();