분류 Nodejs

Discord.js를 사용하여 Discord 봇 빌드

컨텐츠 정보

  • 조회 57 (작성일 )

본문

Discord.js 모듈을 사용하여 Discord 봇을 구축하는 방법을 소개합니다. 봇은 임의의 농담을 공유하고, 사용자 역할을 할당 또는 취소하고, Discord 채널에 특정 계정의 트윗을 게시합니다.

점점 더 많은 사람들이 집에서 일하면서 팀 커뮤니케이션 플랫폼이 날로 인기를 얻고 있습니다. Slack과 Discord는 가장 인기 있는 팀 커뮤니케이션 플랫폼입니다.

Discord는 게이머에 초점을 맞추고 있지만 음성 통화 실에 최대 50 명의 구성원을 추가 할 수 있는 기능과 같은 일부 기능은 Slack의 훌륭한 대안입니다. 이러한 플랫폼을 사용하는 가장 큰 장점 중 하나는 봇을 사용하여 많은 작업을 자동화 할 수 있다는 것입니다.


이 문서에서는 JavaScript를 사용하고 Discord.js의 도움을 받아 처음부터 봇을 빌드합니다. 봇 구축부터 클라우드에 배포하는 과정까지 다룰 것입니다. 봇을 구축하기 전에 봇이 가질 기능을 적어 보겠습니다.

  • 일련의 농담에서 무작위 농담을 공유하십시오.
  • 그림 이모티콘을 선택하여 사용자 역할을 추가 및 제거합니다.
  • 특정 계정의 트윗을 특정 채널로 공유합니다.

Discord.js 모듈은 Node.js를 기반으로 하기 때문에 Node.js와 npm에 어느 정도 익숙하다고 가정하겠습니다. 이 기사에서는 JavaScript에 대한 지식이 필수입니다.

이제 전제 조건과 목표를 알았으니 시작하겠습니다. 코드를 즉시 복제하고 탐색하려면 GitHub 저장소를 사용하면 됩니다.


따라야 할 단계 


먼저 Discord 서버를 구축하겠습니다. Discord 서버는 Slack 서버와 매우 유사한 다양한 채널에 다양한 주제를 할당 할 수 있는 그룹과 같습니다. Slack과 Discord의 주요 차이점은 Slack은 다른 서버에 액세스하기 위해 다른 로그인 자격 증명이 필요하지만 Discord에서는 단일 인증으로 귀하가 속한 모든 서버에 액세스 할 수 있다는 것입니다.


서버를 만들어야 하는 이유는 서버에 대한 관리자 권한이 없으면 서버에 봇을 추가 할 수 없기 때문입니다. 서버가 생성되면 서버에 봇을 추가하고 Discord의 개발자 포털에서 액세스 토큰을 가져옵니다. 이 토큰을 사용하면 Discord API와 통신 할 수 있습니다. Discord는 상호 작용할 수 있는 공식 개방형 API를 제공합니다. API는 봇에 대한 요청 제공에서 OAuth 통합에 이르기까지 모든 용도로 사용할 수 있습니다. API는 단일 서버 봇에서 수백 대의 서버에 통합 할 수 있는 봇에 이르기까지 모든 것을 지원합니다. 매우 강력하며 다양한 방법으로 구현할 수 있습니다.


Discord.js 라이브러리는 액세스 토큰을 사용하여 Discord API와 통신하는 데 도움이 됩니다. 모든 기능은 Discord API를 기반으로 합니다. 그런 다음 봇 코딩을 시작할 수 있습니다. Discord API와 Discord.js 라이브러리를 소개 할 작은 코드를 작성하는 것으로 시작하겠습니다. 그런 다음 Discord.js의 부분 개념을 이해합니다. 부분을 ​​이해하면 봇에 "반응 역할"시스템을 추가 할 것입니다. 이를 통해 twit이라는 npm 패키지를 사용하여 Twitter와 통신하는 방법도 알게 됩니다. 이 npm 패키지는 Twitter 트윗 전달 기능을 통합하는 데 도움이 됩니다. 마지막으로 Heroku를 사용하여 클라우드에 배포합니다.

이제 봇을 구축하는 방법을 알았으니 이제 작업을 시작하겠습니다.


Discord 서버 구축 


가장 먼저 해야 할 일은 Discord 서버를 만드는 것입니다. 관리자 권한이 있는 서버가 없으면 봇을 통합 할 수 없습니다.


Discord 서버 구축은 쉬우며, Discord는 이제 템플릿을 제공하여 더욱 쉽게 만들 수 있습니다. 아래 단계를 수행하면 Discord 서버가 준비됩니다. 먼저 Discord 포털에 액세스하는 방법을 선택합니다. 웹 버전 또는 앱을 사용할 수 있습니다. 둘 다 같은 방식으로 작동합니다. 이 자습서에서는 웹 버전을 사용합니다.


이 기사를 읽고 있다면 이미 Discord 계정이 있다고 가정하겠습니다. 그렇지 않은 경우 다른 웹 사이트에서처럼 계정을 만드십시오. 오른쪽 상단의 "로그인"버튼을 클릭하고 계정이 있는 경우 로그인하거나 "등록"버튼을 클릭합니다. 간단한 양식을 작성하고 보안 문자를 작성하면 계정이 성공적으로 생성됩니다. Discord 앱 또는 웹 사이트를 연 후 서버 목록이 있는 왼쪽에 있는 더하기 아이콘을 클릭합니다. 클릭하면 템플릿을 선택하거나 직접 만들라는 메시지가 표시됩니다.


Creating a server from a template or from scratch in Discord 


"Create My Own"옵션을 선택하겠습니다. 다음 질문은 건너 뛰겠습니다. Discord 서버를 "Smashing Example"이라고 부를 것입니다. 서버에 대한 사진을 제공 할 수도 있습니다. "만들기"버튼을 클릭하면 서버가 생성됩니다.


Discord에 봇 등록 


봇을 코딩하기 전에 Discord에서 제공하는 토큰을 가져와야 합니다. 이 토큰은 우리 코드에서 Discord 로의 연결을 설정합니다. 토큰을 얻으려면 봇을 서버에 등록해야 합니다. 봇을 등록하려면 Discord의 개발자 포털을 방문해야 합니다. 처음으로 Discord 앱을 빌드 하는 경우 빈 목록이 표시됩니다. 앱을 등록하려면 오른쪽 상단의 "새 애플리케이션"링크를 클릭하십시오. 응용 프로그램에 이름을 지정하고 "만들기"버튼을 클릭합니다. 앱 이름을 "Smashing App"으로 지정하겠습니다.


Play: Adding a new app to the Discord Developer Portal 


새로운 메뉴는 몇 가지 옵션을 제공합니다. 오른쪽에는 "Bot"이라고 표시된 옵션이 있습니다. 그것을 클릭하고 "Add Bot"을 선택합니다. 확인을 클릭하고 원하는 경우 봇의 이름을 변경하고 변경 사항을 저장 한 다음이 페이지에서 받은 토큰을 복사합니다. 이제 우리 봇이 Discord에 등록되었습니다. 기능을 추가하고 봇 코딩을 시작할 수 있습니다.


봇 구축 


DISCORD.JS 란 무엇입니까? 


Discord.js는 자신을 다음과 같이 정의합니다.


Discord.js는 Discord API와 매우 쉽게 상호 작용할 수 있는 강력한 node.js 모듈입니다. 대부분의 다른 JS Discord 라이브러리보다 훨씬 더 객체 지향적 인 접근 방식을 취하므로 봇의 코드가 훨씬 더 깔끔하고 이해하기 쉬워집니다.


따라서 Discord.js는 Discord API와의 상호 작용을 훨씬 쉽게 만듭니다. 공식 Discord API로 100 % 적용됩니다.


봇 초기화 


자주 사용하는 텍스트 편집기를 열고 모든 파일이 저장 될 폴더를 만듭니다. 명령 줄 인터페이스 (CLI)를 열고 폴더로 이동 한 다음 npm : npm init -y를 사용하여 폴더를 초기화합니다.


봇 빌드를 시작하려면 두 개의 패키지가 필요합니다. 첫 번째는 dotenv이고 두 번째는 분명히 Discord.js Node.js 모듈입니다. Node.js에 익숙하다면 dotenv 패키지에 익숙 할 것입니다. .env라는 파일에서 process.env로 환경 변수를 로드합니다.


npm i dotenv discord.js를 사용하여 이 두 가지를 설치합니다.


설치가 완료되면 루트 폴더에 두 개의 파일을 만듭니다. .env 파일 중 하나의 이름을 지정합니다. 다른 기본 파일의 이름을 원하는 대로 지정하십시오. 이름을 app.js로 지정하겠습니다. 폴더 구조는 다음과 같습니다.


│    .env
│    app.js
│    package-lock.json
│    package.json
└─── node_modules


토큰 및 기타 민감한 정보를 .env 파일에 저장하고 결과를 생성하는 코드를 app.js 파일에 저장합니다.


.env 파일을 열고 새 변수를 만듭니다. 이 예에서는 변수 이름을 BOT_TOKEN으로 지정하겠습니다. 이 파일에 토큰을 붙여 넣으십시오. .env 파일은 이제 다음과 유사합니다.


BOT_TOKEN=ODAxNzE1NTA2Njc1NDQ5ODY3.YAktvw.xxxxxxxxxxxxxxxxxxxxxxxx


app.js 파일 작업을 시작할 수 있습니다. 가장 먼저 할 일은 우리가 설치 한 모듈을 요구하는 것입니다.


const Discord = require('discord.js');
require('dotenv').config();


dotenv 모듈은 config() 메서드를 사용하여 초기화됩니다. config() 메소드에 매개 변수를 전달할 수 있습니다. 그러나 이것은 dotenv 모듈의 매우 간단한 사용이기 때문에 특별한 기능이 필요하지 않습니다.


Discord.js 모듈 사용을 시작하려면 생성자를 초기화 해야 합니다. 이것은 문서에 나와 있습니다.


const client = new Discord.Client();


Discord.js 모듈은 client.on이라는 메서드를 제공합니다. client.on 메소드는 다양한 이벤트를 수신합니다. Discord.js 라이브러리는 이벤트 기반이므로 Discord에서 이벤트가 생성 될 때마다 해당 이벤트에 연결된 기능이 호출됩니다.


우리가 수신 할 첫 번째 이벤트는 ready 이벤트입니다. 이 메서드는 Discord API와의 연결이 준비되면 시작됩니다. 이 메서드에서는 Discord API와 앱간에 연결이 설정 될 때 실행될 함수를 전달할 수 있습니다. 연결이 설정되었는지 알 수 있도록 이 메서드에서 console.log 문을 전달하겠습니다. ready 이벤트가 있는 client.on 메소드는 다음과 같습니다.


client.on('ready', () => {
  console.log('Bot is ready');
});


하지만 Discord 서버로 봇에 로그인하지 않았기 때문에 API와의 연결이 설정되지 않습니다. 이를 활성화하기 위해 Discord.js 모듈은 로그인 방법을 제공합니다. 클라이언트에서 사용할 수 있는 로그인 방법을 사용하고 이 방법으로 토큰을 전달하면 Discord 서버로 앱에 로그인 할 수 있습니다.


client.login(process.env.BOT_TOKEN)


지금 노드 app.js를 사용하거나 nodemon을 사용하는 경우 nodemon app.js를 사용하여 지금 앱을 시작하면 정의한 콘솔 메시지를 볼 수 있습니다. 우리 봇은 이제 Discord 서버에 성공적으로 로그인했습니다. 몇 가지 기능을 실험 해 볼 수 있습니다.


코드에 따라 메시지 내용을 가져 오는 것부터 시작하겠습니다.


메시지 이벤트 


메시지 이벤트는 일부 메시지를 수신합니다. 회신 방법을 사용하여 사용자의 메시지에 따라 회신하도록 봇을 프로그래밍 할 수 있습니다.


client.on('message', (msg) => {
  if (msg.content === 'Hello') msg.reply('Hi');
});


이 예제 코드는 "Hello"메시지가 수신 될 때마다 "Hi"로 응답합니다. 하지만 이 작업을 수행하려면 봇과 서버를 연결해야 합니다.


디스크 서버와 봇 연결 


지금까지 봇은 서버와 연결되어 있지 않습니다. 서버에 연결하려면 (Smashing Example) Discord의 개발자 포털을 방문하십시오. 이 튜토리얼의 앞부분에서 만든 앱의 이름을 클릭합니다 (여기서는 "Smashing App"). 앱을 선택하고 메뉴에서 "OAuth2"옵션을 클릭합니다. "Scopes"라는 그룹을 찾을 수 있습니다. “봇”체크 박스를 선택하고 생성 된 URL을 복사합니다.


Connecting the bot with the Discord server 


새 탭에서이 URL을 방문하고 서버를 선택한 다음 "승인"을 클릭하십시오. Captcha를 완료하면 이제 봇이 선택한 서버와 연결됩니다.


지금 Discord 서버를 방문하면 Discord에서 이미 알림을 보냈으며 이제 봇이 오른쪽의 구성원 목록에도 표시됩니다.


봇에 기능 추가 


이제 봇이 서버와 연결되었으므로 서버에 "Hello"를 보내면 봇이 "Hi"로 응답합니다. 이것은 Discord API에 대한 소개 일뿐입니다. 진짜 재미가 곧 시작됩니다.


Discord.js 모듈에 좀 더 익숙해 지도록 특정 명령이 수신 될 때마다 농담을 보내는 기능을 추가해 보겠습니다. 이것은 우리가 방금 한 것과 비슷합니다.


봇에 무작위 농담 기능 추가 


이 부분을 더 명확하고 이해하기 쉽게 만들기 위해 API를 사용하지 않을 것입니다. 우리 봇이 반환 할 농담은 단순한 배열이 될 것입니다. 배열의 범위 내에서 매번 임의의 숫자가 생성되고 배열의 특정 위치에 액세스하여 농담을 반환합니다.


Discord에서 봇이 제공하는 기능을 사용한 적이 있는 경우, 일부 특수 문자가 일반 메시지와 특수 명령을 구분한다는 사실을 알 수 있습니다. 나는 사용할 거야? 일반 메시지와 다르게 보이도록 명령 앞에 그래서, 우리의 농담 명령은? 농담입니다.


app.js 파일에 jokes라는 배열을 생성합니다. 배열에서 임의의 농담을 얻는 방법은 다음 공식을 사용하는 것입니다.


jokes[Math.floor(Math.random() * jokes.length)]


Math.random () * jokes.length 수식은 배열 범위 내에서 임의의 숫자를 생성합니다. Math.floor 메서드는 생성 된 숫자를 내림합니다.


이를 console.log()하면 Math.floor (Math.random() * jokes.length)를 더 잘 이해할 수 있습니다. 마지막으로 jokes[]는 jokes 배열에서 임의의 농담을 제공합니다.


우리의 첫 번째 코드가 우리의 메시지에 응답하는 데 사용되었다는 것을 눈치 채 셨을 것입니다. 하지만 여기서 답장을 받고 싶지 않습니다. 오히려 우리는 누구에게도 태그를 붙이지 않고 농담을 메시지로 받고 싶습니다. 이를 위해 Discord.js 모듈에는 channel.send()라는 메서드가 있습니다. 이 방법을 사용하면 명령이 호출 된 채널로 메시지를 보낼 수 있습니다. 따라서 지금까지의 전체 코드는 다음과 같습니다.


const Discord = require('discord.js');
require('dotenv').config();

const client = new Discord.Client();

client.login(process.env.BOT_TOKEN);

client.on('ready', () => console.log('The Bot is ready!'));

// Adding jokes function

// Jokes from dcslsoftware.com/20-one-liners-only-software-developers-understand/
// www.journaldev.com/240/my-25-favorite-programming-quotes-that-are-funny-too
const jokes = [
  'I went to a street where the houses were numbered 8k, 16k, 32k, 64k, 128k, 256k and 512k. It was a trip down Memory Lane.',
  '“Debugging” is like being the detective in a crime drama where you are also the murderer.',
  'The best thing about a Boolean is that even if you are wrong, you are only off by a bit.',
  'A programmer puts two glasses on his bedside table before going to sleep. A full one, in case he gets thirsty, and an empty one, in case he doesn’t.',
  'If you listen to a UNIX shell, can you hear the C?',
  'Why do Java programmers have to wear glasses? Because they don’t C#.',
  'What sits on your shoulder and says “Pieces of 7! Pieces of 7!”? A Parroty Error.',
  'When Apple employees die, does their life HTML5 in front of their eyes?',
  'Without requirements or design, programming is the art of adding bugs to an empty text file.',
  'Before software can be reusable it first has to be usable.',
  'The best method for accelerating a computer is the one that boosts it by 9.8 m/s2.',
  'I think Microsoft named .Net so it wouldn’t show up in a Unix directory listing.',
  'There are two ways to write error-free programs; only the third one works.',
];

client.on('message', (msg) => {
  if (msg.content === '?joke') {
    msg.channel.send(jokes[Math.floor(Math.random() * jokes.length)]);
  }
});



코드의 "Hello"/ "Hi"부분은 더 이상 쓸모가 없기 때문에 제거했습니다.


이제 Discord.js 모듈에 대한 기본적인 이해를 마쳤으므로 더 자세히 살펴 보겠습니다. 그러나 모듈은 더 많은 일을 할 수 있습니다. 예를 들어, 사람에게 역할을 추가하거나 금지하거나 추방하는 것입니다. 지금은 간단한 반응 역할 시스템을 구축 할 것입니다.


...


https://www.smashingmagazine.com/2021/02/building-discord-bot-discordjs/