Files
Discord_bot/services/moderationRecords.js
T

92 lines
2.1 KiB
JavaScript

const { connectToDatabase } = require('../db');
const MODERATION_COLLECTION = 'moderation_records';
const getModerationCollection = async () => {
const client = await connectToDatabase();
return client.db('discord').collection(MODERATION_COLLECTION);
};
const updateStrikes = async ({ guildId, userId, strikes }) => {
const collection = await getModerationCollection();
const now = new Date();
return collection.findOneAndUpdate(
{ guildId, userId },
{
$set: {
strikes,
lastWarnedAt: now,
updatedAt: now,
},
$setOnInsert: {
guildId,
userId,
actions: [],
createdAt: now,
},
},
{ upsert: true, returnDocument: 'after' },
);
};
const recordModerationAction = async ({
guildId,
userId,
action,
moderatorId,
reason,
metadata = {},
stateUpdates = {},
}) => {
const collection = await getModerationCollection();
const now = new Date();
const actionEntry = {
action,
moderatorId,
reason,
metadata,
createdAt: now,
};
return collection.findOneAndUpdate(
{ guildId, userId },
{
$push: { actions: actionEntry },
$set: {
lastAction: action,
lastActionAt: now,
updatedAt: now,
...stateUpdates,
},
$setOnInsert: {
guildId,
userId,
strikes: 0,
createdAt: now,
},
},
{ upsert: true, returnDocument: 'after' },
);
};
const clearBanStatus = async ({ guildId, userId }) =>
recordModerationAction({
guildId,
userId,
action: 'unban',
moderatorId: null,
reason: 'Temporary ban expired',
metadata: {},
stateUpdates: {
isBanned: false,
bannedUntil: null,
},
});
module.exports = {
updateStrikes,
recordModerationAction,
clearBanStatus,
};