독도갈매기의 개발 블로그

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -4- 봇의 설명을 넣어보자 본문

Node.js

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -4- 봇의 설명을 넣어보자

독도갈매기 2020. 10. 15. 23:47

이 포스팅은 Node.js로 디스코드 봇을 만들 수 있다고!? 시리즈 -3- 봇에 짤이나 이모티콘을 추가에서 이어지는 포스팅입니다.
전 포스팅을 읽지 않으셨다면 읽고 오시는 것을 권장드립니다.

오늘의 목표

!help 명령어를 입력하면 봇의 설명을 출력할 수 있는 간단한 Embed를 세팅하려고 합니다.

img

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('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편에서 받은 봇의 토큰으로 로그인하는 코드입니다.

img

17번 줄부터 시작하는 숫자는 위에 사진에서 해당하는 위치를 담당합니다.

1번 위치는 사람마다 사용방법이 다르겠지만 보통 봇의 이름이나, 간단한 소개글을 작성합니다.
2번 위치는 퍼스널 컬러나 보통 본인이 하고 싶은 색을 정합니다.
3번 위치가 보통 봇의 설명을 작성합니다. 예를들면 봇이 실행 가능한 명령어들을 정리 해놓습니다.

요런 3가지 요소들만 있으면 디자인적으로는 부족할지 몰라도 기능적으로는 크게 상관이 없을 정도로 구현이 가능합니다.

img
요런식으로요 ↑

추가된 코드

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('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('당신의 봇 DB입니다.') // 1
+       .setColor('0f4c81') // 2
+       .setDescription('!but - 귀여운 치즈덕 짤을 볼 수 있습니다.'); // 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