디스코드에 텍스팅 봇 만들기
사실 봇이 아니다.
생명체에게 허용된 축복 중 하나는 망각이라고 생각합니다.
네,
새해 첫날인 오늘, 저는 쉬는 날이라는 것을 망각하고 일찍 일어났습니다.
아까웠지만, 💦
이미 지난 일이니 그동안 많이 적혀있는 todo 리스트를 조금씩 풀어봤습니다.
아무튼, 이번에 소개할 내용은
이러한 망각을 조금이나마 보조 할 수 있는 방법입니다.
AI 코스는 한 기수에 60명의 수강생이 참여합니다.
일정의 경우 조금씩의 차이는 있겠지만 아래와 같이,
오전에 공부, 오후에 공부. 로 되어있는데요 📚
시스템적인 이유로 인해, 이러한 일정이 익숙해질때까지, 반복적으로 안내를 해야 하는 작업들이 있습니다. 🎺
오전 8시반에서 9시사이에는 출석체크를 해야한다 와 같은 내용들이죠.
사실, 이러한 이슈는 예전 DS에서도 동일하게 있었기 때문에 마찬가지로 자동화를 통해서 알림 시스템을 구축한 적이 있습니다.
그러나 DS에서 사용하던 툴은 mattermost였고 AI에서는 discord를 사용한다는 점이 달라서 해당 내용을 다시 사용할 수 가 없었습니다. 💦
아직 저도 discord를 사용하는 것이 처음이기 때문에, 다른 크루들이 해주지 않을까… 라는 생각도 했었는데 여러 이슈로 인해 아직은 수동으로 공지들을 날리고 있었고, 이 작업의 우선순위가 낮았습니다.
그래서 제가 아무것도 모르긴 하지만, 이전에도 해냈던 것처럼
동일한 내용의 반복적인 공지는 어떻게 줄여볼 수 있지 않을까
라고 생각해서, discord api 레퍼런스를 뒤적여봤고
- python 에서 텍스트를 쏘는 것과
- github action을 이용해서 텍스트를 쏘는 2가지를 모두 성공했습니다.
배운 것이 있다면
- 단순히 텍스팅이 목적이면 Bot 어플리케이션을 만드는 것 보다 webhook을 이용하는 것이 훨씬 간단하다
- 그 이유는 github action과 연동 될 수 있기 때문이다.
- python으로 discord.py를 이용해서 텍스팅을 하는 방법도 있지만 webhook이 훨씬 간단하다
- 그 이유는 (한번 더) github action과 연동시 훨씬 더 편하기 때문이다.
이러한 이유로, 여러가지 방법중 github action 과 discord webhook을 이용해서 자동으로 텍스팅 하는 봇을 만드는 방법을 소개하려합니다.
(전제조건 : discord 에서 admin 권한 필요)
참고로 아직도 webhook이 뭔지 모르는데, 아무튼 매번 잘 쓰고 있습니다.
webhook 만들기
- 좌측 상단의, 서버 설정에 들어갑니다.
2. 연동에 들어가서 새로운 웹후크 를 생성합니다.
3. 이후 이름과 채널을 설정한뒤 저장을 먼저 하고(슈퍼 중요), 웹후크 url을 복사합니다.
4. github에 새로운 repo를 파고, 아래와 같이 action을 설정합니다. 아래 코드는 위에서 소개한 action template를 이용해서도 바로 사용 가능합니다.
5. repo의 구조는 이게 다이며, settings에서 secret을 이용해 아까 3번 단계에서 복사해뒀던 webhook URL의 값을 저장해야합니다.
사실 만든 repo를 public으로 해도 되지 않을까..? 라고 생각했는데,
fork를 하면 secret도 같이 딸려가지 않을까…? 를 잘 몰라서
아무것도 없지만 일단 private로 만들었습니다.
6. cron을 사용하거나 작성한 yml의 content를 수정하는 것으로 더욱 다채로운 텍스팅을 사용 할 수 있습니다. ( 이 예시는 아래 run workflow버튼을 사용해야만 작동합니다 )
어쩌면 제가 이 텍스팅 봇을 만들기 위해 시간을 투자하는 것 보다, 그냥 단순히 매뉴얼하게 다른 크루가 직접 공지를 올리는 것이 더 간편하다 라는 생각을 할 수 있을 것 같습니다.
이를 위해, 예전에 어느 책에서 읽었던 내용을 인용하고자 합니다.
(사실 어느책인지는 기억 안나네요 😅)
A라는 작업 도중, 잠시 B라는 작업을 하고 다시 A라는 작업을 진행할때.
처음 A에서 진행되던 집중도 혹은 컨텍스트 유지를 위해서는 B 작업의 난이도 혹은 실행시간에 관계 없이 10분 이상의 시간이 필요하다고 합니다.
즉, 하루에 단순한 “복붙”공지를 3번만 날린다해도, 최소한 30분 정도의 시간이 집중유지를 위해서는 더 사용되어야 한다는 의미죠.
연휴를 몇시간 태웠지만, 꽤 괜찮은 시간이었던 것 같습니다.