# {PROJECT_NAME} Discord Bot PRD

> 이 문서가 법. 여기 없으면 안 만듦. 여기 있으면 반드시 만듦.
>
> 작성일: {DATE}
> 버전: 1.0

---

## 1. 한 줄 요약

**[서버/커뮤니티]**를 위한 **[핵심 기능]** 디스코드 봇

예시: "게임 서버를 위한 경기 매칭 및 전적 관리 봇"

---

## 2. 문제 정의

### 2.1 현재 문제

| 문제 | 심각도 | 현재 해결책 |
|------|--------|-------------|
| [문제 1] | 높음/중간/낮음 | [기존 방식] |

### 2.2 이 봇의 해결책

[이 봇이 어떻게 해결하는지]

---

## 3. 타겟 서버

### 3.1 주요 사용처
- **서버 유형**: [예: 게임 커뮤니티, 스터디 그룹]
- **규모**: [예: 100-1000명]
- **활동 패턴**: [예: 저녁 시간대 활발]

### 3.2 사용자 역할
| 역할 | 권한 | 사용 기능 |
|------|------|----------|
| 관리자 | 모든 명령어 | 설정, 관리 |
| 모더레이터 | 관리 명령어 | 경고, 뮤트 |
| 일반 사용자 | 기본 명령어 | 조회, 참여 |

---

## 4. 명령어 정의

### P0 (Must Have) - 없으면 출시 불가

| 명령어 | 설명 | 권한 | 예시 |
|--------|------|------|------|
| `/help` | 도움말 표시 | 모든 사용자 | `/help` |
| `/ping` | 봇 상태 확인 | 모든 사용자 | `/ping` |
| `/[기능]` | [설명] | [권한] | `/[기능] [옵션]` |

### P1 (Should Have)

| 명령어 | 설명 | 권한 | 예시 |
|--------|------|------|------|
| [명령어] | [설명] | [권한] | [예시] |

### P2 (Nice to Have)

| 명령어 | 설명 | 비고 |
|--------|------|------|
| [명령어] | [설명] | [추후 검토] |

---

## 5. Constraints (AI 경계)

### ALWAYS (무조건 실행)
- [ ] Slash Command 사용 (prefix 명령어 지양)
- [ ] 권한 체크 후 실행
- [ ] Rate Limit 준수
- [ ] 에러 발생 시 사용자에게 알림
- [ ] 명령어 실행 로깅

### ASK FIRST (확인 후 실행)
- [ ] 새 권한 추가 (Intent)
- [ ] DM 기능 추가
- [ ] 외부 API 연동

### NEVER (절대 금지)
- [ ] **스펙에 없는 명령어 구현**
- [ ] 하드코딩된 토큰/시크릿
- [ ] 무제한 API 호출
- [ ] 관리자 권한 없이 서버 설정 변경
- [ ] 스팸성 메시지 발송

### Out of Scope
- 음성 기능 - 이유: v2에서
- 다국어 - 이유: 한국어 우선

---

## 6. 봇 설정

### 6.1 필요 Intent
| Intent | 이유 | 필수 |
|--------|------|------|
| GUILDS | 서버 정보 | 필수 |
| GUILD_MESSAGES | 메시지 읽기 | 필수 |
| MESSAGE_CONTENT | 메시지 내용 (prefix용) | 선택 |
| GUILD_MEMBERS | 멤버 정보 | 선택 |

### 6.2 필요 권한
| 권한 | 이유 |
|------|------|
| Send Messages | 메시지 전송 |
| Embed Links | Embed 사용 |
| Read Message History | 이전 메시지 참조 |
| Use Slash Commands | 명령어 등록 |

---

## 7. 응답 형식

### 7.1 Embed 구조
```javascript
{
  title: "제목",
  description: "설명",
  color: 0x5865F2, // Discord Blurple
  fields: [
    { name: "필드1", value: "값1", inline: true }
  ],
  footer: { text: "봇 이름" }
}
```

### 7.2 응답 패턴

| 상황 | 응답 |
|------|------|
| 성공 | Embed (초록색) |
| 경고 | Embed (노란색) |
| 에러 | Embed (빨간색) + 에러 설명 |
| 로딩 | "처리 중..." 후 편집 |

---

## 8. 데이터 저장

### 8.1 저장 구조
```javascript
// 서버별 설정
{
  guild_id: "123456789",
  settings: {
    prefix: "!",
    language: "ko"
  }
}

// 사용자 데이터
{
  user_id: "123456789",
  // 필요한 데이터
}
```

### 8.2 DB 선택
| 옵션 | 장점 | 사용 시점 |
|------|------|----------|
| JSON 파일 | 간단 | 소규모 |
| SQLite | 설치 불필요 | 중규모 |
| PostgreSQL | 확장성 | 대규모 |

---

## 9. 기술 스택

| 구분 | 선택 | 이유 |
|------|------|------|
| 언어 | Node.js / Python | [이유] |
| 라이브러리 | discord.js / discord.py | [이유] |
| DB | SQLite / PostgreSQL | [이유] |
| 호스팅 | Railway / Heroku / VPS | [이유] |

---

## 10. Edge Cases

| 상황 | 예상 결과 |
|------|----------|
| 권한 없는 사용자 | "권한이 없습니다" Embed |
| 없는 명령어 | 무시 (Slash Command) |
| Rate Limit | 재시도 또는 대기 안내 |
| 봇 재시작 | 진행 중 작업 정리 |
| 서버에서 추방 | 데이터 보존 (30일) |

---

## 11. 완료 체크리스트

### 기능
- [ ] P0 명령어 전체 동작
- [ ] 권한 체크 동작
- [ ] 에러 핸들링 완료

### 품질
- [ ] Discord ToS 준수
- [ ] Rate Limit 대응
- [ ] 로깅 시스템

### 배포
- [ ] 봇 초대 링크 생성
- [ ] 문서 작성
- [ ] 호스팅 설정

---

## 변경 로그

| 날짜 | 버전 | 변경 내용 | 작성자 |
|------|------|----------|--------|
| {DATE} | 1.0 | 최초 작성 | |
