Merge pull request #158 from VAR-Virtual-Air-Rescue/staging

Catch Blocks
This commit was merged in pull request #158.
This commit is contained in:
PxlLoewe
2026-02-01 00:19:22 +01:00
committed by GitHub
5 changed files with 106 additions and 78 deletions

View File

@@ -142,73 +142,77 @@ const removeConnectedAircrafts = async () => {
}); });
}; };
const removePermissionsForBannedUsers = async () => { const removePermissionsForBannedUsers = async () => {
const removePermissionsPenaltys = await prisma.penalty.findMany({ try {
where: { const removePermissionsPenaltys = await prisma.penalty.findMany({
removePermissionApplied: false, where: {
User: { removePermissionApplied: false,
DiscordAccount: { isNot: null }, User: {
}, DiscordAccount: { isNot: null },
},
include: {
User: {
include: {
DiscordAccount: true,
FormerDiscordAccounts: true,
}, },
}, },
}, include: {
}); User: {
include: {
const addPermissionsPenaltys = await prisma.penalty.findMany({ DiscordAccount: true,
where: { FormerDiscordAccounts: true,
addPermissionApplied: false, },
User: {
DiscordAccount: { isNot: null },
},
OR: [{ suspended: true }, { until: { lt: new Date().toISOString() } }],
},
include: {
User: {
include: {
DiscordAccount: true,
FormerDiscordAccounts: true,
}, },
}, },
}, });
});
for (const penalty of removePermissionsPenaltys) { const addPermissionsPenaltys = await prisma.penalty.findMany({
const user = penalty.User; where: {
console.log(`Removing roles for user ${user.id} due to penalty ${penalty.id}`); addPermissionApplied: false,
User: {
DiscordAccount: { isNot: null },
},
OR: [{ suspended: true }, { until: { lt: new Date().toISOString() } }],
},
include: {
User: {
include: {
DiscordAccount: true,
FormerDiscordAccounts: true,
},
},
},
});
await changeMemberRoles( for (const penalty of removePermissionsPenaltys) {
user.DiscordAccount!.discordId, const user = penalty.User;
[DISCORD_ROLES.PILOT, DISCORD_ROLES.DISPATCHER], console.log(`Removing roles for user ${user.id} due to penalty ${penalty.id}`);
"remove",
);
for (const formerAccount of user.FormerDiscordAccounts) {
await changeMemberRoles( await changeMemberRoles(
formerAccount.discordId, user.DiscordAccount!.discordId,
[DISCORD_ROLES.PILOT, DISCORD_ROLES.DISPATCHER], [DISCORD_ROLES.PILOT, DISCORD_ROLES.DISPATCHER],
"remove", "remove",
); );
for (const formerAccount of user.FormerDiscordAccounts) {
await changeMemberRoles(
formerAccount.discordId,
[DISCORD_ROLES.PILOT, DISCORD_ROLES.DISPATCHER],
"remove",
);
}
await prisma.penalty.update({
where: { id: penalty.id },
data: { removePermissionApplied: true },
});
} }
await prisma.penalty.update({ for (const penalty of addPermissionsPenaltys) {
where: { id: penalty.id }, console.log(`Restoring roles for user ${penalty.userId} due to penalty ${penalty.id}`);
data: { removePermissionApplied: true }, await setUserStandardNamePermissions({
}); memberId: penalty.User.DiscordAccount!.discordId,
} userId: penalty.userId,
for (const penalty of addPermissionsPenaltys) { });
console.log(`Restoring roles for user ${penalty.userId} due to penalty ${penalty.id}`); await prisma.penalty.update({
await setUserStandardNamePermissions({ where: { id: penalty.id },
memberId: penalty.User.DiscordAccount!.discordId, data: { addPermissionApplied: true },
userId: penalty.userId, });
}); }
await prisma.penalty.update({ } catch (error) {
where: { id: penalty.id }, console.error("Error removing permissions for banned users:", error);
data: { addPermissionApplied: true },
});
} }
}; };

View File

@@ -66,6 +66,8 @@ export const setUserStandardNamePermissions = async ({
const publicUser = getPublicUser(user); const publicUser = getPublicUser(user);
const member = await getMember(memberId); const member = await getMember(memberId);
if (!member) throw new Error("Member not found");
await member.setNickname(`${publicUser.fullName} - ${user.publicId}`); await member.setNickname(`${publicUser.fullName} - ${user.publicId}`);
const isPilot = user.permissions.includes("PILOT"); const isPilot = user.permissions.includes("PILOT");
const isDispatcher = user.permissions.includes("DISPO"); const isDispatcher = user.permissions.includes("DISPO");
@@ -79,10 +81,14 @@ export const setUserStandardNamePermissions = async ({
}; };
router.post("/set-standard-name", async (req, res) => { router.post("/set-standard-name", async (req, res) => {
const { memberId, userId } = req.body; try {
const { memberId, userId } = req.body;
await setUserStandardNamePermissions({ memberId, userId }); await setUserStandardNamePermissions({ memberId, userId });
res.status(200).json({ message: "Standard name and permissions set" }); res.status(200).json({ message: "Standard name and permissions set" });
} catch (error) {
res.status(500).json({ error: (error as unknown as Error).message });
}
}); });
export default router; export default router;

View File

@@ -20,12 +20,12 @@ export const getMember = async (memberId: string) => {
try { try {
let member = guild.members.cache.get(memberId); let member = guild.members.cache.get(memberId);
if (!member) { if (!member) {
member = await guild.members.fetch(memberId); member = await guild.members.fetch(memberId).catch((e) => undefined);
} }
return member; return member;
} catch (error) { } catch (error) {
console.error("Error fetching member:", error); console.error("Error fetching member:", error);
throw new Error("Member not found"); return null;
} }
}; };
@@ -37,6 +37,10 @@ router.post("/rename", async (req: Request, res: Response) => {
} }
try { try {
const member = await getMember(memberId); const member = await getMember(memberId);
if (!member) {
res.status(404).json({ error: "Member not found" });
return;
}
await member.setNickname(newName); await member.setNickname(newName);
console.log(`Member ${member.id} renamed to ${newName}`); console.log(`Member ${member.id} renamed to ${newName}`);
res.status(200).json({ message: "Member renamed successfully" }); res.status(200).json({ message: "Member renamed successfully" });
@@ -52,6 +56,9 @@ export const changeMemberRoles = async (
action: "add" | "remove", action: "add" | "remove",
) => { ) => {
const member = await getMember(memberId); const member = await getMember(memberId);
if (!member) {
throw new Error("Member not found");
}
const currentRoleIds = member.roles.cache.map((role) => role.id); const currentRoleIds = member.roles.cache.map((role) => role.id);
const filteredRoleIds = const filteredRoleIds =

View File

@@ -54,7 +54,7 @@ import {
} from "lucide-react"; } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
import { ColumnDef } from "@tanstack/react-table"; import { ColumnDef } from "@tanstack/react-table";
import { Error } from "_components/Error"; import { Error as ErrorComponent } from "_components/Error";
import { useSession } from "next-auth/react"; import { useSession } from "next-auth/react";
import { setStandardName } from "../../../../../../helper/discord"; import { setStandardName } from "../../../../../../helper/discord";
import { penaltyColumns } from "(app)/admin/penalty/columns"; import { penaltyColumns } from "(app)/admin/penalty/columns";
@@ -73,7 +73,7 @@ export const ProfileForm: React.FC<ProfileFormProps> = ({ user }: ProfileFormPro
defaultValues: user, defaultValues: user,
resolver: zodResolver(UserOptionalDefaultsSchema), resolver: zodResolver(UserOptionalDefaultsSchema),
}); });
if (!user) return <Error title="User not found" statusCode={404} />; if (!user) return <ErrorComponent title="User not found" statusCode={404} />;
return ( return (
<form <form
className="card-body" className="card-body"
@@ -663,16 +663,25 @@ export const AdminForm = ({
> >
<Button <Button
onClick={async () => { onClick={async () => {
await setStandardName({ try {
memberId: discordAccount.discordId, const response = await setStandardName({
userId: user.id, memberId: discordAccount.discordId,
}); userId: user.id,
toast.success("Standard Name wurde gesetzt!", { });
style: { if (response?.error) {
background: "var(--color-base-100)", throw new Error(response.error);
color: "var(--color-base-content)", }
}, toast.success("Standard Name wurde gesetzt!", {
}); style: {
background: "var(--color-base-100)",
color: "var(--color-base-content)",
},
});
} catch (error) {
toast.error(
"Fehler beim setzen des Standard Namens: " + (error as Error).message,
);
}
}} }}
className="btn-sm btn-outline btn-info w-full" className="btn-sm btn-outline btn-info w-full"
> >

View File

@@ -1,5 +1,5 @@
"use server"; "use server";
import axios from "axios"; import axios, { AxiosError } from "axios";
const discordAxiosClient = axios.create({ const discordAxiosClient = axios.create({
baseURL: process.env.CORE_SERVER_URL || "http://localhost:3005", baseURL: process.env.CORE_SERVER_URL || "http://localhost:3005",
@@ -55,12 +55,14 @@ export const setStandardName = async ({
memberId: string; memberId: string;
userId: string; userId: string;
}) => { }) => {
discordAxiosClient try {
.post("/helper/set-standard-name", { await discordAxiosClient.post("/helper/set-standard-name", {
memberId, memberId,
userId, userId,
})
.catch((error) => {
console.error("Error removing roles from member:", error);
}); });
} catch (error) {
return {
error: (error as AxiosError<{ error: string }>).response?.data.error || "Unknown error",
};
}
}; };