본문 바로가기

정리중인 카테고리/전공 기술

디스코드 봇 특정 메시지에 특정 반응을 추가 선택시 역할 부여



// !경고!

// 본 코드는 최적화가 안된

// 단순 기능 구현 코드입니다.

// 최적화는 스스로!


var Discord = require('discord.js');

var bot = new Discord.Client();


const events = {

MESSAGE_REACTION_ADD: 'messageReactionAdd',

MESSAGE_REACTION_REMOVE: 'messageReactionRemove',

};


bot.on('ready', () => {

console.log('Test bot Ready...');

});


bot.on('message', message =>{

const sender = message.author;

const msg = message.content.toLowerCase();

const prefix = '!';


let role = message.guild.roles.find('name', 'test');

let member = message.member;


console.log(member);


if(msg === prefix + 'getrole'){

member.addRole(role);

} else if(msg === prefix + 'outrole'){

member.removeRole(role);

}

});


bot.on('raw', async event => {

if (!events.hasOwnProperty(event.t)) return;


const { d: data } = event;

const user = bot.users.get(data.user_id);

const channel = bot.channels.get(data.channel_id) || await user.createDM();


//if (channel.messages.has(data.message_id)) return;


const message = await channel.fetchMessage(data.message_id);

const member = message.guild.members.get(data.user_id);

const emojiKey = (data.emoji.id) ? `${data.emoji.name}:${data.emoji.id}` : data.emoji.name;

const reaction = message.reactions.get(emojiKey);


bot.emit(events[event.t], message, user, member, reaction);

});





bot.on('messageReactionAdd', (message, user, member, reaction) => {

if(member){

if(reaction.emoji.name === '😀' && message.id === '당신의 메시지 ID'){

message.guild.member(user.id).addRole('당신의 역할 ID');

console.log(`[Message Reaction Add] ${user.username}(ID:${user.id})`);

//console.log(message.id);

}

} else {

return;

}

});


bot.on('messageReactionRemove', (message, user, member, reaction) => {

if(member){

if(reaction.emoji.name === '😀' && message.id === '당신의 메시지 ID'){

message.guild.member(user.id).removeRole('당신의 역할 ID');

console.log(`[Message Reaction Remove] ${user.username}(ID:${user.id})`);

//console.log(message.id);

}

} else {

return;

}

});


bot.login('당신의 비밀키');