디스코드 봇 만들어보기 #2
전 블로그 게시물에서는 봇이 채널 안에 존재하는 것까지 진행했었는데, 이번에는 간단한 명령어를 사용해 대답해주는 것까지 해볼 예정이다.
정리하자면 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
✅참고
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);
});
전에 블로그 게시물을 보면 설명을 안 해놓은 부분이 있는데, 그 부분이 토큰이다.
공식문서에서도 봇 토큰은 다른 사람들에게 공개되는 것은 위험하다고 써져있다.
그럼 토큰은 어디에 있나요?
토큰을 찾았다면 위 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' 이렇게 답변이 날아올 것이다.
여기까지 해봤다면 간단한 명령어를 더 만들어서 봇이랑 이야기할 수 있을 것이다.
생각보다 너무 쉽고, 재밌었다.😂
만들면서 느꼈던 점, 정리
디스코드 봇 만들기를 간단히 정리하자면 나무 위키, 공식 문서 등을 보고 그대로 작성하면 매우 쉬웠다.
하지만 나는 Node version error, Intents error 등이 조금 괴롭혔던 것 같다.
'디스코드 봇 만들기'라고 주제만 들으면 어려워 보였는데, 공식 문서를 참고하면서 만들어보면 엄청 쉽고, 재밌게 코딩할 수 있는 주제였다.😃
쉽고 재밌게 코딩할 수 있는 작은 게임, 토이 프로젝트 등이 있다면 또 만들어보고 싶다.
📝이번 게시물을 만들기 위해 참고한 사이트
2. 나무 위키