profile

Junil Jeong

I am a frontend developer equipped with skills of typescript and react.js. Looking forward to achieve efficiency and productivity for your teams.

I have recently completed Software Engineering Bootcamp in CodeStates and currently studying Next.js 😁

📍 Incheon, Korea

디스코드 봇을 활용한 프론트엔드 프로젝트

2024.01.19

디스코드봇

내전봇

포트폴리오에 비슷비슷한 유형의 프로젝트들이 늘어가는 걸 인지하게 됐고, 조금 더 신선한 개발을 해보고 싶어서 고민하던 중에 디스코드 봇을 활용해서 스케줄링 서비스를 만들어보게 됐다.

요즘에 친구들이랑 발로란트를 자주 플레이하는데 총 10명을 필요로 하는 게임이기도 하고 인원들의 실력에 따라서 균형 있는 팀을 짜기도 쉽지 않은 일이라 생각했고, 이 점을 웹의 핵심 기능으로 만들면 좋을 거 같았다.

전체적인 로직 자체은 이렇다.

  1. 친구들과 있는 디스코드 채널에 봇을 초대한다.
  2. 해당 봇의 명령어로 내전을 스케줄한다.
  3. 그 날짜에 참여가 가능한 인원 역시 명령어로 참여를 신청한다.
  4. 웹으로 위에 스케줄한 내전과, 인원들을 나열한다.
  5. 인원들의 실력지표를 입력한다. (Valorant API를 이용하기가 은근 귀찮아서..)
  6. 실력 지표에 따라서 팀을 만들고 내전을 즐긴다.

Discord.js

디스코드 봇을 어떻게 만들 수 있을지 열심히 구글링 해본 결과, discord.js 라는 라이브러리를 발견할 수 있었다. 프론트엔드 개발자라면 익숙한 node.js 기반으로 봇을 굴릴 수 있게 도움을 주는 라이브러리이고 사용법 또한 어렵지 않았다.

  1. 먼저 Discord Dev Portal에 들어가서 어플리케이션을 만들어준다. ( client Id 와 Secret 값을 .env에 복붙하여 가지고 와야겠죠? )

  2. Discord.js의 문서를 보면 require 방식으로 모듈을 불러오는데 import로 통일하고 싶어서 package.json에 "type": "module" 을 추가해주었다.

  3. 아래코드의 body에 내가 만든 커멘드를 불러와서 배열요소로 넣어주는 걸로 봇이 동작한다.

  4. 배포는 처음엔 cloudtype 서비스를 이용했으나, 최근에 운영이 바뀌면서 24시간 작동하는 프리티어가 사라졌다. (새벽시간에 봇이 꺼짐). 암튼 그래서 aws의 제품을 사용해야 할 거 같은데 아직 해보지는 않았다. cloudtype의 자동 배포 기능이 참 편하고 좋았는데 아쉽다..


배포는 EC2로 진행해보려고 했고, 서버에 봇을 띄워서 가동은 해봤다. 슬프게도 문제가 발생했는데 cloudtype 서버 시간대로 작동하는 함수들이 있어서 제대로 돌아가지는 않았고, 이를 해결하기 위해서는 서버시간에 영향을 받는 함수들을 손봐야 했는데 서버시간을 상수로 선언하지 않았던게 참 아쉽다. 어쨌든 번거로운 과정을 거치기 싫어 일단 cloudtype으로 배포했다.