removed event-chronjobs, used Events in hub-app insteand, added admin Btn to set Discord-User and run Event-completed-workflow. Fixed Bug of wrong participants-count in Event-Modal
This commit is contained in:
57
apps/discord-server/routes/helper.ts
Normal file
57
apps/discord-server/routes/helper.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { DISCORD_ROLES, Event, getPublicUser, Participant, prisma } from "@repo/db";
|
||||
import { Router } from "express";
|
||||
import { changeMemberRoles, getMember } from "routes/member";
|
||||
|
||||
const router: Router = Router();
|
||||
|
||||
export const eventCompleted = (event: Event, participant?: Participant) => {
|
||||
if (!participant) return false;
|
||||
if (event.finisherMoodleCourseId && !participant.finisherMoodleCurseCompleted) return false;
|
||||
if (event.hasPresenceEvents && !participant.attended) return false;
|
||||
return true;
|
||||
};
|
||||
|
||||
router.post("/set-standard-name", async (req, res) => {
|
||||
const { memberId, userId } = req.body;
|
||||
|
||||
const user = await prisma.user.findUnique({
|
||||
where: {
|
||||
id: userId,
|
||||
},
|
||||
});
|
||||
if (!user) {
|
||||
res.status(404).json({ error: "User not found" });
|
||||
return;
|
||||
}
|
||||
const participant = await prisma.participant.findMany({
|
||||
where: {
|
||||
userId: user.id,
|
||||
},
|
||||
include: {
|
||||
Event: true,
|
||||
},
|
||||
});
|
||||
|
||||
let eventRoles: string[] = [];
|
||||
|
||||
participant.forEach(async (p) => {
|
||||
if (!p.Event.discordRoleId) return;
|
||||
if (eventCompleted(p.Event, p)) {
|
||||
await changeMemberRoles(memberId, [p.Event.discordRoleId], "remove");
|
||||
} else {
|
||||
await changeMemberRoles(memberId, [p.Event.discordRoleId], "add");
|
||||
}
|
||||
});
|
||||
|
||||
const publicUser = getPublicUser(user);
|
||||
const member = await getMember(memberId);
|
||||
|
||||
await member.setNickname(`${publicUser.fullName} (${user.publicId})`);
|
||||
const isPilot = user.permissions.includes("PILOT");
|
||||
const isDispatcher = user.permissions.includes("DISPO");
|
||||
|
||||
await changeMemberRoles(memberId, [DISCORD_ROLES.PILOT], isPilot ? "add" : "remove");
|
||||
await changeMemberRoles(memberId, [DISCORD_ROLES.DISPATCHER], isDispatcher ? "add" : "remove");
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -8,7 +8,7 @@ if (!GUILD_ID) {
|
||||
|
||||
const router: Router = Router();
|
||||
|
||||
const getMember = async (memberId: string) => {
|
||||
export const getMember = async (memberId: string) => {
|
||||
const guild = client.guilds.cache.get(GUILD_ID);
|
||||
if (!guild) throw new Error("Guild not found");
|
||||
try {
|
||||
@@ -36,6 +36,27 @@ router.post("/rename", async (req: Request, res: Response) => {
|
||||
}
|
||||
});
|
||||
|
||||
export const changeMemberRoles = async (
|
||||
memberId: string,
|
||||
roleIds: string[],
|
||||
action: "add" | "remove",
|
||||
) => {
|
||||
const member = await getMember(memberId);
|
||||
|
||||
const currentRoleIds = member.roles.cache.map((role) => role.id);
|
||||
const filteredRoleIds =
|
||||
action === "add"
|
||||
? roleIds.filter((id: string) => !currentRoleIds.includes(id))
|
||||
: roleIds.filter((id: string) => currentRoleIds.includes(id));
|
||||
|
||||
if (filteredRoleIds.length === 0) {
|
||||
return { message: `No roles to ${action}` };
|
||||
}
|
||||
|
||||
await member.roles[action](filteredRoleIds);
|
||||
return { message: `Roles ${action}ed successfully` };
|
||||
};
|
||||
|
||||
const handleRoleChange = (action: "add" | "remove") => async (req: Request, res: Response) => {
|
||||
const { roleIds, memberId } = req.body;
|
||||
if (!Array.isArray(roleIds) || !memberId) {
|
||||
@@ -43,26 +64,8 @@ const handleRoleChange = (action: "add" | "remove") => async (req: Request, res:
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const member = await getMember(memberId);
|
||||
|
||||
const currentRoleIds = member.roles.cache.map((role) => role.id);
|
||||
const filteredRoleIds =
|
||||
action === "add"
|
||||
? roleIds.filter((id: string) => !currentRoleIds.includes(id))
|
||||
: roleIds.filter((id: string) => currentRoleIds.includes(id));
|
||||
|
||||
console.log(
|
||||
`Attempting to ${action} roles: ${filteredRoleIds.join(", ")} to member ${member.nickname || member.user.username}`,
|
||||
);
|
||||
// Option to skip if no roles to add/remove
|
||||
if (filteredRoleIds.length === 0) {
|
||||
console.log(`No roles to ${action}`);
|
||||
res.status(200).json({ message: `No roles to ${action}` });
|
||||
return;
|
||||
}
|
||||
|
||||
await member.roles[action](roleIds);
|
||||
res.status(200).json({ message: `Roles ${action}ed successfully` });
|
||||
const result = await changeMemberRoles(memberId, roleIds, action);
|
||||
res.status(200).json(result);
|
||||
} catch (error) {
|
||||
console.error(`Error ${action}ing roles:`, error);
|
||||
res.status(500).json({ error: `Failed to ${action} roles` });
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { Router } from "express";
|
||||
import memberRouter from "./member";
|
||||
import helperRouter from "./helper";
|
||||
|
||||
const router: Router = Router();
|
||||
|
||||
router.use("/member", memberRouter);
|
||||
router.use("/helper", helperRouter);
|
||||
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user