/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */ import { GuildMember, Role } from "discord.js"; import prisma from "../database/prisma"; import { log, LogLevel, logUnexpectedDiscordAPIError } from "../utilities"; export class RolePersistenceService { static async saveUserRoles(member: GuildMember): Promise { try { const userId = member.user.id; const guildId = member.guild.id; const roles = member.roles.cache.filter( (role) => role.id !== member.guild.id, ); if (roles.size === 0) return; await prisma.userRole.deleteMany({ where: { userId, guildId, }, }); const roleData = Array.from(roles.keys()).map((roleId) => ({ userId, guildId, roleId, })); await prisma.userRole.createMany({ data: roleData, }); } catch (error) { logUnexpectedDiscordAPIError(error); } } static async restoreUserRoles(member: GuildMember): Promise { try { const userId = member.user.id; const guildId = member.guild.id; const savedRoles = await prisma.userRole.findMany({ where: { userId, guildId, }, }); if (savedRoles.length === 0) return; const validRoles: Role[] = []; for (const savedRole of savedRoles) { const role = member.guild.roles.cache.get(savedRole.roleId); if (role && role.id !== member.guild.id) validRoles.push(role); } if (validRoles.length === 0) { await prisma.userRole.deleteMany({ where: { userId, guildId, }, }); return; } await member.roles.add(validRoles); await prisma.userRole.deleteMany({ where: { userId, guildId, }, }); } catch (error) { logUnexpectedDiscordAPIError(error); } } static async clearUserRoles(userId: string, guildId: string): Promise { try { await prisma.userRole.deleteMany({ where: { userId, guildId, }, }); } catch (error) { logUnexpectedDiscordAPIError(error); } } static async getSavedRoles( userId: string, guildId: string, ): Promise { try { const savedRoles = await prisma.userRole.findMany({ where: { userId, guildId, }, select: { roleId: true, }, }); return savedRoles.map((role: { roleId: string }) => role.roleId); } catch (error) { logUnexpectedDiscordAPIError(error); return []; } } }