독도갈매기의 개발 블로그

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -1- ping pong 본문

Node.js

[Node.js] Node.js로 디스코드 봇을 만들 수 있다고!? -1- ping pong

독도갈매기 2020. 10. 10. 16:57

이 포스팅은 Node.js로 디스코드 봇을 만들 수 있다고!? -0- 봇 생성하기에서 이어지는 포스팅입니다.
봇 Token이 없거나 봇을 생성하지 않았다면 전 포스팅을 읽고 와주세요!

npm install 하기

img

npm을 통해 discord.js를 다운로드 받아주시고 node index.js를 해주시면 아래 코드를 실행할 수 있습니다.

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

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

discord를 const로 받는 이유는 저희는 코드를 짜면서 변수 discord에 다른 값을 넣을 것도 아니며, 바뀔일이 더더욱 없기 때문에
const 상수로 받아주는 것입니다.

5번째 줄 코드에서는 봇이 준비가 되었을 때 콘솔에 준비가 되었다는 메세지를 찍습니다.

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

그리고 token이라는 변수는 따로 token.js파일을 만들어 봇의 토큰을 숨기는 방식으로 코드를 작성했습니다.
9번째 줄 코드에서는 msg라는 매개변수를 받아와 그 안에 있는 property중 content가 !ping이라면 pong!을 반환하는데요

app.on('message', msg => {
    if(msg.content === '!ping') msg.channel.send(`pong!`);
});

쉽게 설명해서 사용자가 채팅 채널에서 !ping이라는 명령어를 입력하면 !pong을 뱉는 과정입니다.
msg안에 있는 channel값은 어느 채널인지 알려주는 property인 것이고 거기로 !pong을 send하는 것입니다.

'ready'도 준비가 되었을 때 이벤트, 'message'도 message가 채널에 왔을 때 이벤트로 on함수에 처음 매개변수는
이벤트라는 것을 저희는 알 수 있었고 그 뒤로 나오는 CallBack 함수로 반응을 해줄 수 있다는 것도 이번편으로 통해 알게됐습니다.

token.js

module.exports.token = 'your Token';

token.js 파일을 따로 만들고 exports를 사용하고 index.js에서 require로 불러와서 봇 토큰 유출을 조금이나마
방지하는 방향으로 코드를 짰습니다. 이 토큰을 가지고 있으면 악용될 수 있기에 공개된 곳에는 올리지 않는것을 추천드리며,
디스코드에서도 이 토큰을 github같은 공개된 곳에 올리게 되면 보안상의 문제로 자동으로 바꿔주지만 유의하시길 바랍니다.

오늘도 포스팅을 읽어주셔서 감사드리며, 궁금하신점이 따로 생기신다면 댓글을 달아주세요!

Comments