41 lines
1.6 KiB
JavaScript
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);
|
|
}
|
|
} |