블로깅 챌린지 운영기 : 디스코드 챗봇 v2.0 구상하기

길하균(Lagun)·2023년 9월 26일

이전 : 디스코드 챗봇 v1.0 만들기

이전 포스팅에서는 블로깅 챌린지 디스코드 챗봇 v1.0의 코드를 각 기능별로 나눠서 간단히 설명했습니다. 이전 내용이 궁금하신 분이 계시다면 아래 링크를 방문해주시면 감사하겠습니다.

🔥 블로깅 챌린지 운영기 : 디스코드 챗봇 구상하기
🔥 블로깅 챌린지 운영기 : 디스코드 챗봇 v1.0 만들기

이번 글에서는 지난번 만들었던 디스코드 챗봇을 개선한 v2.0의 전체적인 구상안에 대해서 정리하고자 합니다. 디스코드 챗봇이 해야 할 업무와 각 업무를 처리하기 위한 아이디어는 무엇인지를 개괄식으로 정리하려 합니다. 본격적인 코드 설명은 다음 포스팅부터 할 예정입니다.

글을 읽으시면서 포스팅과 관련하여 피드백 할 부분이 있으시다면 댓글 혹은 ghaguniv@gmail.com으로 메일 남겨주시면 감사하겠습니다.

Part VI : 챗봇 v2.0 기능 정리

v2.0을 만들기 전에 챗봇이 구현해야 할 기능을 명령어 중심으로 정리했습니다. 기능을 개괄식으로 간단히 정리하면 아래와 같습니다.

< 유저용 명령어 >

  • 명령어 : 유저가 사용 가능한 명령어를 출력합니다.
  • 등록 : 자신의 블로그를 챌린지에 등록합니다.
  • 게시물 : 게시물을 챌린지에 공유합니다.
  • 회고록 : 월간회고록을 챌린지에 공유합니다.
  • 정보글 : 정보글을 챌린지에 공유합니다.
  • 점수 : 현재 유저의 점수를 알려줍니다.
  • 기록 : 현재까지의 유저 활동 기록을 알려줍니다.
  • 전체등수 : 현재 전체 등수를 알려줍니다.

< 관리자용 명령어 >

  • 피드백 : 블로깅 피드백 참가자에게 참여 점수를 부여합니다.
  • 이름 : 현재 name_info DB에 등록된 id와 name를 출력합니다.
  • 이름수정 : id의 name을 수정합니다.
  • 이름삭제 : id와 name을 모두 삭제합니다.
  • data_log : 참가자들의 활동 log를 모두 출력합니다.
  • add_data : data_log에 새 활동 log를 추가합니다.
  • del_data : data_log에서 활동 log를 삭제합니다.
  • fix_data : data_log의 log를 수정합니다.

< 그 외 기능 >

  • 메시지 반응 점수 부여 자동화
  • 주차별 활동 기록
  • 주차별 최대 활동 횟수 내에서만 점수 부여
  • 유저가 공유한 url 저장

다음 포스팅부터는 위에서 정의된 각 명령어를 어떻게 처리하는지 정리하겠습니다. 내용이 꽤 길어질 수 있어서 2편 이상으로 나눠서 포스팅하려 합니다.

Part VII : 챗봇 v2.0 DB 형식 구상하기

위에서 제시된 기능들을 구현하기 위해서는 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 형식으로 저장함으로써 얻을 수 있는 장점은 아래와 같습니다.

  1. 주차별 활동 파악이 용이하다.
  2. 주차별 최대 활동 횟수 내에서만 점수를 부과하기 편리하다.
  3. db의 log를 관리하기 편리하다.
  4. 챌린지 달성 조건을 파악하기에 편리하다.

물론 장점만 있는 것은 아닙니다. db 관리를 위한 명령어도 새로 만들어야 하고 v1.0보다 코드가 더 복잡해진다는 단점도 존재하긴 합니다. 이 외에도 제가 아직 파악하지 못한 단점들이 더 있을 수 있습니다. 하지만 장점이 단점들을 모두 커버할만큼 뛰어나기 때문에 log 형식으로 바꾸게 되었습니다.

다음 : 명령어별 코드 설명

앞서 언급한대로 다음 포스팅부터는 각 명령어를 구현하기 위한 코드가 어떻게 되는지를 정리하겠습니다. 명령어 외에도 챗봇의 기능을 구현하기 위해 필요한 코드들도 함께 살펴볼 예정입니다. 그리고 이 시리즈의 마지막에는 전체 코드를 포스팅할 예정입니다.

profile
AI, 빅데이터를 배우기 위해 항해 중

0개의 댓글