discord_allnight/events/messageReactionAdd.js

41 lines
1.6 KiB
JavaScript

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);
}
}