본문 바로가기
2024/프로젝트

[WriteMate] 디스코드 봇 명령어 설정하기

by ye-jji 2024. 3. 23.

INTRO

이제 본격적으로 명령어를 설정해 보려고 하는데 그 전에 해야 할 일이 있다. 바로 어떤 명령어가 필요한지 정리하는 것이다. 기능 요구사항을 정리하고 추상화 해서 명세를 간략하게 적어보려고 한다. 따로 양식을 가져온 건 아니고 작은 프로젝트 단위여서 간단하게 생각을 정리하는 용도로 작성하려고 한다.

 

필요한 기능

시나리오

블로그 스터디 4명이 디스코드 서버에서 블로그 글 업로드 채널을 개설하고 봇 사용, 한달동안 진행하는 스터디이고 매주 글 1개 이상 작성하는데 월요일부터 일요일 자정까지 적어도 1개의 글을 작성해야 하고 작성하지 못하면 벌금, 벌금은 연속으로 작성하지 못하면 2배씩 증가, 월요일 아침에 저번주 결과에 대해 알림, 유저가 글 등록하면 실시간으로 알림이 오고 새 글 링크가 같이 올라옴, 실시간 알림은 해당 유저가 이번주에 몇번째 글을 작성한건지 이번달 총 몇개의 글을 쓴건지 알려줌, 스터디가 종료되면 전체 결과를 종료 직후에 알림

 

필수기능

유저 링크 등록하기, 등록한 정보 확인하기, 새로운 글 업데이트 시 알림(새글 자동 링크), 유저 링크 삭제하기, 유저 링크 업데이트 하기, 스터디 생성, 스터디 인원 추가, 스터디 인원 제외, 스터디 규칙 입력, 스터디 시작 알림, 스터디 종료 알림, 스터디 정보 확인하기

 

데이터 항목

서버, 채널, 사용자 아이디, 블로그 주소, 생성 시간, 블로그 글 등록 횟수, 종료 시기, 반복 횟수, 시작 시간, 주기, 스터디 인원, 스터디 시작, 스터디 종료

 

이렇게 대략적으로 정리한 뒤 혹시 빠진 부분이 있을까 싶어서 chat-gtp를 사용했다.

 

주요 기능
유저 링크 등록/업데이트/삭제: 멤버들이 자신의 블로그 주소를 등록하고, 필요에 따라 업데이트하거나 삭제할 수 있습니다.
등록 정보 확인: 사용자가 언제든지 자신의 등록 정보(블로그 주소, 글 등록 횟수 등)를 확인할 수 있습니다.
새 글 업데이트 알림: 멤버가 새 글을 작성하고 링크를 공유하면, 봇이 실시간으로 알림을 보내고 글의 링크를 공유합니다. 이때, 해당 유저가 이번 주에 몇 번째로 글을 작성했는지, 이번 달에 총 몇 개의 글을 작성했는지 정보도 함께 제공합니다.
스터디 관리: 스터디의 생성, 인원 추가 및 제외, 규칙 입력, 시작 및 종료 알림 등 스터디 전반의 관리 기능을 포함합니다.
벌금 관리: 글을 기한 내에 작성하지 않을 경우 벌금을 부과하는 기능. 연속으로 기한을 지키지 못할 때는 벌금이 2배씩 증가합니다.
주간/월간 리포트: 매주 월요일 아침에 전주의 결과를 요약해 알리고, 스터디 종료 시 전체 결과를 알리는 리포트 생성 기능.

데이터 항목
서버, 채널, 사용자 아이디: 디스코드 서버와 채널 정보, 멤버의 사용자 아이디를 기록합니다.
블로그 주소: 멤버별 블로그 주소를 저장합니다.
생성 시간, 종료 시기: 스터디의 시작과 종료 시간을 기록합니다.
블로그 글 등록 횟수: 각 멤버가 작성한 글의 수를 기록합니다.
벌금: 멤버별로 부과된 벌금의 액수를 기록합니다.
마지막 글 작성 일시: 각 멤버가 마지막으로 글을 작성한 날짜와 시간을 기록합니다.
벌금 부과 이력: 벌금 부과 날짜와 액수의 이력을 관리합니다.

 

그리고 같이 제시한 개선사항도 있었는데 일단 추가 구현으로 미루기로 했다. 이미 위의 사항만으로도 할게 많기 때문이다. 하지만 일단 기록하자!

구현 시 고려사항
사용자 인증 및 권한 관리: 스터디 관리 기능(인원 추가/제외, 규칙 설정 등)은 스터디 관리자 또는 스터디 멤버에게만 허용되어야 합니다.
데이터 보안 및 프라이버시: 사용자의 블로그 주소와 개인 정보를 안전하게 보호하며, 벌금과 같은 민감한 정보는 특히 주의 깊게 관리합니다.
유저 인터페이스(UI): 디스코드 봇을 통한 상호작용이 직관적이고 사용자 친화적이어야합니다. 명령어는 쉽게 기억하고 입력할 수 있도록 설계되어야 하며, 사용자가 필요한 정보를 빠르게 얻을 수 있도록 도와줘야 합니다. 예를 들어, 특정 명령어를 사용하여 빠르게 자신의 등록 정보를 확인하거나, 새로운 글을 등록할 수 있어야 합니다.

추가적인 구현 사항
인터랙티브 메시지 및 알림: 사용자가 새로운 글을 등록하거나 스터디 관련 액션을 취할 때, 디스코드 봇이 인터랙티브한 메시지를 통해 즉각적인 피드백을 제공하고, 필요한 정보를 알려주는 방식을 채택할 수 있습니다. 이는 사용자 경험을 향상시키고, 스터디 참여도를 높이는 데 기여할 수 있습니다.
유동적인 벌금 설정: 스터디 그룹에 따라 벌금의 액수나 부과 방식이 다를 수 있으므로, 이를 유연하게 설정할 수 있는 기능을 추가하는 것이 좋습니다. 예를 들어, 스터디 관리자가 벌금의 기본 액수, 연속 실패 시 증가율 등을 설정할 수 있도록 하는 것입니다.프라이버시 모드: 일부 사용자는 자신의 블로그 글이나 개인 정보를 공개적으로 공유하는 것에 대해 주저할 수 있습니다. 따라서, 사용자가 선택할 수 있는 프라이버시 설정을 제공하여, 블로그 링크나 글 등록 알림을 공개적으로 공유할지, 아니면 관리자만 볼 수 있게 할지 선택할 수 있도록 하는 기능도 고려해볼 만합니다.

 

이렇게 정리하고 나서 ERD가 필요하다는 생각이 들었다. 데이터를 어떻게 효율적으로 관리할 수 있는지 고민해봤다. 그리고 chat-gtp를 사용했다. 몇번의 시행착오 끝에 테이블을 받을 수 있었다.


Users Table

UserID INT 사용자의 고유 식별자 (기본 키)
DiscordID VARCHAR 사용자의 디스코드 식별자
UserName VARCHAR 사용자의 이름
BlogURL VARCHAR 사용자의 블로그 URL

StudyGroups Table

GroupID INT 스터디 그룹의 고유 식별자 (기본 키)
GroupName VARCHAR 스터디 그룹의 이름
StartDate DATE 스터디 시작 날짜
EndDate DATE 스터디 종료 날짜
RuleDescription TEXT 스터디 규칙 설명

BlogPosts Table

PostID INT 블로그 포스트의 고유 식별자 (기본 키)
UserID INT 포스트를 작성한 사용자의 ID (외래 키)
GroupID INT 포스트가 속한 스터디 그룹의 ID (외래 키)
PostURL VARCHAR 포스트의 URL
PostDate DATE 포스트 작성 날짜

Penalties Table

PenaltyID INT 벌금의 고유 식별자 (기본 키)
UserID INT 벌금이 부과된 사용자의 ID (외래 키)
Amount DECIMAL 벌금 액수
DueDate DATE 벌금 납부 기한
IsPaid BOOLEAN 벌금 납부 여부

Notifications Table

NotificationID INT 알림의 고유 식별자 (기본 키)
UserID INT 알림을 받는 사용자의 ID (외래 키)
GroupID INT 알림이 속한 스터디 그룹의 ID (외래 키)
NotificationType VARCHAR 알림 유형
Message TEXT 알림 메시지 내용
SentDate DATE 알림 발송 날짜

Users-StudyGroups Table

UserID INT 사용자 ID, 외래 키 (FK) + 복합 키 (PK)
GroupID INT 스터디 그룹 ID, 외래 키 (FK) + 복합 키 (PK)

위 테이블을 ERD로 만드는건 따로 mySQL문으로 그려야 했다. 그래서 dbdiagram.io 이 도구를 사용해서 만들었다. 사실 너무 멀리 와버렸나 하는 생각이 조금 드는데 하지만 어쩔수 없다. keep going

ERD 이미지

 

이제 마지막으로 생성할 명령어들만 정리하고 이번 글은 마무리 해야겠다.

 

자동 생성되는 알림

  • 주간/월간 리포트 알림: 스터디 그룹의 활동 요약을 주기적으로 자동으로 알림
    • 이벤트: 매주/매월 일정 시간에 자동으로 생성
    • 필요 정보: 해당 기간 동안의 블로그 포스트 등록 현황, 참여도, 벌금 정보 등
  • 데드라인 알림: 블로그 글 등록 마감 시간이 다가오는 것을 멤버들에게 알림
    • 이벤트: 글 등록 마감 기한 전일 또는 당일에 자동으로 생성
    • 필요 정보: 마감 기한
  • 벌금 부과 알림: 글을 기한 내에 작성하지 않은 사용자에게 벌금이 부과
    • 이벤트: 주기적인 확인을 통해 글이 등록되지 않은 경우 자동으로 생성
    • 필요 정보: 부과된 벌금 액수, 납부 기한

보안 규칙이 필요한 작업

  • 스터디 그룹 관련 작업: 스터디 생성, 인원 추가/제외, 스터디 규칙 설정 등.
    • 보안 조치: 스터디 그룹의 관리자
  • 개인 정보 관련 작업: 사용자 블로그 URL 업데이트, 정보 삭제 등.
    • 보안 조치: 사용자 본인만 자신의 정보를 수정하거나 삭제

명령어 리스트

  1. 유저 링크 등록
    • 명령어: !register <BlogURL>
    • 설명: 자신의 블로그 URL 등록
    • 보안: 사용자 본인 확인 필요
  2. 등록한 정보 확인
    • 명령어: !info
    • 설명: 자신의 등록 정보 확인
    • 보안: 사용자 본인 확인 필요
  3. 유저 링크 업데이트
    • 명령어: !update <NewBlogURL>
    • 설명: 자신의 블로그 URL 업데이트
    • 보안: 사용자 본인 확인 필요
  4. 스터디 생성
    • 명령어: !createstudy <GroupName> <StartDate> <EndDate> <RuleDescription>
    • 설명: 새로운 스터디 그룹을 생성
    • 보안: 스터디 관리자 또는 봇 관리자 권한 필요
  5. 스터디 인원 추가/제외
    • 명령어 추가: !addmember <GroupName> <DiscordID>, !removemember <GroupName> <DiscordID>
    • 설명: 지정한 스터디 그룹에 멤버를 추가하거나 제외
    • 보안: 스터디 관리자 권한 필요
  6. 스터디 정보 확인
    • 명령어 추가: !studyinfo <GroupName>
    • 설명: 지정한 스터디 그룹의 상세 정보 확인, 스터디 이름, 활동 기간, 규칙, 현재 참여 멤버, 현황 정보를 제공
    • 보안: 모든 사용자 가능

 

구현하려면 부지런히 해야겠다..! 파이팅!