add auto role for new member and member in vocal

This commit is contained in:
Arthur Puechberty
2026-01-16 00:25:06 +01:00
parent 2164c13a04
commit cfa4f05a2d
8 changed files with 688 additions and 248 deletions
+4 -234
View File
@@ -31,94 +31,9 @@ app.use(session({
// --- Servir le dossier public ---
app.use(express.static(path.join(__dirname, "public")));
// --- Route pour démarrer la connexion Discord ---
app.get("/auth/discord", (req, res) => {
const url = `https://discord.com/api/oauth2/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=code&scope=identify%20guilds`;
res.redirect(url);
});
// --- Callback après connexion Discord ---
app.get("/auth/discord/callback", async (req, res) => {
const code = req.query.code;
if (!code) return res.send("Pas de code OAuth reçu !");
try {
// Échange du code contre access token
const data = new URLSearchParams();
data.append("client_id", CLIENT_ID);
data.append("client_secret", CLIENT_SECRET);
data.append("grant_type", "authorization_code");
data.append("code", code);
data.append("redirect_uri", REDIRECT_URI);
data.append("scope", "identify");
const tokenResponse = await fetch("https://discord.com/api/oauth2/token", {
method: "POST",
body: data,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
const tokenJson = await tokenResponse.json();
const accessToken = tokenJson.access_token;
// Récupération des infos utilisateur
const userResponse = await fetch("https://discord.com/api/users/@me", {
headers: { Authorization: `Bearer ${accessToken}` },
});
const user = await userResponse.json();
// Récupérer la liste des guilds
const guildsResponse = await fetch("https://discord.com/api/users/@me/guilds", {
headers: { Authorization: `Bearer ${accessToken}` },
});
const guilds = await guildsResponse.json();
// Stocker l'utilisateur dans la session
req.session.user = user;
req.session.guilds = guilds;
// Rediriger vers la page HTML
res.redirect("/dashboard");
} catch (err) {
console.error(err);
res.send("Erreur lors de la connexion Discord !");
}
});
app.get("/logout", (req, res) => {
req.session.destroy();
res.redirect("/");
});
// --- API pour récupérer l'objet user côté front ---
app.get("/api/user", (req, res) => {
if (req.session.user) {
res.json(req.session.user);
} else {
res.status(401).json({ error: "Utilisateur non connecté" });
}
});
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é" });
// Liste des guilds où le bot est présent
const botGuildIds = client.guilds.cache.map(g => g.id);
// Filtrer : bot présent + admin
const validGuilds = userGuilds.filter(g => {
const hasAdmin = (g.permissions & 0x8) === 0x8; // flag admin
const botHere = botGuildIds.includes(g.id);
return hasAdmin && botHere;
});
res.json(validGuilds);
});
// --- Routes ---
require("./routes/auth")(app, db, client);
require("./routes/api")(app, db, client);
app.get("/invite-bot", (req, res) => {
const permissions = 8; // Permissions administrateur
@@ -142,7 +57,6 @@ app.get("/invite-bot", (req, res) => {
res.json({ url });
});
// Servir le dashboard par serveur
app.get("/guild/:guildId", (req, res) => {
const guildId = req.params.guildId;
@@ -159,150 +73,6 @@ app.get("/guild/:guildId", (req, res) => {
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");
@@ -313,4 +83,4 @@ app.get("/dashboard", (req, res) => {
// --- Lancement du serveur ---
app.listen(PORT, () => console.log(`Serveur lancé sur http://localhost:${PORT}`));
app.listen(PORT, () => console.log(`Serveur lancé sur http://localhost:${PORT}`));