독도갈매기의 개발 블로그

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -5- 메시지의 이모티콘을 확인하자! -1- 본문

Node.js

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -5- 메시지의 이모티콘을 확인하자! -1-

독도갈매기 2020. 11. 30. 20:00

이 포스팅은 Node.js로 디스코드 봇을 만들 수 있다고!? 시리즈 -4- 봇의 설명을 넣어보자에서 이어지는 포스팅입니다.
전 포스팅을 읽지 않으셨다면 읽고 오시는 것을 권장드립니다.

오늘의 목표

사용자가 보낸 메시지의 Thumbs up Emoji를 눌렀을 때 콘솔에 출력해보려고 합니다.
image

index.js

const { token } = require('./token'); // token 값을 따로 js파일을 만들어주고 module.exports를 사용하여 token이 코드에 노출되는 것을 조금이라도 방지합니다.
const discord = require('discord.js'); // discord.js를 import 해줍니다.
const app = new discord.Client(); // discord.Client 인스턴스 생성

app.on('ready', () => { // 여기서 사용되는 Arrow Function은 콜백함수입니다.
    console.log(`I am Ready ${app.user.tag}`); // Bot이 준비가 되면 실행할 콜백함수입니다.
});

app.on('messageReactionAdd', (msg, user) => { // messageReactionAdd : 메시지의 Reaction이 추가되었을 때의 이벤트
    let Ddabong = (msg.emoji.name == '👍') ? '따봉' : '아님';
    console.log(`emoji ${Ddabong}, test : ${msg.emoji.name}`);
});

app.on('message', msg => {
    // !avatar
    if(msg.content === '!avatar') msg.channel.send(msg.author.displayAvatarURL()); // 메세지를 보낸 유저의 프로필 사진을 받아옵니다.

    // !help
    if(msg.content === '!help') {
        // 저희는 MessageEmbed 생성자로 embed를 생성할 수 있습니다.
        const embed = new discord.MessageEmbed()
        .setTitle("이것은 embed 타이틀입니다.") // 1 - embed의 제목을 담당합니다.
        .setColor('0f4c81') // 2 - embed 사이드 바의 색을 정합니다.
        .setDescription('안녕하세요! 이곳은 설명입니다.'); // 3 - 실제로 설명을 담당하는 곳입니다.

        msg.channel.send(embed);
    }

    // !but
    if(msg.content === '!but') {
        const emoji = new discord.MessageAttachment('https://mblogthumb-phinf.pstatic.net/MjAxOTEwMTVfMTE2/MDAxNTcxMTQ0MjIwODE4.Yd4D6HvDtIQ600HpJJJbadGBT8aVJ91nQ4OUp6jd7oYg.uvrak7O9UOuiIKfWDh7KG906yeEYBSptki2qdXw__YMg.PNG.azzi_01/01_.png?type=w800'); // 첨부파일 링크를 줍니다.

        msg.channel.send(emoji); // 위에서 선언한 emoji 전송
    }

    // !ping 
    if(msg.content === '!ping') msg.channel.send(`pong!`); // 채팅에서 메세지가 들어왔을 때 실행할 콜백함수입니다.
});

app.login(token); // Bot의 토큰을 받아주세요. 0편에서 받은 봇의 토큰으로 로그인하는 코드입니다.

5번줄과 9번줄에서 사용한 app.on('이벤트', (인자) => {})을 사용하면 여러가지 이벤트를 처리할 수 있습니다.
5번줄에서는 봇이 준비가 되었을 때를 의미하며, 9번줄에서는 누군가의 메시지의 Reaction(반응)이 추가 되었을 때를 의미합니다.

messageReactionAdd 이벤트에서 넘어오는 인자는 message(이하 msg로 통일), user가 넘어옵니다.
이중 msg에 emoji name property가 들어 있기에 msg.emoji.name으로 👍과 비교해줍니다.
비교 했을 때 👍이 맞다면 아래 있는 삼항연산자를 활용해 Ddabong에 '따봉'을 아니라면 '아님'을 담는 코드가 실행됩니다.

그 후 위에 있는 사진처럼 console에 log가 남습니다. 이번 포스팅에서는 ReactionAdd를 알아봤으니
다음에는 ReactionRemove를 알아보겠습니다. 시간이 있을때마다 글 써보겠습니다. 감사합니다!

추가된 코드

const { token } = require('./token'); // token 값을 따로 js파일을 만들어주고 module.exports를 사용하여 token이 코드에 노출되는 것을 조금이라도 방지합니다.
const discord = require('discord.js'); // discord.js를 import 해줍니다.
const app = new discord.Client(); // discord.Client 인스턴스 생성

app.on('ready', () => { // 여기서 사용되는 Arrow Function은 콜백함수입니다.
    console.log(`I am Ready ${app.user.tag}`); // Bot이 준비가 되면 실행할 콜백함수입니다.
});

+ app.on('messageReactionAdd', (msg, user) => { // messageReactionAdd : 메시지의 Reaction이 추가되었을 때의 이벤트
+     let Ddabong = (msg.emoji.name == '👍') ? '따봉' : '아님';
+     console.log(`emoji ${Ddabong}, test : ${msg.emoji.name}`);
+ });

app.on('message', msg => {
    // !avatar
    if(msg.content === '!avatar') msg.channel.send(msg.author.displayAvatarURL()); // 메세지를 보낸 유저의 프로필 사진을 받아옵니다.

    // !help
    if(msg.content === '!help') {
        // 저희는 MessageEmbed 생성자로 embed를 생성할 수 있습니다.
        const embed = new discord.MessageEmbed()
        .setTitle("이것은 embed 타이틀입니다.") // 1 - embed의 제목을 담당합니다.
        .setColor('0f4c81') // 2 - embed 사이드 바의 색을 정합니다.
        .setDescription('안녕하세요! 이곳은 설명입니다.'); // 3 - 실제로 설명을 담당하는 곳입니다.

        msg.channel.send(embed);
    }

    // !but
    if(msg.content === '!but') {
        const emoji = new discord.MessageAttachment('https://mblogthumb-phinf.pstatic.net/MjAxOTEwMTVfMTE2/MDAxNTcxMTQ0MjIwODE4.Yd4D6HvDtIQ600HpJJJbadGBT8aVJ91nQ4OUp6jd7oYg.uvrak7O9UOuiIKfWDh7KG906yeEYBSptki2qdXw__YMg.PNG.azzi_01/01_.png?type=w800'); // 첨부파일 링크를 줍니다.

        msg.channel.send(emoji); // 위에서 선언한 emoji 전송
    }

    // !ping 
    if(msg.content === '!ping') msg.channel.send(`pong!`); // 채팅에서 메세지가 들어왔을 때 실행할 콜백함수입니다.
});

app.login(token); // Bot의 토큰을 받아주세요. 0편에서 받은 봇의 토큰으로 로그인하는 코드입니다.
Comments