디스코드에서 일회성 및 반복 리마인더를 설정할 수 있는 고도화된 봇
- 명령어:
/remind [시간] [메시지] - 예시:
/remind 30분 회의 준비/remind 2시간 점심시간/remind 내일 14시 프로젝트 회의
- 명령어:
/remind-repeat [주기] [메시지] [시작시간] - 예시:
/remind-repeat 1시간 물 마시기/remind-repeat 1일 일일 스탠드업/remind-repeat 1주 주간 보고서
- 명령어:
/remind-schedule [스케줄] [메시지] - 특징: 정확한 시간/요일에 실행
- 예시:
/remind-schedule 매일-9시 일일 스탠드업/remind-schedule 매주-월요일-18시 주간 보고서/remind-schedule 평일-17시 퇴근 정리/remind-schedule 매월-1일-10시 월간 정산
- 목록 조회:
/remind-list- 내 리마인더 목록 (일회성 + 반복 + 스케줄) - 일회성 삭제:
/remind-delete [ID]- 일회성 리마인더 삭제 - 반복/스케줄 정지:
/remind-stop [ID]- 반복/스케줄 리마인더 정지 - 상태 확인:
/ping- 봇 응답 시간 확인
- ✅ 일반 텍스트 채널
- ✅ 공개 스레드
- ✅ 비공개 스레드
- ✅ 뉴스 채널 스레드
- ✅ DM (개인 메시지)
- 상대 시간:
30분,2시간,3일 - 절대 시간:
9시,15시,23시(24시간 형식, 0-23시) - 날짜 조합:
내일,내일 14시 - 반복 주기:
30분,1시간,1일,1주 - 스케줄 형식:
매일-9시,매주-월요일-18시,평일-17시,매월-1일-10시
- 채널 삭제: 자동 리마인더 제거 + 사용자 DM 알림
- 스레드 보관: 3일 유예 기간 + 사용자 알림
- 스레드 잠금: 1일 유예 기간 + 사용자 알림
- 권한 오류: 3회 재시도 후 자동 제거
- 봇 오프라인: 재시작 시 놓친 리마인더 자동 복구
- 📧 DM 알림: 리마인더 제거 시 상세 이유 설명
- 🔄 상태 변경: 스레드 상태 변화에 따른 안내
⚠️ 오류 해결: 문제 발생 시 해결 방법 제시
- Backend: Node.js + Discord.js v14
- Database: SQLite3 with better-sqlite3
- Scheduler: node-cron (매분 실행)
- Deployment: Railway (24/7 운영)
- Container: Docker 지원
src/
├── commands/
│ ├── ping.js # 봇 상태 확인
│ ├── remind.js # 일회성 리마인더
│ ├── remind-repeat.js # 반복 리마인더 (주기 기반)
│ ├── remind-schedule.js # 스케줄 리마인더 (정시 기반)
│ ├── remind-list.js # 리마인더 목록
│ ├── remind-delete.js # 일회성 삭제
│ └── remind-stop.js # 반복/스케줄 정지
├── utils/
│ └── timeParser.js # 시간 파싱 로직
├── database.js # 데이터베이스 관리
├── scheduler.js # 스케줄러 + 오류 처리
└── index.js # 메인 봇 엔트리
project/
├── src/ # 소스 코드
├── data/ # SQLite 데이터베이스
├── docs/ # 개발 문서
├── Dockerfile # Docker 설정
├── docker-compose.yml # 컨테이너 구성
├── railway.json # Railway 배포 설정
└── README.md # 사용자 가이드
CREATE TABLE reminders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL, -- 사용자 ID
channel_id TEXT NOT NULL, -- 채널/스레드 ID
message TEXT NOT NULL, -- 리마인더 메시지
remind_time DATETIME NOT NULL, -- 다음 실행 시간
repeat_type TEXT DEFAULT NULL, -- 반복 타입 (minutes/hours/days/weeks)
repeat_interval INTEGER DEFAULT NULL, -- 반복 간격
created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 생성 시간
);-- 일회성 리마인더
INSERT INTO reminders VALUES (1, '123456789', '987654321', '회의 참석', '2024-06-15 14:00:00', NULL, NULL, '2024-06-14 22:00:00');
-- 반복 리마인더
INSERT INTO reminders VALUES (2, '123456789', '987654321', '물 마시기', '2024-06-14 23:00:00', 'hours', 1, '2024-06-14 22:00:00');-
기본 인프라
- 봇 기본 구조 및 권한 설정
- SQLite 데이터베이스 연동
- Discord.js v14 슬래시 명령어
- Railway 배포 및 24/7 운영
-
핵심 리마인더 기능
- 시간 파싱 로직 (자연어 처리)
- 일회성 리마인더 (/remind)
- 반복 리마인더 (/remind-repeat)
- 스케줄 리마인더 (/remind-schedule)
- 매분 스케줄러 실행
- 정확한 시간 계산
-
관리 기능
- 리마인더 목록 조회 (/remind-list)
- 일회성 리마인더 삭제 (/remind-delete)
- 반복/스케줄 리마인더 정지 (/remind-stop)
- 봇 상태 확인 (/ping)
-
고급 오류 처리
- 채널/스레드 삭제 감지 및 자동 정리
- 스레드 상태별 차등 처리 (보관/잠금/권한)
- Discord API 오류 코드별 대응
- 사용자 DM 알림 시스템
- 봇 재시작 시 놓친 리마인더 복구
-
사용자 경험
- 모든 채널/스레드/DM 지원
- 직관적인 에러 메시지
- 상세한 도움말 및 예시
- Discord.js deprecated 경고 해결
- 24시간 형식 지원: 오전/오후 구분 제거, 0-23시 형식으로 통일
- 시간 파싱 버그 수정: 24시 이상 입력 시 명확한 에러 처리
- 테스트 코드 업데이트: 24시간 형식에 맞는 단위 테스트 완료
- 재시도 스케줄링 시스템 완전 구현
- 지연 삭제 시스템 완전 구현
- 웹 대시보드 (선택사항)
- 리마인더 통계 및 분석
- 다국어 지원
- 커스텀 시간대 설정
- 플랫폼: Railway
- 운영: 24/7 무중단
- 모니터링: 실시간 로그 확인 가능
- 자동 배포: GitHub push 시 자동 재배포
- 응답 시간: 평균 100ms 이하
- 정확도: 1분 오차 범위 내 알림 발송
- 안정성: 자동 오류 복구 시스템
- 확장성: 멀티 서버 지원 가능
이 봇은 단순한 리마인더를 넘어서 견고한 오류 처리와 사용자 친화적 경험을 제공하는 완전한 Discord 봇으로 발전했습니다. 모든 핵심 기능이 구현되어 실제 서버에서 안정적으로 운영되고 있습니다.