import { Router, Request, Response } from "express"; import client from "modules/discord"; const GUILD_ID = process.env.DISCORD_GUILD_ID; if (!GUILD_ID) { throw new Error("DISCORD_GUILD_ID environment variable is not set."); } const router: Router = Router(); export const getMember = async (memberId: string) => { let guild = client.guilds.cache.get(GUILD_ID); if (!guild) { guild = await client.guilds.fetch(GUILD_ID); } if (!guild) throw new Error("Guild not found"); try { let member = guild.members.cache.get(memberId); if (!member) { member = await guild.members.fetch(memberId); } return member; } catch (error) { console.error("Error fetching member:", error); throw new Error("Member not found"); } }; router.post("/rename", async (req: Request, res: Response) => { const { newName, memberId } = req.body; if (typeof newName !== "string" || !memberId) { res.status(400).json({ error: "Invalid or missing newName or memberId" }); return; } try { const member = await getMember(memberId); await member.setNickname(newName); console.log(`Member ${member.id} renamed to ${newName}`); res.status(200).json({ message: "Member renamed successfully" }); } catch (error) { console.error("Error renaming member:", error); res.status(500).json({ error: "Failed to rename member" }); } }); 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) { res.status(400).json({ error: "Invalid or missing roleIds or memberId" }); return; } try { 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` }); } }; router.post("/add-role", handleRoleChange("add")); router.post("/remove-role", handleRoleChange("remove")); export default router;