Moderation Update
This commit is contained in:
@@ -41,6 +41,22 @@ async function ensureSchema() {
|
||||
data JSONB DEFAULT '{}'
|
||||
);
|
||||
`);
|
||||
|
||||
await p.query(`
|
||||
CREATE TABLE IF NOT EXISTS admin_logs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
guild_id TEXT NOT NULL,
|
||||
action TEXT NOT NULL, -- 'kick', 'ban', 'timeout'
|
||||
target_user_id TEXT NOT NULL,
|
||||
target_username TEXT NOT NULL,
|
||||
moderator_user_id TEXT NOT NULL,
|
||||
moderator_username TEXT NOT NULL,
|
||||
reason TEXT NOT NULL,
|
||||
duration TEXT, -- for timeout/ban (e.g., '1d', '30m', 'permanent')
|
||||
end_date TIMESTAMP WITH TIME ZONE, -- calculated end date for timeout/ban
|
||||
timestamp TIMESTAMP WITH TIME ZONE DEFAULT now()
|
||||
);
|
||||
`);
|
||||
}
|
||||
|
||||
// Servers
|
||||
@@ -76,6 +92,46 @@ async function deleteInvite(guildId, code) {
|
||||
await p.query('DELETE FROM invites WHERE guild_id = $1 AND code = $2', [guildId, code]);
|
||||
}
|
||||
|
||||
// Admin Logs
|
||||
async function addAdminLog(logData) {
|
||||
const p = initPool();
|
||||
const q = `INSERT INTO admin_logs(guild_id, action, target_user_id, target_username, moderator_user_id, moderator_username, reason, duration, end_date)
|
||||
VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9)`;
|
||||
await p.query(q, [
|
||||
logData.guildId,
|
||||
logData.action,
|
||||
logData.targetUserId,
|
||||
logData.targetUsername,
|
||||
logData.moderatorUserId,
|
||||
logData.moderatorUsername,
|
||||
logData.reason,
|
||||
logData.duration || null,
|
||||
logData.endDate || null
|
||||
]);
|
||||
}
|
||||
|
||||
async function getAdminLogs(guildId, limit = 50) {
|
||||
const p = initPool();
|
||||
const res = await p.query('SELECT * FROM admin_logs WHERE guild_id = $1 ORDER BY timestamp DESC LIMIT $2', [guildId, limit]);
|
||||
return res.rows;
|
||||
}
|
||||
|
||||
async function getAdminLogsByAction(guildId, action, limit = 50) {
|
||||
const p = initPool();
|
||||
const res = await p.query('SELECT * FROM admin_logs WHERE guild_id = $1 AND action = $2 ORDER BY timestamp DESC LIMIT $3', [guildId, action, limit]);
|
||||
return res.rows;
|
||||
}
|
||||
|
||||
async function deleteAdminLog(guildId, logId) {
|
||||
const p = initPool();
|
||||
await p.query('DELETE FROM admin_logs WHERE guild_id = $1 AND id = $2', [guildId, logId]);
|
||||
}
|
||||
|
||||
async function deleteAllAdminLogs(guildId) {
|
||||
const p = initPool();
|
||||
await p.query('DELETE FROM admin_logs WHERE guild_id = $1', [guildId]);
|
||||
}
|
||||
|
||||
// Users
|
||||
async function getUserData(discordId) {
|
||||
const p = initPool();
|
||||
@@ -89,4 +145,4 @@ async function upsertUserData(discordId, data) {
|
||||
await p.query(`INSERT INTO users(discord_id, data) VALUES($1, $2) ON CONFLICT (discord_id) DO UPDATE SET data = $2`, [discordId, data]);
|
||||
}
|
||||
|
||||
module.exports = { initPool, ensureSchema, getServerSettings, upsertServerSettings, listInvites, addInvite, deleteInvite, getUserData, upsertUserData };
|
||||
module.exports = { initPool, ensureSchema, getServerSettings, upsertServerSettings, listInvites, addInvite, deleteInvite, getUserData, upsertUserData, addAdminLog, getAdminLogs, getAdminLogsByAction, deleteAdminLog, deleteAllAdminLogs };
|
||||
|
||||
Reference in New Issue
Block a user