diff --git a/apps/dispatch-server/helper.ts b/apps/dispatch-server/helper.ts new file mode 100644 index 00000000..b06310be --- /dev/null +++ b/apps/dispatch-server/helper.ts @@ -0,0 +1,32 @@ +import { prisma } from "@repo/db"; + +export const getUserPenaltys = async (userId: string) => { + const openTimeban = await prisma.penalty.findMany({ + where: { + userId: userId, + until: { + gte: new Date(), + }, + suspended: false, + type: "TIME_BAN", + }, + include: { + CreatedUser: true, + }, + }); + + const openBans = await prisma.penalty.findMany({ + where: { + userId: userId, + suspended: false, + type: "BAN", + }, + include: { + CreatedUser: true, + }, + }); + return { + openTimeban, + openBans, + }; +}; diff --git a/apps/dispatch-server/socket-events/connect-dispatch.ts b/apps/dispatch-server/socket-events/connect-dispatch.ts index f2acb6c9..1eabd15a 100644 --- a/apps/dispatch-server/socket-events/connect-dispatch.ts +++ b/apps/dispatch-server/socket-events/connect-dispatch.ts @@ -3,6 +3,7 @@ import { addRolesToMember, removeRolesFromMember, renameMember } from "modules/d import { getNextDateWithTime } from "@repo/shared-components"; import { DISCORD_ROLES } from "@repo/db"; import { Server, Socket } from "socket.io"; +import { getUserPenaltys } from "helper"; export const handleConnectDispatch = (socket: Socket, io: Server) => @@ -28,8 +29,17 @@ export const handleConnectDispatch = return; } - if (!user.permissions?.includes("DISPO")) { - socket.emit("error", "You do not have permission to connect to the dispatch server."); + const userPenaltys = await getUserPenaltys(user.id); + + if ( + userPenaltys.openTimeban.length > 0 || + user.isBanned || + userPenaltys.openBans.length > 0 + ) { + socket.emit("connect-message", { + message: "Du hast eine aktive Strafe und kannst dich deshalb nicht verbinden.", + }); + socket.disconnect(); return; } diff --git a/apps/dispatch-server/socket-events/connect-pilot.ts b/apps/dispatch-server/socket-events/connect-pilot.ts index 07c15850..94d18eb6 100644 --- a/apps/dispatch-server/socket-events/connect-pilot.ts +++ b/apps/dispatch-server/socket-events/connect-pilot.ts @@ -3,6 +3,7 @@ import { addRolesToMember, removeRolesFromMember, renameMember } from "modules/d import { getNextDateWithTime } from "@repo/shared-components"; import { DISCORD_ROLES } from "@repo/db"; import { Server, Socket } from "socket.io"; +import { getUserPenaltys } from "helper"; export const handleConnectPilot = (socket: Socket, io: Server) => @@ -34,6 +35,19 @@ export const handleConnectPilot = socket.disconnect(); return; } + const userPenaltys = await getUserPenaltys(userId); + + if ( + userPenaltys.openTimeban.length > 0 || + user.isBanned || + userPenaltys.openBans.length > 0 + ) { + socket.emit("connect-message", { + message: "Du hast eine aktive Strafe und kannst dich deshalb nicht verbinden.", + }); + socket.disconnect(); + return; + } if (!user) return Error("User not found");