mirror of
https://github.com/veganhacktivists/arabot.git
synced 2025-05-19 01:14:16 +02:00
307 lines
10 KiB
Plaintext
307 lines
10 KiB
Plaintext
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
// Animal Rights Advocates Discord Bot
|
|
// Copyright (C) 2022 Anthony Berg
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
model User {
|
|
id String @id @db.VarChar(255)
|
|
vegan Boolean @default(false)
|
|
trusted Boolean @default(false)
|
|
activist Boolean @default(false)
|
|
plus Boolean @default(false)
|
|
notVegan Boolean @default(false)
|
|
vegCurious Boolean @default(false)
|
|
convinced Boolean @default(false)
|
|
muted Boolean @default(false)
|
|
VerifyUser Verify[] @relation("verUser")
|
|
VerifyVerifier Verify[] @relation("verVerifier")
|
|
Xp Xp?
|
|
Balance Balance?
|
|
Daily Daily[]
|
|
SendPayment Payment[] @relation("sendPayment")
|
|
RecievePayment Payment[] @relation("recievePayment")
|
|
LeaveLog LeaveLog[]
|
|
UserRoleLog RoleLog[] @relation("userRoleLog")
|
|
ModRoleLog RoleLog[] @relation("modRoleLog")
|
|
FunLogSender FunLog[] @relation("sendFunLog")
|
|
FunLogReciever FunLog[] @relation("receiveFunLog")
|
|
EventLeader Event[] @relation("eventLeader")
|
|
StatLeader Stat[] @relation("statLeader")
|
|
OutreachParticipation ParticipantStat[] @relation("participantUser")
|
|
SusUser Sus[] @relation("susUser")
|
|
SusMod Sus[] @relation("susMod")
|
|
WarnUser Warning[] @relation("warnUser")
|
|
WarnMod Warning[] @relation("warnMod")
|
|
RestrictUser Restrict[] @relation("restUser")
|
|
RestrictMod Restrict[] @relation("restMod")
|
|
RestrictEndMod Restrict[] @relation("endRestMod")
|
|
BanUser Ban[] @relation("banUser")
|
|
BanMod Ban[] @relation("banMod")
|
|
BanEndMod Ban[] @relation("endBanMod")
|
|
TempBanUser TempBan[] @relation("tbanUser")
|
|
TempBanMod TempBan[] @relation("tbanMod")
|
|
TempBanEndMod TempBan[] @relation("endTbanMod")
|
|
VCMuteUser VCMute[] @relation("vcMuteUser")
|
|
VCMuteMod VCMute[] @relation("vcMuteMod")
|
|
}
|
|
|
|
model Verify {
|
|
id String @id
|
|
user User @relation("verUser", fields: [userId], references: [id])
|
|
userId String
|
|
verifier User? @relation("verVerifier", fields: [verifierId], references: [id])
|
|
verifierId String?
|
|
joinTime DateTime @default(now())
|
|
startTime DateTime?
|
|
finishTime DateTime?
|
|
manual Boolean @default(false) // If they were verified with the verify command
|
|
timedOut Boolean @default(false) // If they got kicked out of verification because they timed out
|
|
// complete Boolean @default(false) // If the verification was incomplete
|
|
// Roles they got from verification
|
|
vegan Boolean @default(false) // If they got verified as a vegan
|
|
activist Boolean @default(false) // If they got the activist role when they verified
|
|
trusted Boolean @default(false) // If they got the trusted role when they verified
|
|
vegCurious Boolean @default(false) // If they got the Veg Curious role
|
|
convinced Boolean @default(false)
|
|
text Boolean @default(false) // If they used text verification
|
|
serverVegan Boolean @default(false) // People that went vegan on the server
|
|
// Stats on verification
|
|
reason Int?
|
|
where Int?
|
|
length Int?
|
|
reasoning Int?
|
|
life Int?
|
|
food Int?
|
|
notes String?
|
|
}
|
|
|
|
model Xp {
|
|
user User @relation(fields: [userId], references: [id])
|
|
userId String @id
|
|
level Int @default(0)
|
|
xp Int @default(0)
|
|
xpForNextLevel Int @default(0)
|
|
messageCount Int @default(0)
|
|
lastMessage DateTime @default(now())
|
|
}
|
|
|
|
// Economy
|
|
|
|
model Balance {
|
|
user User @relation(fields: [userId], references: [id])
|
|
userId String @id
|
|
balance Int
|
|
}
|
|
|
|
model Daily {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation(fields: [userId], references: [id])
|
|
userId String
|
|
amount Int
|
|
time DateTime @default(now())
|
|
}
|
|
|
|
model Payment {
|
|
id Int @id @default(autoincrement())
|
|
sender User @relation("sendPayment", fields: [senderId], references: [id])
|
|
senderId String
|
|
recipient User @relation("recievePayment", fields: [recipientId], references: [id])
|
|
recipientId String
|
|
amount Int
|
|
reason String
|
|
time DateTime @default(now())
|
|
}
|
|
|
|
// Tracking roles for leaving the server
|
|
|
|
model LeaveLog {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation(fields: [userId], references: [id])
|
|
userId String
|
|
time DateTime @default(now())
|
|
roles String[]
|
|
}
|
|
|
|
model RoleLog {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("userRoleLog", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("modRoleLog", fields: [modId], references: [id])
|
|
modId String
|
|
role Role @relation(fields: [roleId], references: [id])
|
|
roleId String
|
|
add Boolean @default(false)
|
|
time DateTime @default(now())
|
|
}
|
|
|
|
model Role {
|
|
id String @id
|
|
name String
|
|
staff Boolean
|
|
RoleLog RoleLog[]
|
|
}
|
|
|
|
model FunLog {
|
|
id Int @id @default(autoincrement())
|
|
sendUser User @relation("sendFunLog", fields: [sendUserId], references: [id])
|
|
sendUserId String
|
|
receiveUser User? @relation("receiveFunLog", fields: [receiveUserId], references: [id])
|
|
receiveUserId String?
|
|
type FunType @relation(fields: [typeId], references: [id])
|
|
typeId Int
|
|
}
|
|
|
|
model FunType {
|
|
id Int @id @default(autoincrement())
|
|
name String @unique
|
|
FunLog FunLog[]
|
|
}
|
|
|
|
// Outreach
|
|
|
|
model Event {
|
|
id Int @id @default(autoincrement())
|
|
type EventType @relation(fields: [eventType], references: [type])
|
|
eventType String
|
|
leader User @relation("eventLeader", fields: [leaderId], references: [id]) // Not sure if this will stay
|
|
leaderId String
|
|
startTime DateTime @default(now())
|
|
endTime DateTime?
|
|
stats Stat[]
|
|
}
|
|
|
|
model EventType {
|
|
type String @id
|
|
Event Event[]
|
|
}
|
|
|
|
model Stat {
|
|
id Int @id @default(autoincrement())
|
|
event Event @relation(fields: [eventId], references: [id])
|
|
eventId Int
|
|
leader User @relation("statLeader", fields: [leaderId], references: [id]) // Not sure if this will stay
|
|
leaderId String
|
|
vegan Int @default(0)
|
|
considered Int @default(0)
|
|
antivegan Int @default(0)
|
|
thanked Int @default(0)
|
|
documentary Int @default(0)
|
|
educated Int @default(0)
|
|
participants ParticipantStat[]
|
|
role StatRole?
|
|
}
|
|
|
|
model StatRole {
|
|
stat Stat @relation(fields: [statId], references: [id])
|
|
statId Int @id
|
|
roleId String
|
|
}
|
|
|
|
model ParticipantStat {
|
|
stat Stat @relation(fields: [statId], references: [id])
|
|
statId Int
|
|
user User @relation("participantUser", fields: [userId], references: [id])
|
|
userId String
|
|
|
|
@@id([statId, userId])
|
|
}
|
|
|
|
// Moderation
|
|
|
|
model Sus {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("susUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("susMod", fields: [modId], references: [id])
|
|
modId String
|
|
time DateTime @default(now())
|
|
active Boolean @default(true)
|
|
note String
|
|
}
|
|
|
|
model Warning {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("warnUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("warnMod", fields: [modId], references: [id])
|
|
modId String
|
|
time DateTime @default(now())
|
|
active Boolean @default(true)
|
|
note String
|
|
}
|
|
|
|
model Restrict {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("restUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("restMod", fields: [modId], references: [id])
|
|
modId String
|
|
startTime DateTime @default(now())
|
|
endMod User? @relation("endRestMod", fields: [endModId], references: [id])
|
|
endModId String?
|
|
endTime DateTime?
|
|
reason String
|
|
section Int
|
|
}
|
|
|
|
model Ban {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("banUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("banMod", fields: [modId], references: [id])
|
|
modId String
|
|
time DateTime @default(now())
|
|
endMod User? @relation("endBanMod", fields: [endModId], references: [id])
|
|
endModId String?
|
|
endTime DateTime?
|
|
active Boolean @default(true)
|
|
reason String
|
|
}
|
|
|
|
model TempBan {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("tbanUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("tbanMod", fields: [modId], references: [id])
|
|
modId String
|
|
startTime DateTime @default(now())
|
|
endMod User? @relation("endTbanMod", fields: [endModId], references: [id])
|
|
endModId String?
|
|
endTime DateTime
|
|
active Boolean @default(true)
|
|
reason String
|
|
}
|
|
|
|
model VCMute {
|
|
id Int @id @default(autoincrement())
|
|
user User @relation("vcMuteUser", fields: [userId], references: [id])
|
|
userId String
|
|
mod User @relation("vcMuteMod", fields: [modId], references: [id])
|
|
modId String
|
|
time DateTime @default(now())
|
|
endTime DateTime?
|
|
reason String?
|
|
}
|