diff --git a/app/bot.js b/app/bot.js
index 1c0e4f8..5596ce7 100644
--- a/app/bot.js
+++ b/app/bot.js
@@ -45,6 +45,28 @@ client.on(Events.GuildMemberAdd, member => {
});
+client.on(Events.GuildMemberRemove, member => {
+ db.get(
+ "SELECT enabled, channel_id, message FROM goodbye_config WHERE guild_id = ?",
+ [member.guild.id],
+ (err, row) => {
+ if (err || !row || !row.enabled) return;
+
+ let msg = row.message;
+
+ msg = msg
+ .replace("{user}", member.user.username)
+ .replace("{server}", member.guild.name);
+
+ const channel = member.guild.channels.cache.get(row.channel_id);
+ if (channel) {
+ channel.send(msg);
+ }
+ }
+ );
+});
+
+
client.login(process.env.BOT_TOKEN);
module.exports = client;
diff --git a/app/db.js b/app/db.js
index ec961c2..9ba6d5e 100644
--- a/app/db.js
+++ b/app/db.js
@@ -10,13 +10,20 @@ const db = new sqlite3.Database(
);
// Création de la table si elle n'existe pas
-db.run(`
+db.exec(`
CREATE TABLE IF NOT EXISTS welcome_config (
guild_id TEXT PRIMARY KEY,
channel_id TEXT,
enabled INTEGER NOT NULL,
message TEXT NOT NULL
- )
+ );
+
+ CREATE TABLE IF NOT EXISTS goodbye_config (
+ guild_id TEXT PRIMARY KEY,
+ channel_id TEXT,
+ enabled INTEGER NOT NULL,
+ message TEXT NOT NULL
+ );
`);
module.exports = db;
diff --git a/app/public/welcome.html b/app/public/dashboard.html
similarity index 96%
rename from app/public/welcome.html
rename to app/public/dashboard.html
index ba85e79..3d19dea 100644
--- a/app/public/welcome.html
+++ b/app/public/dashboard.html
@@ -1,9 +1,13 @@
- Bienvenue
+ Tableau de bord
+
+
Chargement...
@@ -24,6 +28,7 @@
document.getElementById("greeting").textContent = "Utilisateur non connecté.";
});
+
// --- Affichage des guilds de l'utilisateur ---
fetch("/api/guilds")
.then(res => res.json())
@@ -51,6 +56,7 @@
document.getElementById("guilds-list").innerHTML = "Impossible de récupérer les guilds.";
});
+
fetch("/invite-bot")
.then(res => res.json())
.then(data => {
diff --git a/app/public/guild.html b/app/public/guild.html
index 24f9af4..dfd00b9 100644
--- a/app/public/guild.html
+++ b/app/public/guild.html
@@ -4,16 +4,20 @@
Dashboard du serveur
+
+
Chargement...
+
-
+
+
+
diff --git a/app/public/index.html b/app/public/index.html
index fe83576..f1483bb 100644
--- a/app/public/index.html
+++ b/app/public/index.html
@@ -1,12 +1,25 @@
- Connexion Discord
+ LazyBot - Bot Discord
- Bienvenue !
-
-
-
+
+ LazyBot
+ Ajouter à Discord
+
diff --git a/app/server.js b/app/server.js
index e939af2..d3a906e 100644
--- a/app/server.js
+++ b/app/server.js
@@ -75,7 +75,7 @@ app.get("/auth/discord/callback", async (req, res) => {
req.session.guilds = guilds;
// Rediriger vers la page HTML
- res.redirect("/welcome.html");
+ res.redirect("/dashboard");
} catch (err) {
console.error(err);
res.send("Erreur lors de la connexion Discord !");
@@ -91,6 +91,7 @@ app.get("/api/user", (req, res) => {
}
});
+
app.get("/api/guilds", (req, res) => {
const userGuilds = req.session.guilds; // toutes les guilds de l'utilisateur
if (!userGuilds) return res.status(401).json({ error: "Utilisateur non connecté" });
@@ -105,115 +106,201 @@ app.get("/api/guilds", (req, res) => {
return hasAdmin && botHere;
});
- app.get("/invite-bot", (req, res) => {
- const clientId = process.env.CLIENT_ID;
- const redirectUri = encodeURIComponent(process.env.REDIRECT_URI);
- const permissions = 8; // Permissions administrateur
- const scope = encodeURIComponent("bot guilds applications.commands");
-
- const url = `https://discord.com/oauth2/authorize?client_id=${clientId}&permissions=${permissions}&scope=${scope}&redirect_uri=${redirectUri}&response_type=code`;
-
- // Tu peux juste renvoyer le lien
- 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"));
- });
-
- // API pour sauvegarder la configuration de bienvenue
- app.post("/api/bot/save-welcome-config", express.json(), (req, res) => {
- const { guildId, channelId, welcomeEnabled, welcomeMessage } = req.body;
-
- if (!req.session.guilds) {
- return res.status(401).json({ success: false });
- }
-
- const isAdmin = req.session.guilds.find(
- g => g.id === guildId && (BigInt(g.permissions) & 0x8n) === 0x8n
- );
-
- if (!isAdmin) {
- return res.status(403).json({ success: false });
- }
-
- db.run(
- `
- INSERT INTO welcome_config (guild_id, channel_id, enabled, message)
- VALUES (?, ?, ?, ?)
- ON CONFLICT(guild_id)
- DO UPDATE SET channel_id = ?, enabled = ?, message = ?
- `,
- [
- guildId,
- channelId,
- welcomeEnabled ? 1 : 0,
- welcomeMessage,
- channelId,
- welcomeEnabled ? 1 : 0,
- welcomeMessage
- ],
- err => {
- if (err) {
- console.error(err);
- return res.status(500).json({ success: false });
- }
- res.json({ success: true });
- }
- );
- });
-
- app.get("/api/bot/get-welcome-config/:guildId", (req, res) => {
- const { guildId } = req.params;
-
- db.get(
- "SELECT enabled, channel_id, message FROM welcome_config WHERE guild_id = ?",
- [guildId],
- (err, row) => {
- if (err || !row) {
- return res.json({ enabled: false, channelId: null, message: "" });
- }
- res.json({
- enabled: !!row.enabled,
- channelId: row.channel_id,
- message: row.message
- });
- }
- );
- });
-
- app.get("/api/bot/get-text-channels/:guildId", (req, res) => {
- const { guildId } = req.params;
- const guild = client.guilds.cache.get(guildId);
- if (!guild) {
- return res.status(404).json({ error: "Serveur non trouvé" });
- }
-
- const channels = guild.channels.cache
- .filter(channel => channel.isTextBased())
- .map(channel => ({
- id: channel.id,
- name: channel.name
- }));
-
- res.json(channels);
- });
-
res.json(validGuilds);
});
+app.get("/invite-bot", (req, res) => {
+ const permissions = 8; // Permissions administrateur
+
+ const scopes = [
+ "bot",
+ "applications.commands",
+ "identify",
+ "guilds"
+ ].join(" ");
+
+ const url =
+ "https://discord.com/oauth2/authorize" +
+ `?client_id=${CLIENT_ID}` +
+ `&redirect_uri=${encodeURIComponent(REDIRECT_URI)}` +
+ "&response_type=code" +
+ `&scope=${encodeURIComponent(scopes)}` +
+ `&permissions=${permissions}`;
+
+ // Tu peux juste renvoyer le lien
+ 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("/auth/discord"); // 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"));
+});
+
+
+// API pour sauvegarder la configuration de bienvenue
+app.post("/api/bot/save-welcome-config", express.json(), (req, res) => {
+ const { guildId, channelId, welcomeEnabled, welcomeMessage } = req.body;
+
+ if (!req.session.guilds) {
+ return res.status(401).json({ success: false });
+ }
+
+ const isAdmin = req.session.guilds.find(
+ g => g.id === guildId && (BigInt(g.permissions) & 0x8n) === 0x8n
+ );
+
+ if (!isAdmin) {
+ return res.status(403).json({ success: false });
+ }
+
+ db.run(
+ `
+ INSERT INTO welcome_config (guild_id, channel_id, enabled, message)
+ VALUES (?, ?, ?, ?)
+ ON CONFLICT(guild_id)
+ DO UPDATE SET channel_id = ?, enabled = ?, message = ?
+ `,
+ [
+ guildId,
+ channelId,
+ welcomeEnabled ? 1 : 0,
+ welcomeMessage,
+ channelId,
+ welcomeEnabled ? 1 : 0,
+ welcomeMessage
+ ],
+ err => {
+ if (err) {
+ console.error(err);
+ return res.status(500).json({ success: false });
+ }
+ res.json({ success: true });
+ }
+ );
+});
+
+
+app.get("/api/bot/get-welcome-config/:guildId", (req, res) => {
+ const { guildId } = req.params;
+
+ db.get(
+ "SELECT enabled, channel_id, message FROM welcome_config WHERE guild_id = ?",
+ [guildId],
+ (err, row) => {
+ if (err || !row) {
+ return res.json({ enabled: false, channelId: null, message: "" });
+ }
+ res.json({
+ enabled: !!row.enabled,
+ channelId: row.channel_id,
+ message: row.message
+ });
+ }
+ );
+});
+
+
+app.post("/api/bot/save-goodbye-config", express.json(), (req, res) => {
+ const { guildId, channelId, goodbyeEnabled, goodbyeMessage } = req.body;
+
+ if (!req.session.guilds) {
+ return res.status(401).json({ success: false });
+ }
+
+ const isAdmin = req.session.guilds.find(
+ g => g.id === guildId && (BigInt(g.permissions) & 0x8n) === 0x8n
+ );
+
+ if (!isAdmin) {
+ return res.status(403).json({ success: false });
+ }
+
+ db.run(
+ `
+ INSERT INTO goodbye_config (guild_id, channel_id, enabled, message)
+ VALUES (?, ?, ?, ?)
+ ON CONFLICT(guild_id)
+ DO UPDATE SET channel_id = ?, enabled = ?, message = ?
+ `,
+ [
+ guildId,
+ channelId,
+ goodbyeEnabled ? 1 : 0,
+ goodbyeMessage,
+ channelId,
+ goodbyeEnabled ? 1 : 0,
+ goodbyeMessage
+ ],
+ err => {
+ if (err) {
+ console.error(err);
+ return res.status(500).json({ success: false });
+ }
+ res.json({ success: true });
+ }
+ );
+});
+
+
+app.get("/api/bot/get-goodbye-config/:guildId", (req, res) => {
+ const { guildId } = req.params;
+
+ db.get(
+ "SELECT enabled, channel_id, message FROM goodbye_config WHERE guild_id = ?",
+ [guildId],
+ (err, row) => {
+ if (err || !row) {
+ return res.json({ enabled: false, channelId: null, message: "" });
+ }
+ res.json({
+ enabled: !!row.enabled,
+ channelId: row.channel_id,
+ message: row.message
+ });
+ }
+ );
+});
+
+
+app.get("/api/bot/get-text-channels/:guildId", (req, res) => {
+ const { guildId } = req.params;
+ const guild = client.guilds.cache.get(guildId);
+ if (!guild) {
+ return res.status(404).json({ error: "Serveur non trouvé" });
+ }
+
+ const channels = guild.channels.cache
+ .filter(channel => channel.isTextBased())
+ .map(channel => ({
+ id: channel.id,
+ name: channel.name
+ }));
+
+ res.json(channels);
+});
+
+
+app.get("/dashboard", (req, res) => {
+ if (!req.session.user) {
+ return res.redirect("/auth/discord");
+ }
+
+ res.sendFile(path.join(__dirname, "public", "dashboard.html"));
+});
+
+
// --- Lancement du serveur ---
app.listen(PORT, () => console.log(`Serveur lancé sur http://localhost:${PORT}`));