한창 지인들과 디스코드하던 중 커뮤니티 사이트에서 오다가다 알게 된 3시 햄버거 밈
다들 새벽까지 디스코드에 있었기 때문에 나는 새벽 3시가 되면 저 영상 주소를 올려줬다. 그런데 어느날 문득 이 생각이 들었다.
자동으로 영상 링크가 올라갔으면 좋겠다.
그래서 디스코드 알림봇을 만들기로 했다.
다양한 기능이 들어갈 거라면 자체 봇을 만들어도 되지만 3시에 영상 링크만 올려주면 되기 때문에 웹후크를 이용할 것이다.
우선 테스트용으로 서버를 만들었다.
채팅 채널 편집의 연동 탭에 들어가면 웹후크라는 게 있다.
새 웹후크를 눌러 하나 만들어주고 URL이 필요하므로 복사 해주자.
여기서 고민을 좀 많이 했다.
정보 검색을 위해 구글링을 했는데 다들 AWS를 사용하는 것이다. 사실 이 방식이 제일 좋긴 하다. Github는 딜레이가 심심찮게 일어나기 때문이다.
그런데 어차피 이번 건은 정말 간단한 기능에 맛만 보는 용도로 만들거기 때문에 AWS를 사용하기에는 거창하지 않나 싶다.
그래서 이 포스트는 Github Actions를 사용하는 것을 전제로 한다.
Github 레포지토리 하나 만들어주자.
이미 만들어놓은게 있어서 그 사진을 올렸지만 실제로는 아무 것도 없을 것이다.
Actions에 들어가서 New workflow를 눌러주고 Python package를 택해주자.
name: 디스코드 알림봇
on:
schedule: # UTC+9 기준 3시 실행
- cron: "0 18 * * *"
jobs:
message:
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@v5.3.0
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK }}
content: "보내고 싶은 텍스트"
그리고 위 코드를 입력해주자.
이 코드의 상세 정보는 하단 링크에서 확인할 수 있다.
https://github.com/tsickert/discord-webhook
webhook-url에는 아까 복사한 웹훅 URL이 들어가는 곳이다.
레포지토리의 secrets를 이용해야 추후 테러를 방지할 수 있다.
fork해도 secrets는 전달되지 않는 것 같다.
content는 보낼 텍스트를 입력해주자. 나는 예정대로 유튜브 링크를 올렸다.
Actions는 schedule이라는 예약 작업을 지원한다. 여기에 cron을 적용하면 간편하게 예약 시간을 지정할 수 있다.
cron은 분 시 일 월 요일 순으로 지정할 수 있다.
*은 전부라는 뜻이므로 상단 코드의 0 18 * * * 는 매월 매일 18시 정각에 작동하라는 것이다.
그런데 오전 3시에 보내기로 한다면서 왜 18시일까?
cron은 UTC+0 기준이다. 한국은 UTC+9이므로 한국 시간에 맞게 하려면 -9시간 해줘야 한다.
8분 정도 딜레이가 있었지만 어쨌건 3시 내로 올라왔다.