
이번 편에 앱의 버전을 확인하는 디스코드 봇을 만든 과정에 대해 이야기하려 한다.
앞서 철권7 데이터를 특정 앱에서 크롤링해서 쓰고 있다고 말했다.
만약 앱 내 데이터가 바뀐다면 철권7 웹서비스도 그에 맞게 반영을 해야 한다.
그렇다면 앱 버전이 바뀌었음을 알 수 있는 방법이 필요한데, 수시로 구글 플레이스토어에 방문해서 앱 버전이 바뀌었는지 확인하는 것은 번거롭다.
그래서 앱의 버전을 확인하는 디스코드 봇을 만들었고, 어떻게 배포했는지 기록해보았다.
디스코드에서 설정해야 하는 부분은 공식문서에 잘 나와 있으므로 생략하겠다.
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로 디스코드 봇을 배포해서 사용했었으나, 2022년 11월 28일부터 무료 호스팅을 지원하지 않는다는 메일을 받았다..😢
이 글을 작성한 시점도 이 이후이기 때문에 사용 방법을 적진 않겠다.
대신 이를 대체할 배포 툴인 fly.io를 소개하겠다.
Fly.io는 무료 배포를 지원한다.
단, 카드를 등록해야만 무료 배포(Hobby 플랜)를 쓸 수 있으므로 회원가입 후 카드를 등록해주도록 한다.
Hobby 플랜으로 등록된 앱의 무료 사용량은 아래와 같다.
이 사용량을 초과하면 등록된 카드로 추가 요금이 결제되니 항상 조심하도록 하자!
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"
fly auth login 커맨드로 로그인한다.
이때 브라우저에 Fly.io가 열릴 텐데, 그 상태에서 로그인하면 된다.
배포하려고 하는 프로젝트의 루트 경로에서 fly launch를 실행한다.
배포를 위해 몇 가지를 입력해야 하는 내용은 아래와 같다.
설정이 완료되면 fly.toml와 Dockerfile, .dockerignore이 자동으로 생성된다.
fly deploy로 배포할 수 있다.
4번에서 바로 배포할지 물어볼 때 y를 입력했다면 바로 배포되기 때문에 따로 fly deploy할 필요는 없다.
만약 변경된 부분이 있다면 fly deploy를 실행해주면 된다.
배포 방법이 간단하고 무료 배포 및 호스팅이 가능해서 써볼만 하다고 생각한다.
Heroku처럼 갑자기 유료화가 되지 않길 바랄 뿐이다..🥲