이전 포스팅에서는 블로깅 챌린지 디스코드 챗봇 v1.0의 코드를 각 기능별로 나눠서 간단히 설명했습니다. 이전 내용이 궁금하신 분이 계시다면 아래 링크를 방문해주시면 감사하겠습니다.
🔥 블로깅 챌린지 운영기 : 디스코드 챗봇 구상하기
🔥 블로깅 챌린지 운영기 : 디스코드 챗봇 v1.0 만들기
이번 글에서는 지난번 만들었던 디스코드 챗봇을 개선한 v2.0의 전체적인 구상안에 대해서 정리하고자 합니다. 디스코드 챗봇이 해야 할 업무와 각 업무를 처리하기 위한 아이디어는 무엇인지를 개괄식으로 정리하려 합니다. 본격적인 코드 설명은 다음 포스팅부터 할 예정입니다.
글을 읽으시면서 포스팅과 관련하여 피드백 할 부분이 있으시다면 댓글 혹은 ghaguniv@gmail.com으로 메일 남겨주시면 감사하겠습니다.
v2.0을 만들기 전에 챗봇이 구현해야 할 기능을 명령어 중심으로 정리했습니다. 기능을 개괄식으로 간단히 정리하면 아래와 같습니다.
< 유저용 명령어 >
< 관리자용 명령어 >
name_info DB에 등록된 id와 name를 출력합니다.data_log에 새 활동 log를 추가합니다.data_log에서 활동 log를 삭제합니다.data_log의 log를 수정합니다.< 그 외 기능 >
다음 포스팅부터는 위에서 정의된 각 명령어를 어떻게 처리하는지 정리하겠습니다. 내용이 꽤 길어질 수 있어서 2편 이상으로 나눠서 포스팅하려 합니다.
위에서 제시된 기능들을 구현하기 위해서는 DB에 기록되는 log의 형식부터 바꿀 필요가 있었습니다. 우선 이전에 참가자들의 점수를 구하기 위해 사용한 방식은 아래와 같습니다.
db['id] = [0,0,0,0,0]
# [블로그 등록, 게시물 공유, 회고록 공유, 정보글 공유, 채팅 반응]
v1.0때는 단순하게 replit에서 제공하는 db에 id를 key값으로 가지고 활동횟수 list를 value로 가지도록 만들었습니다. 점수를 구해야 할 때는 array 형식으로 바꾸고 점수 array와 곱연산 후 sum을 했습니다. 이 방식은 점수를 기록하고 계산하기에 간편하다는 장점이 있습니다. 하지만 하나의 list에 활동 횟수만을 기록하기 때문에 주차별 활동을 추적할 수 없었습니다.
이 문제를 해결하고자 저는 db에 log를 저장하기로 했습니다. db를 이중리스트로 만들고 필요할 때는 pandas의 DataFrame 형식으로 변환해서 필요한 값을 구한다는 것이 기본적인 아이디어입니다. 그래서 log를 아래와 같은 형식으로 db에 기록하였습니다.
db[`data_log`]=[]
db['data_log'].append([week, today, id, name, act, url, score])
replit의 db에 바로 DataFrame을 넣을 수 없어서 이중 리스트로 만들었습니다. 코드의 첫 줄은 db를 정의하기 위한 공리스트를 만들었습니다. 이후에 활동이 발생할 때 마다 아래의 append로 log list를 추가합니다. 여기서 score에는 각 활동(act)별 점수가 들어가게 됩니다.
챌린지 참가자들의 활동을 log 형식으로 저장함으로써 얻을 수 있는 장점은 아래와 같습니다.
물론 장점만 있는 것은 아닙니다. db 관리를 위한 명령어도 새로 만들어야 하고 v1.0보다 코드가 더 복잡해진다는 단점도 존재하긴 합니다. 이 외에도 제가 아직 파악하지 못한 단점들이 더 있을 수 있습니다. 하지만 장점이 단점들을 모두 커버할만큼 뛰어나기 때문에 log 형식으로 바꾸게 되었습니다.
앞서 언급한대로 다음 포스팅부터는 각 명령어를 구현하기 위한 코드가 어떻게 되는지를 정리하겠습니다. 명령어 외에도 챗봇의 기능을 구현하기 위해 필요한 코드들도 함께 살펴볼 예정입니다. 그리고 이 시리즈의 마지막에는 전체 코드를 포스팅할 예정입니다.