자바스크립트로 디스코드 봇 제작하기 명령어 추가 01
41,976 총방문자 Slack은 라이브러리를 제공해 줘서 참 좋은데 discord는 이게 없습니다.. 그래서 만들면 재미있겠다. 싶어서 무작정 제작하기 시작했다. 다행이게도 어떤 parameter가 어떤 역할을 하는지에 대해서는 잘 나와있습니다. 첫번째 record를 사용했다. record는 jdk14에서 도입되어진 data class입니다. 코틀린의 data와 동일하다고 생각하면 됩니다. 롬복에 대한 의존성도 제거를 하고 싶었고 그 과정에서 데이터에 대한 접근을 편하게 하려고 record로 진행했습니다.
단점은 record에서는 생성자 오버로딩이 안된다는 점입니다. 이 점 때문에 값을 넣지 않고 싶어하는 파라미터에 억지로 null이라도 채워 넣어야 하는데 이 부분은 Builder패턴으로 해결했다.
명령어 추가하기.
자 그럼 명령어를 추가해봅시다. 프로젝트 내에 commands라는 폴더를 만들어주세요. 왜 만드는지는 차차 설명 드리겠습니다. 그리고 commands 폴더 안에, ping.js라는 파일을 만들겠습니다. 방금 작성한 코드는 명령어 배열을 봇에게 등록하는 코드입니다. 명령어를 index.js에 쭉 나열해서 추가할 수도 있겠지만, 그럼 구분하기도 어렵고 수정도 어렵겠죠? 그래서 명령어는 commands 폴더에서만 새로 만들어서 작성하고, 그 파일들을 읽어들여서 명령어로 만듭니다.
코드를 작성하고 실시하는 과정에서 다음과 같은 오류를 마주했다 Client.init missing 1 required keywordonly argument intents
1.5버전부터 Intents라는 것이 생기면서, 코드에서도 intents에 관한 명시를 해주어야 합니다. 제대로 어떤 매커니즘으로 작동하는지는 아직 이해하지 못했지만, 아래 두 방법으로 해결할 수 있었습니다. 1 Discord Developer Portal의 Bot 탭에서 intents 권한을 허용합니다.
2 다음 코드를 추가합니다.
명령어 배포하기.
Slash Commands를 소개할 때 말씀드렸었죠? 배포 하는 과정이 있다고, 배포를 하지 않으면 discord는 이 Bot이 어떤 명령어를 가지고 있는지 알 수 없기 때문에 Slash Command가 동작하지 않습니다. 따라서 우리는 Command가 뭐가 있는지 discord에 알려 주시기 바랍니다야 합니다. 코드에서 add 부분들을 추가해주세요. 이 코드는 서버가 실행 됐을 때 읽어들인 Commands들을 특정 서버에 배포해주는 역할을 합니다.
0. 봇 계정 생성 및 초대
1 Discord Developer Portal에서 로그인 2 New Application을 클릭하고 Application의 이름을 짓는다. 이 때 이름이 너무 흔하면 이후 Add bot 단계에서 진행이 불가능합니다. 3 이런 화면이 나타납니다. 일반적인 봇 설정은 여기서 할 있습니다. 4 Bot 탭으로 이동해 Add Bot을 클릭합니다. 2단계 인증을 설정해 두었다면 6자리 코드를 입력해야 합니다.
Google OTP 등 2단계 인증 앱에서 코드를 확인할 있습니다. ) 5 이런 화면이 나타납니다. 6 제작된 봇을 서버에 초대하기 위해, OAuth2 탭을 클릭합니다. 7) SCOPES에서 bot을 체크하고, 필요한 권한을 선택한 후 제작된 URL을 복사해 접속합니다.
일반적인 봇 만들기
1 discord 패키지를 설치하자. Powershell 등 터미널에서 명령어를 입력해줍니다. ip install discord.py
2 각자 활용하는 IDE에서 프로젝트 폴더와 python 파일을 만든다. 이 때 python 파일명이 discord이면 안 됩니다. 그리고 이 단계에서 봇의 token을 복사해주어야 하는데, Discord Developer Portal의 Bot 탭에서 copy 버튼을 누르시면 됩니다.
token을 확인하지 못했다면, reset token을 선택해 새로운 token을 생성해 copy합니다. 4) 작성한 python 파일을 저장하고 실행합니다. ython bot.py
5 실행하면 봇은 온라인 상태가 됩니다. 6) 다음과 같이 정상적으로 작동하면 일반적인 봇이 완성되었습니다.
일반적인 intents 예시
0. 필수 권한 GatewayIntentBits.Guilds 1. 디스코드 서버에서 문자 정보 불러오기 GatewayIntentBits.MessageContent GatewayIntentBits.GuildMessages 2. 디스코드 개인 문자 채널 권한
등등 intents는 아래 사이트를 참조해 주세요간략한 slash command 제작하기 commands 폴더에 ping.js 파일 만들기ping.js에 아래 코드 작성하기 프롬프트에서 node .register.js를실행하여 명령어를 등록하시고node index.js를 실행하여 봇을 실행시킵니다.
위의 과정을 거친다면 채팅에 ping을 입력할 시명령어가 자동으로 뜨게 됩니다.
개선 사항 및 추후 방향
첫번째 클래스의 이름을 MsgAPI로 적었듯 나중에는 slack, discord를 연동한 라이브러리를 하나 가져가는 게 좋지 않을까 싶습니다. 이때는 레포가 바뀌거나 레포의 이름이 변경될 것 같다. 그리고 모든 의존성을 제거하기 위해 ObjectMapper에 대한 의존도 제거하고 record대신 class를 사용해야 할 것입니다. 이후 jar에 대한 빌드는 github action에 맡기면 될 것으로 생각됩니다.
자주 묻는 질문
명령어 추가하기.
자 그럼 명령어를 추가해봅시다. 좀 더 구체적인 사항은 본문을 참고해 주세요.
명령어 배포하기.
Slash Commands를 소개할 때 말씀드렸었죠? 배포 하는 과정이 있다고, 배포를 하지 않으면 discord는 이 Bot이 어떤 명령어를 가지고 있는지 알 수 없기 때문에 Slash Command가 동작하지 않습니다. 좀 더 구체적인 사항은 본문을 참고하시기 바랍니다.
0 봇 계정 생성 및 초대
1 Discord Developer Portal에서 로그인 2 New Application을 클릭하고 Application의 이름을 짓는다. 구체적인 내용은 본문을 참고하시기 바랍니다.