Catch Blocks #158

Merged
PxlLoewe merged 2 commits from staging into release 2026-01-31 23:19:22 +00:00
5 changed files with 106 additions and 78 deletions

View File

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

View File

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

View File

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

View File

@@ -54,7 +54,7 @@ import {
} from "lucide-react";
import Link from "next/link";
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 { setStandardName } from "../../../../../../helper/discord";
import { penaltyColumns } from "(app)/admin/penalty/columns";
@@ -73,7 +73,7 @@ export const ProfileForm: React.FC<ProfileFormProps> = ({ user }: ProfileFormPro
defaultValues: user,
resolver: zodResolver(UserOptionalDefaultsSchema),
});
if (!user) return <Error title="User not found" statusCode={404} />;
if (!user) return <ErrorComponent title="User not found" statusCode={404} />;
return (
<form
className="card-body"
@@ -663,16 +663,25 @@ export const AdminForm = ({
>
<Button
onClick={async () => {
await setStandardName({
memberId: discordAccount.discordId,
userId: user.id,
});
toast.success("Standard Name wurde gesetzt!", {
style: {
background: "var(--color-base-100)",
color: "var(--color-base-content)",
},
});
try {
const response = await setStandardName({
memberId: discordAccount.discordId,
userId: user.id,
});
if (response?.error) {
throw new Error(response.error);
}
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"
>

View File

@@ -1,5 +1,5 @@
"use server";
import axios from "axios";
import axios, { AxiosError } from "axios";
const discordAxiosClient = axios.create({
baseURL: process.env.CORE_SERVER_URL || "http://localhost:3005",
@@ -55,12 +55,14 @@ export const setStandardName = async ({
memberId: string;
userId: string;
}) => {
discordAxiosClient
.post("/helper/set-standard-name", {
try {
await discordAxiosClient.post("/helper/set-standard-name", {
memberId,
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",
};
}
};