개요
AWS EventBridge를 활용한 업무 자동화 – 화해 블로그 | 기술 블로그
EventBridge를 활용한 자동화 EventBridge는 AWS 서비스 이벤트를 사용하여 이벤트 기반 애플리케이션을 대규모로 손쉽게 구축할 수 있는 서버리스 이벤트 버스로, 이벤트 소스의 실시간 이벤트 스트림
blog.hwahae.co.kr
AWS Event Bridge를 공부하던 도중 위에 보이는 화해의 기술 블로그 글에서 CodeBuild의 작업 결과를 Slack으로 전송해주는 기능이 보였습니다. 이를 보고 갑자기 친구들과 디스코드를 할 때 메시지를 익명으로 채널에 노출시킬 수 있는 디스코드 봇이 있다면 좋겠다는 생각에 이를 만들게 되었습니다. Thank you hwahae!
개발 언어로는 최근 linux에서 동작시킬 CLI를 python으로 개발 중이었기 때문에 이번 봇 또한 python을 활용하여 개발하기로 하였습니다. (동시에 두 언어를 잡으면 헷갈리니까요. 생산성에 영향을 미칠 거라고 생각합니다.)
봇 만들기
정말 갑작스러운 호기심으로 시작한 봇 만들기라 봇에 대하여 처음부터 알아야 했습니다. 저는 이러한 상황에서 대부분 공식(또는 번역) 문서를 애용합니다. 공식문서에선 버전 등의 문제로 말썽을 일으킬 일이 없어 기초 뼈대를 세우는 데에는 이런 공식 문서를 주로 이용하고는 합니다.
일단 만들 봇의 이름을 정해주기로 하였습니다. 익명으로 자신의 속내를 털어놓으라는 마음으로 "임금님 귀는 당나귀 귀" 동화를 본떠 봇의 이름은 '나귀'로. 명령어는 #대나무숲# 이 되었습니다. # 기호가 어쩐지 대나무 숲 같지 않나요?ㅋㅋ
그럼 이제 코드를 짜 봅시다. 먼저 봇 개발을 위해 python에서 아래 명령어를 통해 discord bot을 개발하기 위한 discord 패키지를 다운받아줍니다.
# 본인 환경에 맞게 설치
pip install discord
pip3 install discord
제가 만들 나귀 봇은 메시지를 대신 뿌려주는 기능밖에 없기 때문에 수행해야 할 작업은 아래와 같이 매우 간단했습니다.
- 채팅 채널에 명령어와 같이 메시지를 읽으면 함수가 실행된다
- 메시지를 해당 채널에 나귀의 이름으로 전송한다
- 해당 메시지를 삭제한다
생각보다 더 간단한 동작이니만큼 아래와 같이 10줄 정도의 작은 코드가 나왔습니다.
import discord
client = discord.Client()
token = "{ Token }"
@client.event
async def on_message(message):
if message.content.startswith('#대나무숲#'): # #대나무숲#으로 시작하는 문자열이 입력
msg = message.content.strip("#대나무숲#") # #대나무숲#을 짤라 msg에 저장
await message.delete() # 클라이언트의 메시지 삭제
await message.channel.send(msg) # 나귀봇이 메시지 보냄
client.run(token)
만들어진 봇을 배포하는 방법은 아래와 같은 순서로 진행합니다. 다른 자료가 많으니 글로 진행하겠습니다.
- Discord Developer 포털에 들어가 Application을 생성한다
- 좌측 메뉴에서 Bot을 선택해 봇을 생성한다
- 생성한 봇에 들어가 토큰을 발급받는다. 이 토큰은 위 코드의 token을 선언하는 부분에 넣는다
- 좌측 메뉴에 Oauth2/URL Generator로 들어가 Bot을 선택하고 권한을 할당한다(저는 그냥 Admin 줬습니다)
- 생성된 URL로 들어가면 Bot을 서버에 추가할 수 있다
- 코드를 실행시키면 봇에 초록불이 들어오며 활성화된다
테스트
이제 배포된 봇을 테스트할 시간입니다. 다음과 같이 #대나무숲# 메시지를 보내면 제 메시지는 없어지고 나귀 봇이 대신 메시지를 보내줄 겁니다.
성공적으로 작동하는 모습입니다. 앞으로 가끔 다른 봇들도 만들어 봐야겠네요.