export default async function messageReactionAddEvent(reaction, user) { try { // 메시지와 리액션 데이터 불러오기 if (reaction.message.partial) await reaction.message.fetch(); if (reaction.partial) await reaction.fetch(); if (user.bot) return; // 봇의 리액션 무시 // 봇이 보낸 메시지인지 확인 if (reaction.message.author.bot) { await reaction.users.remove(user.id); // 리액션 원복 const { emoji } = reaction; const member = reaction.message.guild.members.cache.get(user.id); const roleId = roles[emoji.name]; if (roleId === 'reset') { // 모든 색상 역할 제거를 병렬로 처리 const removeRolesPromises = Object.values(roles) .filter(id => id !== 'reset' && member.roles.cache.has(id)) .map(id => member.roles.remove(id)); await Promise.all(removeRolesPromises); } else if (roleId) { // 먼저 모든 색상 역할 제거 후 선택한 역할 추가 const allRoleIds = Object.values(roles).filter(id => id !== 'reset'); const removeRolesPromises = allRoleIds .filter(id => member.roles.cache.has(id)) .map(id => member.roles.remove(id)); await Promise.all(removeRolesPromises); const role = reaction.message.guild.roles.cache.get(roleId); if (role) { await member.roles.add(role); console.log(`${user.username}에게 ${role.name} 역할이 부여되었습니다.`); } } } } catch (error) { console.error('Error in messageReactionAddEvent:', error); } }