[철권7]프레임표 2탄 - 디스코드봇&Fly.io

Aromahyang·2023년 2월 8일

개인프로젝트

목록 보기
2/5
post-thumbnail

이번 편에 앱의 버전을 확인하는 디스코드 봇을 만든 과정에 대해 이야기하려 한다.
앞서 철권7 데이터를 특정 앱에서 크롤링해서 쓰고 있다고 말했다.
만약 앱 내 데이터가 바뀐다면 철권7 웹서비스도 그에 맞게 반영을 해야 한다.
그렇다면 앱 버전이 바뀌었음을 알 수 있는 방법이 필요한데, 수시로 구글 플레이스토어에 방문해서 앱 버전이 바뀌었는지 확인하는 것은 번거롭다.
그래서 앱의 버전을 확인하는 디스코드 봇을 만들었고, 어떻게 배포했는지 기록해보았다.

Discord.js

디스코드에서 설정해야 하는 부분은 공식문서에 잘 나와 있으므로 생략하겠다.
Setting up a bot application
Adding your bot to servers

들어가기에 앞서 Discord.js 13 버전을 썼다.(v13 공식문서)
Discord.js가 버전별로 사용할 수 있는 메소드와 메소드 이름이 조금씩 다르다.
그래서 13 버전을 기준으로 작성하였다.

루트 경로에 config.json을 생성하여 위에서 생성한 봇 토큰을 저장한다.

{
  "token": "봇_토큰"
}

본격적으로 실행될 JS파일을 생성한 후 아래 내용을 추가한다.

const Discord = require('discord.js');
const client = new Discord.Client({ intents: [Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES] });

Client 옵션 내용은 아래와 같다.

  • GUILDS: 봇이 길드(==서버)에서 이벤트를 듣고 보낼 수 있도록 하는 필수 옵션
  • GUILD_MESSAGES: 봇이 메세지를 보내고 받을 수 있는 옵션
client.login(process.env.token);

위에서 설정한 토큰으로 봇이 로그인한다.

client.on('ready', () => {
	// 클라이언트(디스코드 웹 또는 앱)가 실행(시작)할 경우
});

client.on('messageCreate', (message) => {
  // 새로운 메세지가 생성된 경우
});

봇이 특정 이벤트(ready, messageCreate 등)를 들었을 경우 실행할 함수를 만들 수 있다.
이벤트는 공식 문서에서 확인할 수 있다.
나는 사용자가 메세지를 생성했을 경우 특정 메세지에 대해서만 답변하는 봇을 만드려고 했기 때문에 메세지 작성자와 메세지 첫 번째 문자를 확인하는 코드를 작성하였다.

client.on('messageCreate', (message) => {
  // 메세지 작성자가 봇이면 그냥 return
  if (message.author.bot) { return; }

  // 메세지의 첫 번째 문자가 prefix가 아니면 return
  if (!message.content.startsWith(prefix)) { return; }

  // 이후 액션(앱 버전 가져오기)
});

다시 한번 말하지만, Discord.js가 버전별로 코드가 많이 다르므로 꼭 버전과 공식 문서를 보고 봇을 만들기 바란다!

배포

Heroku

Heroku로 디스코드 봇을 배포해서 사용했었으나, 2022년 11월 28일부터 무료 호스팅을 지원하지 않는다는 메일을 받았다..😢
이 글을 작성한 시점도 이 이후이기 때문에 사용 방법을 적진 않겠다.
대신 이를 대체할 배포 툴인 fly.io를 소개하겠다.

Fly.io

  1. 회원가입 후 카드 등록

Fly.io는 무료 배포를 지원한다.
단, 카드를 등록해야만 무료 배포(Hobby 플랜)를 쓸 수 있으므로 회원가입 후 카드를 등록해주도록 한다.

Hobby 플랜으로 등록된 앱의 무료 사용량은 아래와 같다.

  • Up to 3 shared-cpu-1x 256mb VMs
  • 3GB persistent volume storage (total)
  • 160GB outbound data transfer

이 사용량을 초과하면 등록된 카드로 추가 요금이 결제되니 항상 조심하도록 하자!

  1. flyctl 설치

flyctl은 Fly.io에서 사용하는 커맨드 라인 유틸리티다.
각 OS에 맞게 flyctl을 설치한다.

Mac

brew install flyctl
또는
curl -L https://fly.io/install.sh | sh

Linux

curl -L https://fly.io/install.sh | sh

Windows

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
  1. 로그인하기

fly auth login 커맨드로 로그인한다.
이때 브라우저에 Fly.io가 열릴 텐데, 그 상태에서 로그인하면 된다.

  1. 앱 배포 설정하기

배포하려고 하는 프로젝트의 루트 경로에서 fly launch를 실행한다.
배포를 위해 몇 가지를 입력해야 하는 내용은 아래와 같다.

  • app name
    배포될 프로젝트의 이름
  • region for deployment
    배포 지역으로 아무거나 선택해도 크게 상관 없을 듯 하나, 나는 도쿄(일본)을 선택하였다.
  • Postgresql database 설정 여부
    Postgresql 데이터베이스를 쓰는 경우 y를, 안 쓰면 n하면 된다.
  • 바로 배포할건지(Would you like to deploy now?)
    상황에 맞게 선택하면 된다. 나는 바로 배포할 거라 y를 했다.

설정이 완료되면 fly.tomlDockerfile, .dockerignore이 자동으로 생성된다.

  1. 배포하기

fly deploy로 배포할 수 있다.
4번에서 바로 배포할지 물어볼 때 y를 입력했다면 바로 배포되기 때문에 따로 fly deploy할 필요는 없다.
만약 변경된 부분이 있다면 fly deploy를 실행해주면 된다.

배포 방법이 간단하고 무료 배포 및 호스팅이 가능해서 써볼만 하다고 생각한다.
Heroku처럼 갑자기 유료화가 되지 않길 바랄 뿐이다..🥲

profile
보여주기 식이 아닌 경험하고 배운 것을 소소하게 기록하였습니다.

0개의 댓글