diff --git a/app/bot.js b/app/bot.js index dae6566..7fac887 100644 --- a/app/bot.js +++ b/app/bot.js @@ -1,11 +1,34 @@ -const { Client, GatewayIntentBits } = require("discord.js"); +const loadSlashCommands = require('./slash_commands.js'); +loadSlashCommands(); -const client = new Client({ intents: [GatewayIntentBits.Guilds] }); +const { Client, GatewayIntentBits, ActivityType, Events } = require("discord.js"); -client.once("ready", () => { +const client = new Client({ intents: Object.values(GatewayIntentBits) }); + +client.once("clientReady", () => { console.log(`Bot connecté en tant que ${client.user.tag}`); + client.user.setActivity("LazyBot à votre service !", { type: ActivityType.Custom }); }); + +client.on(Events.InteractionCreate, async interaction => { + if (!interaction.isChatInputCommand()) return; + + if (interaction.commandName === 'ping') { + await interaction.reply('Pong!'); + } +}); + + +client.on(Events.MessageCreate, message => { + if (message.author.bot) return; + const config = global.guildConfigs?.[message.guild.id]; + if (config?.autoMessage) { + message.channel.send(config.autoMessage); + } +}); + + client.login(process.env.BOT_TOKEN); module.exports = client; diff --git a/app/public/guild.html b/app/public/guild.html new file mode 100644 index 0000000..d262847 --- /dev/null +++ b/app/public/guild.html @@ -0,0 +1,49 @@ + + + + Dashboard du serveur + + +

Chargement...

+ +
+ + + +
+ +
+ + + + diff --git a/app/public/welcome.html b/app/public/welcome.html index ab6ba5c..ba85e79 100644 --- a/app/public/welcome.html +++ b/app/public/welcome.html @@ -60,6 +60,8 @@ .catch(() => { console.log("Impossible de récupérer le lien du bot."); }); + + diff --git a/app/server.js b/app/server.js index 21fd1c2..031c739 100644 --- a/app/server.js +++ b/app/server.js @@ -114,6 +114,41 @@ app.get("/api/guilds", (req, res) => { res.json({ url }); }); + // Servir le dashboard par serveur + app.get("/guild/:guildId", (req, res) => { + const guildId = req.params.guildId; + const userGuilds = req.session.guilds; + + // Vérifie que l'utilisateur est connecté et a admin sur ce serveur + if (!userGuilds) return res.redirect("/"); // ou une page de connexion + const guildValid = userGuilds.find( + g => g.id === guildId && (BigInt(g.permissions) & 0x8n) === 0x8n + ); + if (!guildValid) return res.send("Accès interdit : vous n'êtes pas admin sur ce serveur."); + + // Redirige vers la page HTML statique du dashboard + res.sendFile(path.join(__dirname, "public", "guild.html")); + }); + + // Exemple : sauvegarde config d'un serveur + app.post("/api/bot/save-config", express.json(), (req, res) => { + const { guildId, autoMessage } = req.body; + const userGuilds = req.session.guilds; + + // Vérifie admin + bot présent + const guildValid = userGuilds.find( + g => g.id === guildId && (BigInt(g.permissions) & 0x8n) === 0x8n + ); + if (!guildValid) return res.status(403).json({ error: "Accès interdit" }); + + // Sauvegarde dans un objet serveur côté serveur (ou DB) + if (!global.guildConfigs) global.guildConfigs = {}; + global.guildConfigs[guildId] = { autoMessage }; + + res.json({ success: true }); + }); + + res.json(validGuilds); }); diff --git a/app/slash_commands.js b/app/slash_commands.js new file mode 100644 index 0000000..9d85a64 --- /dev/null +++ b/app/slash_commands.js @@ -0,0 +1,28 @@ +const { REST, Routes } = require('discord.js'); + +module.exports = async () => { + const TOKEN = process.env.BOT_TOKEN; + const CLIENT_ID = process.env.CLIENT_ID; + + const commands = [ + { + name: 'ping', + description: 'Replies with Pong!', + }, + ]; + + const rest = new REST({ version: '10' }).setToken(TOKEN); + + try { + console.log('Started refreshing application (/) commands.'); + + await rest.put( + Routes.applicationCommands(CLIENT_ID), + { body: commands } + ); + + console.log('Successfully reloaded application (/) commands.'); + } catch (error) { + console.error(error); + } +};