mirror of
https://github.com/veganhacktivists/arabot.git
synced 2025-11-02 22:09:47 +01:00
feat(arabot): add database for bans
This commit is contained in:
parent
16fb194cd3
commit
a40925e9e9
12
prisma/migrations/20221028003502_unban/migration.sql
Normal file
12
prisma/migrations/20221028003502_unban/migration.sql
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- Added the required column `endModId` to the `Ban` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Ban" ADD COLUMN "endModId" TEXT NOT NULL,
|
||||||
|
ADD COLUMN "endTime" TIMESTAMP(3);
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Ban" ADD CONSTRAINT "Ban_endModId_fkey" FOREIGN KEY ("endModId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
8
prisma/migrations/20221028011419_unban_fix/migration.sql
Normal file
8
prisma/migrations/20221028011419_unban_fix/migration.sql
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "Ban" DROP CONSTRAINT "Ban_endModId_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Ban" ALTER COLUMN "endModId" DROP NOT NULL;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Ban" ADD CONSTRAINT "Ban_endModId_fkey" FOREIGN KEY ("endModId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
@ -43,6 +43,7 @@ model User {
|
|||||||
RestrictMod Restrict[] @relation("restMod")
|
RestrictMod Restrict[] @relation("restMod")
|
||||||
BanUser Ban[] @relation("banUser")
|
BanUser Ban[] @relation("banUser")
|
||||||
BanMod Ban[] @relation("banMod")
|
BanMod Ban[] @relation("banMod")
|
||||||
|
BanEndMod Ban[] @relation("endBanMod")
|
||||||
TempBanUser TempBan[] @relation("tbanUser")
|
TempBanUser TempBan[] @relation("tbanUser")
|
||||||
TempBanMod TempBan[] @relation("tbanMod")
|
TempBanMod TempBan[] @relation("tbanMod")
|
||||||
}
|
}
|
||||||
@ -99,14 +100,17 @@ model Restrict {
|
|||||||
}
|
}
|
||||||
|
|
||||||
model Ban {
|
model Ban {
|
||||||
id Int @id @default(autoincrement())
|
id Int @id @default(autoincrement())
|
||||||
user User @relation("banUser", fields: [userId], references: [id])
|
user User @relation("banUser", fields: [userId], references: [id])
|
||||||
userId String
|
userId String
|
||||||
mod User @relation("banMod", fields: [modId], references: [id])
|
mod User @relation("banMod", fields: [modId], references: [id])
|
||||||
modId String
|
modId String
|
||||||
time DateTime @default(now())
|
time DateTime @default(now())
|
||||||
active Boolean @default(true)
|
endMod User? @relation("endBanMod", fields: [endModId], references: [id])
|
||||||
reason String
|
endModId String?
|
||||||
|
endTime DateTime?
|
||||||
|
active Boolean @default(true)
|
||||||
|
reason String
|
||||||
}
|
}
|
||||||
|
|
||||||
model TempBan {
|
model TempBan {
|
||||||
|
|||||||
99
src/utils/database/ban.ts
Normal file
99
src/utils/database/ban.ts
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
export async function addBan(userId: string, modId: string, reason: string) {
|
||||||
|
// Initialise the database connection
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
// Add the user to the database
|
||||||
|
await prisma.ban.create({
|
||||||
|
data: {
|
||||||
|
user: {
|
||||||
|
connect: {
|
||||||
|
id: userId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mod: {
|
||||||
|
connect: {
|
||||||
|
id: modId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
reason,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close the database connection
|
||||||
|
await prisma.$disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function removeBan(userId: string, modId: string) {
|
||||||
|
// Initialise the database connection
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
const ban = await prisma.ban.findFirst({
|
||||||
|
where: {
|
||||||
|
userId,
|
||||||
|
},
|
||||||
|
orderBy: {
|
||||||
|
id: 'desc',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ban === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query to deactivate the specific sus note
|
||||||
|
await prisma.ban.update({
|
||||||
|
where: {
|
||||||
|
id: ban.id,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
endModId: modId,
|
||||||
|
endTime: new Date(),
|
||||||
|
active: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close the database connection
|
||||||
|
await prisma.$disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function checkActive(userId: string) {
|
||||||
|
// Initialise the database connection
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
const ban = await prisma.ban.findFirst({
|
||||||
|
where: {
|
||||||
|
userId,
|
||||||
|
},
|
||||||
|
orderBy: {
|
||||||
|
id: 'desc',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ban === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ban.active;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getReason(userId: string) {
|
||||||
|
// Initialise the database connection
|
||||||
|
const prisma = new PrismaClient();
|
||||||
|
|
||||||
|
const ban = await prisma.ban.findFirst({
|
||||||
|
where: {
|
||||||
|
userId,
|
||||||
|
},
|
||||||
|
orderBy: {
|
||||||
|
id: 'desc',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ban === null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return ban.reason;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user