mirror of
https://github.com/arthur-pbty/LazyBot.git
synced 2026-06-03 15:07:29 +02:00
add guildMemberAdd config
This commit is contained in:
+22
-6
@@ -1,6 +1,8 @@
|
||||
const loadSlashCommands = require('./slash_commands.js');
|
||||
loadSlashCommands();
|
||||
|
||||
const db = require("./db");
|
||||
|
||||
const { Client, GatewayIntentBits, ActivityType, Events } = require("discord.js");
|
||||
|
||||
const client = new Client({ intents: Object.values(GatewayIntentBits) });
|
||||
@@ -20,12 +22,26 @@ client.on(Events.InteractionCreate, async interaction => {
|
||||
});
|
||||
|
||||
|
||||
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.on(Events.GuildMemberAdd, member => {
|
||||
db.get(
|
||||
"SELECT enabled, channel_id, message FROM welcome_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("{mention}", `<@${member.id}>`)
|
||||
.replace("{server}", member.guild.name);
|
||||
|
||||
const channel = member.guild.channels.cache.get(row.channel_id);
|
||||
if (channel) {
|
||||
channel.send(msg);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
const sqlite3 = require("sqlite3").verbose();
|
||||
const path = require("path");
|
||||
|
||||
const db = new sqlite3.Database(
|
||||
path.join(__dirname, process.env.DB_PATH || "database.sqlite"),
|
||||
err => {
|
||||
if (err) console.error("Erreur DB:", err);
|
||||
else console.log("DB SQLite connectée");
|
||||
}
|
||||
);
|
||||
|
||||
// Création de la table si elle n'existe pas
|
||||
db.run(`
|
||||
CREATE TABLE IF NOT EXISTS welcome_config (
|
||||
guild_id TEXT PRIMARY KEY,
|
||||
channel_id TEXT,
|
||||
enabled INTEGER NOT NULL,
|
||||
message TEXT NOT NULL
|
||||
)
|
||||
`);
|
||||
|
||||
module.exports = db;
|
||||
Generated
+1344
-1
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -27,6 +27,7 @@
|
||||
"discord.js": "^14.25.1",
|
||||
"dotenv": "^17.2.3",
|
||||
"express": "^5.2.1",
|
||||
"express-session": "^1.18.2"
|
||||
"express-session": "^1.18.2",
|
||||
"sqlite3": "^5.1.7"
|
||||
}
|
||||
}
|
||||
|
||||
+107
-39
@@ -1,49 +1,117 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Dashboard du serveur</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id="guild-name">Chargement...</h1>
|
||||
<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>
|
||||
<form id="welcome-form">
|
||||
<label>
|
||||
<input type="checkbox" id="welcome-enabled" />
|
||||
Activer le message de bienvenue
|
||||
</label>
|
||||
|
||||
<div id="status"></div>
|
||||
<br /><br />
|
||||
|
||||
<script>
|
||||
const guildId = window.location.pathname.split("/")[2]; // récupère l'ID du serveur
|
||||
<label>
|
||||
Canal de bienvenue :
|
||||
<br />
|
||||
<select id="welcome-channel">
|
||||
</select>
|
||||
</label>
|
||||
|
||||
// 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}`;
|
||||
});
|
||||
<br /><br />
|
||||
|
||||
// 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;
|
||||
<label>
|
||||
Message :
|
||||
<br />
|
||||
<textarea
|
||||
id="welcome-message"
|
||||
rows="4"
|
||||
cols="50"
|
||||
placeholder="Ex : Bienvenue {user} sur {server} 🎉"
|
||||
></textarea>
|
||||
</label>
|
||||
|
||||
const res = await fetch("/api/bot/save-config", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ guildId, autoMessage: message })
|
||||
});
|
||||
<br /><br />
|
||||
|
||||
const data = await res.json();
|
||||
document.getElementById("status").textContent = data.success ? "Config sauvegardée ✅" : "Erreur ❌";
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
<small>
|
||||
Variables disponibles :
|
||||
<ul>
|
||||
<li><code>{user}</code> → nom de l'utilisateur</li>
|
||||
<li><code>{mention}</code> → mention de l'utilisateur</li>
|
||||
<li><code>{server}</code> → nom du serveur</li>
|
||||
</ul>
|
||||
</small>
|
||||
|
||||
<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}`;
|
||||
});
|
||||
|
||||
|
||||
const welcomeForm = document.getElementById("welcome-form");
|
||||
welcomeForm.addEventListener("submit", async (e) => {
|
||||
e.preventDefault();
|
||||
const enabled = document.getElementById("welcome-enabled").checked;
|
||||
const channelId = document.getElementById("welcome-channel").value;
|
||||
const message = document.getElementById("welcome-message").value;
|
||||
|
||||
const res = await fetch("/api/bot/save-welcome-config", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({
|
||||
guildId,
|
||||
channelId,
|
||||
welcomeMessage: message,
|
||||
welcomeEnabled: enabled,
|
||||
}),
|
||||
});
|
||||
|
||||
const data = await res.json();
|
||||
document.getElementById("status").textContent = data.success
|
||||
? "Config de bienvenue sauvegardée ✅"
|
||||
: "Erreur ❌";
|
||||
});
|
||||
|
||||
fetch(`/api/bot/get-text-channels/${guildId}`)
|
||||
.then(res => res.json())
|
||||
.then(channels => {
|
||||
const select = document.getElementById("welcome-channel");
|
||||
channels.forEach(channel => {
|
||||
const option = document.createElement("option");
|
||||
option.value = channel.id;
|
||||
option.textContent = `#${channel.name}`;
|
||||
select.appendChild(option);
|
||||
});
|
||||
});
|
||||
|
||||
fetch(`/api/bot/get-welcome-config/${guildId}`)
|
||||
.then(res => res.json())
|
||||
.then(cfg => {
|
||||
document.getElementById("welcome-enabled").checked = cfg.enabled;
|
||||
document.getElementById("welcome-channel").value = cfg.channelId;
|
||||
document.getElementById("welcome-message").value = cfg.message;
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+72
-11
@@ -5,6 +5,9 @@ const session = require("express-session");
|
||||
const fetch = require("cross-fetch"); // fetch compatible Node
|
||||
const path = require("path");
|
||||
|
||||
// importer la DB
|
||||
const db = require("./db");
|
||||
|
||||
// importer le bot
|
||||
const client = require("./bot");
|
||||
|
||||
@@ -130,25 +133,83 @@ app.get("/api/guilds", (req, res) => {
|
||||
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;
|
||||
// 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;
|
||||
|
||||
// Vérifie admin + bot présent
|
||||
const guildValid = userGuilds.find(
|
||||
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 (!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 };
|
||||
if (!isAdmin) {
|
||||
return res.status(403).json({ success: false });
|
||||
}
|
||||
|
||||
res.json({ success: true });
|
||||
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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user