Project

디스코드 봇 만들어보기 #2

Judaeng 2022. 1. 4. 23:30

전 블로그 게시물에서는 봇이 채널 안에 존재하는 것까지 진행했었는데, 이번에는 간단한 명령어를 사용해 대답해주는 것까지 해볼 예정이다.

정리하자면 Javascript(Node.js) 언어를 이용해서 봇이랑 소통할 예정이다!

 

참고

더보기

시작하기 전에 Node.js의 버전을 확인해야 된다는 말을 본 것 같은데, 내 버전은 v14.15.5 였다.
그래서 그런지 에러를 뱉어냈다.

아래 에러 내용은 다른 블로그에서 가져왔다. 나의 에러는 바로 해결했기 때문에 참고할 자료가 없었다.

internal/modules/cjs/loader.js:892
  throw err;
  ^

Error: Cannot find module 'node:events'
Require stack:
- C:\Users\ssc\Desktop\wp_manager\node_modules\discord.js\src\client\BaseClient.js

해결방법은 최소 노드 버전이 v16.6이라서 그렇다. 따라서 노드 버전을 v16.6로 업데이트만 하면 된다.

 

프로젝트 생성!


1. npm init 명령어를 이용해서 프로젝트를 생성하고, 나 같은 경우엔 enter... enter...

npm init -y

 

출처: https://juicyjerry.tistory.com/242

참고

더보기

npm init -y는 우리가 package.json을 만들기 위해서 npm init이라는 명령어를 사용하는데 그런 경우에 사용할 수 있다. 

보통 npm init만 입력하면 npm project에 대한 기본 양식(아래 이미지처럼)을 일일이 정해줘야 하는데,
'-y'라는 속성을 이용하면 default값으로 설정된 package.json을 만들겠다는 의미다.
그 말을 즉, 한 방에 package.json이 만들어진다는 것이다. 

 

참고로, -y의 의미는 'yes'라고 한다. 

 

2. 그 이후엔 npm install을 이용해 node_modules, package.json 등을 설치해준다! 설치되었다면 OK

npm install

 

3. 그다음에 서버에서 discord.js install 다운로드해주기!

npm i discord.js

 

4. 디스코드 봇 코딩하기(간단한 명령어 받기)

bot.js

const { Client, Intents } = require('discord.js');
const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES ] });
const token = require('./config.js');

// 봇과 서버를 연결해주는 부분
client.login(token.token);

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('messageCreate', msg => { // message 이벤트시 msg (Discord.Message) 매개변수를 받고 실행할 함수
  if (msg.content === 'ping') { // Discord.Message 객체의 content 프로퍼티가 'ping' 일 때
    msg.reply('Pong!'); // reply 는 멘션 + , msg 로 출력됩니다.
  }
  console.log(msg.content);
  });

전에 블로그 게시물을 보면 설명을 안 해놓은 부분이 있는데, 그 부분이 토큰이다.

공식문서에서도 봇 토큰은 다른 사람들에게 공개되는 것은 위험하다고 써져있다.

 

그럼 토큰은 어디에 있나요? 

출처: https://jhoplin7259.tistory.com/91

토큰을 찾았다면 위 Bot.js에 token.token 여기 부분에 그대로 '토큰' 이런식으로 붙여주면 된다.

 

토큰 관리는 어떻게 했나요?

나 같은 토큰 관리는 config.js란 파일을 생성한 후 관리하기로 했다.

config.js

module.exports = {
    token: token
}

 

참고

더보기

위에 코드 중 Intents.FLAGS... 이런 코드가 있는데 공식 문서엔 '클라이언트가 제대로 작동하려면 의도 옵션이 필요합니다.'라고 적혀있는데 그 뒤에 'Intents.FLAGS.GUILD_MESSAGES' 이 코드를 적어주지 않으면 봇에게 이야기를 해도 대답을 하지 않고 에러를 뱉어냈다.

Intents 관련 에러나 코드 작업은 구글링 해서 공부하거나, 해결해야 될 것이다. 다른 사람, 블로그에선 저 Intents 부분 코드가 빠져있는 곳이 대부분이어서 이렇게 쓴다.

 

위에 코드를 다 작성했다면, 터미널에 이렇게 입력해보자.

node bot.js
// 또는
npm start
// 또는
nodemon bot.js

이제 봇에게 'ping'이라고 채팅을 쳐보자.

그러면 'pong' 이렇게 답변이 날아올 것이다.

ping! pong!

여기까지 해봤다면 간단한 명령어를 더 만들어서 봇이랑 이야기할 수 있을 것이다.

생각보다 너무 쉽고, 재밌었다.😂

명령어 추가

만들면서 느꼈던 점, 정리

디스코드 봇 만들기를 간단히 정리하자면 나무 위키, 공식 문서 등을 보고 그대로 작성하면 매우 쉬웠다.

하지만 나는 Node version error, Intents error 등이 조금 괴롭혔던 것 같다.

'디스코드 봇 만들기'라고 주제만 들으면 어려워 보였는데, 공식 문서를 참고하면서 만들어보면 엄청 쉽고, 재밌게 코딩할 수 있는 주제였다.😃

쉽고 재밌게 코딩할 수 있는 작은 게임, 토이 프로젝트 등이 있다면 또 만들어보고 싶다.

 

📝이번 게시물을 만들기 위해 참고한 사이트

1. discord 공식 문서

2. 나무 위키

3. discord github