Discord JS를 구동하기에 앞서서 Node JS가 설치되어 있어야하고 에디터는 VS Code를 사용할 것입니다.
디스코드 JS 버전은 v14 입니다
원하는 곳에 프로젝트를 담을 폴더를 만듭니다. 저는 dico-bot으로 해두었습니다
vscode로 해당 폴더를 열어서 3가지 명령어를 터미널에 입력해주세요
npm init -y
: 개발에 필요한 전반적인 도구 설치
npm install discord.js
: 디스코드 봇 개발에 필요한 핵심적인 모듈 설치
npm install dotenv
: 봇 인증토큰, ID값등 정적인 중요한 정보를 담을 파일
New Application 클릭
봇 이름 입력하고 생성클릭 (이후 사진의 봇이름은 신경쓰지 말아주세요)
Bot 탭으로 가서 "Add bot"클릭합니다
Reset Token 클릭 후 TOKEN 값 복사합니다
"General Information"탭에서 APPLICATION ID값도 복사해두세요
복사한 값들을 chapter1 에서 진행해준 프로젝트 폴더의 .env 파일에 위와같이 작성해줍니다
TOEKN=토큰값
ID=APPLICATION ID값
(.env가 없으면 만들어 주세요)
다시 웹사이트의 Bot 탭으로 가서 3개의 버튼을 활성화 합니다
이번엔 OAuth2/URL Generator 탭에가서 3개의 버튼을 활성화 합니다
스크롤을 내려서 아래의 url을 복사해 주세요
OAuth2/General 탭으로 가서 "In-app Authorization"으로 변경 후 3개의 버튼을 활성화 해주세요
위에서 복사한 url을 주소창에 입력하고 봇을 추가하고 싶은 디스코드서버를 선택후 추가해주세요
봇이 서버에 추가되어서 오프라인 상태로 되어있다면 이제 코드를 작성해 봇을 온라인해줌과 동시에 구현하고 싶은 기능들을 작성하시면 됩니다.
index.js 파일을 만들어서 아래코드를 작성해주세요.
index.js
const dotenv = require('dotenv');
dotenv.config();
const { Client, GatewayIntentBits } = require('discord.js');
const client = (module.exports = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMessages,
],
}));
client.login(process.env.TOKEN); // 봇 로그인 요청
client.once('ready', () => {
console.log(`${client.user.tag} 로그인`); // 봇이 온라인이 되었을 때 "(봇이름) 로그인" 메시지가 콘솔에 출력됨
});
client.on('messageCreate', message => {
if (message.content === '안녕') {
message.reply({ content: `**반갑습니다!**` }); // 봇이 온라인해있는 서버의 누군가 "안녕"이라고 메시지를 보냈을 때 "반갑습니다!"를 답해줌
}
});
터미널에 node . 또는 node index.js 라고 입력하고
로그인 되었다는 메시지가 출력되면 정상입니다
봇이 온라인 상태가 되고 정상적으로 응답도 하는것을 볼 수 있습니다
코드를 간단하게 설명하자면,
Client 클래스의 인스턴스인 client는 디스코드 API와 통신하여 봇의 동작을 관리하고, 이벤트 처리,명령 처리등 다양한 기능을 제공합니다.
그 중 몇개만 살펴본다면 다음과 같은 메서드와 객체등이 있습니다.
1. client.login() : 봇을 디스코드에 로그인 시키고 서버에 연결하는 메서드입니다
2. client.on() : 이벤트리스너를 등록하고 처리할 수 있습니다
3. client.guilds : 클라이언트가 속한 서버 목록의 객체입니다
4. client.user : 클라이언트의 user정보를 담고 있는 객체입니다.
- client.user.bot : (boolean) 봇인지 아닌지를 담고있는 객체입니다. 지금은 봇을 만들었으므로 true입니다
- client.user.username : (string) 유저명입니다. 지금은 discord사이트에서 만들어준 봇이름으로 되어있겠죠?
5. ...등등
Client 클래스의 intents필드에는 클라이언트로부터 수신할 패킷의 종류를 지정할 수 있습니다
1. GatewayIntentBits.Guilds : 서버에 대한 이벤트를 처리하기 위한 인텐트로 서버 생성, 수정, 삭제 등과 관련된 이벤트를 수신합니다
2. GatewayIntentBits.MessageContent : 메시지의 내용에 대한 이벤트를 처리하기 위한 인텐트, 메시지 편집, 삭제 등과 관련된 이벤트를 수신합니다
3. ...등등
이벤트리스너 등록
1. client.on()
2. client.once() // 한번만 수신하는 리스너 등록
client.on('이벤트명', 콜백fuct)
두가지 모두 봇에 이벤트리스너를 등록하는 메서드입니다. 첫번째 인자로는 수신할 이벤트를 입력받고, 두번째 인자로는 실행할 함수를 등록합니다. 이벤트는 string으로 등록하고 discord.js 모듈의 Events클래스를 이용하면 편리한거 같습니다.discord JS 가이드 : https://discordjs.guide/
discord JS Docs : https://old.discordjs.dev/#/docs/discord.js/14.11.0/general/welcome