add little config bot

This commit is contained in:
Arthur Puechberty
2026-01-15 01:37:43 +01:00
parent a4d93afaa3
commit 0a0c419c6b
5 changed files with 140 additions and 3 deletions
+26 -3
View File
@@ -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}`); 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); client.login(process.env.BOT_TOKEN);
module.exports = client; module.exports = client;
+49
View File
@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<head>
<title>Dashboard du serveur</title>
</head>
<body>
<h1 id="guild-name">Chargement...</h1>
<form id="event-form">
<label>Message automatique :</label>
<input type="text" id="auto-message" placeholder="Ex: Bonjour à tous !">
<button type="submit">Sauvegarder</button>
</form>
<div id="status"></div>
<script>
const guildId = window.location.pathname.split("/")[2]; // récupère l'ID du serveur
// Afficher le nom du serveur
fetch("/api/guilds")
.then(res => res.json())
.then(guilds => {
const guild = guilds.find(g => g.id === guildId);
if (!guild) {
document.getElementById("guild-name").textContent = "Serveur introuvable ou accès refusé";
return;
}
document.getElementById("guild-name").textContent = `Dashboard : ${guild.name}`;
});
// Envoyer la config du formulaire au serveur
const form = document.getElementById("event-form");
form.addEventListener("submit", async (e) => {
e.preventDefault();
const message = document.getElementById("auto-message").value;
const res = await fetch("/api/bot/save-config", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ guildId, autoMessage: message })
});
const data = await res.json();
document.getElementById("status").textContent = data.success ? "Config sauvegardée ✅" : "Erreur ❌";
});
</script>
</body>
</html>
+2
View File
@@ -60,6 +60,8 @@
.catch(() => { .catch(() => {
console.log("Impossible de récupérer le lien du bot."); console.log("Impossible de récupérer le lien du bot.");
}); });
</script> </script>
</body> </body>
</html> </html>
+35
View File
@@ -114,6 +114,41 @@ app.get("/api/guilds", (req, res) => {
res.json({ url }); 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); res.json(validGuilds);
}); });
+28
View File
@@ -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);
}
};