feat(build): add leave logs

This commit is contained in:
smyalygames 2023-03-01 15:15:06 +00:00
parent 158c76c17e
commit 005c190582
4 changed files with 52 additions and 11 deletions

View File

@ -0,0 +1,12 @@
-- CreateTable
CREATE TABLE "LeaveLog" (
"id" SERIAL NOT NULL,
"userId" TEXT NOT NULL,
"time" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"roles" TEXT[],
CONSTRAINT "LeaveLog_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "LeaveLog" ADD CONSTRAINT "LeaveLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -37,6 +37,7 @@ model User {
muted Boolean @default(false) muted Boolean @default(false)
VerifyUser Verify[] @relation("verUser") VerifyUser Verify[] @relation("verUser")
VerifyVerifier Verify[] @relation("verVerifier") VerifyVerifier Verify[] @relation("verVerifier")
LeaveLog LeaveLog[]
EventLeader Event[] @relation("eventLeader") EventLeader Event[] @relation("eventLeader")
StatLeader Stat[] @relation("statLeader") StatLeader Stat[] @relation("statLeader")
OutreachParticipation ParticipantStat[] @relation("participantUser") OutreachParticipation ParticipantStat[] @relation("participantUser")
@ -87,6 +88,14 @@ model Verify {
notes String? notes String?
} }
model LeaveLog {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId String
time DateTime @default(now())
roles String[]
}
model Event { model Event {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
type EventType @relation(fields: [eventType], references: [type]) type EventType @relation(fields: [eventType], references: [type])

View File

@ -20,10 +20,12 @@
import { Listener } from '@sapphire/framework'; import { Listener } from '@sapphire/framework';
import type { GuildMember } from 'discord.js'; import type { GuildMember } from 'discord.js';
import IDs from '#utils/ids'; import IDs from '#utils/ids';
import { updateUser } from '#utils/database/dbExistingUser'; import {
import { checkBan } from '#utils/database/ban'; addEmptyUser,
import { checkTempBan } from '#utils/database/tempBan'; logLeaving,
import { checkActive } from '#utils/database/restriction'; updateUser,
userExists,
} from '#utils/database/dbExistingUser';
export class DbLeaveServerListener extends Listener { export class DbLeaveServerListener extends Listener {
public constructor(context: Listener.Context, options: Listener.Options) { public constructor(context: Listener.Context, options: Listener.Options) {
@ -37,14 +39,12 @@ export class DbLeaveServerListener extends Listener {
if (!member.roles.cache.hasAny( if (!member.roles.cache.hasAny(
IDs.roles.vegan.vegan, IDs.roles.vegan.vegan,
IDs.roles.nonvegan.nonvegan, IDs.roles.nonvegan.nonvegan,
) )) {
|| await checkBan(member.id) await updateUser(member);
|| await checkTempBan(member.id) } else if (await userExists(member.id)) {
|| await checkActive(member.id) await addEmptyUser(member.id);
) {
return;
} }
await updateUser(member); await logLeaving(member);
} }
} }

View File

@ -181,3 +181,23 @@ export async function fetchRoles(userId: Snowflake) {
return roles; return roles;
} }
export async function logLeaving(member: GuildMember) {
const roles: Snowflake[] = [];
member.roles.cache.forEach((role) => {
if (role.id !== member.guild.id) {
roles.push(role.id);
}
});
await container.database.leaveLog.create({
data: {
user: {
connect: {
id: member.id,
},
},
roles,
},
});
}