Kord/Docs/Plans/Temp_Voice_Channel_Plan.md

42 lines
3.4 KiB
Markdown

# Kord - 임시 음성 채널 기능 기획 (Temporary Voice Channels)
## 체인지로그 (Changelog)
- **2026-03-27**: 최초 기획서 작성 및 확정
## 본문 (Body)
### 1. 개요
사용자가 '생성용 음성채널'에 입장하면 봇이 즉시 개인별 '전용' 임시 음성 채널을 생성해 주고 이동시켜 주는 자동화 시스템 기획서입니다.
- **제한**: 유저당 활성화된 본인 소유의 임시 채널은 1개로 제한.
- **카테고리**: 기본적으로 생성용 채널과 같은 카테고리에 생성되며 권한도 동기화. (서버 관리자가 별도 전용 카테고리를 지정할 수도 있음)
- **삭제 조건**: 서버 설정에 따라 '방장 퇴장 시' 또는 '채널 내 전원 퇴장 시(0명)' 임시 채널이 자동 삭제됨.
### 2. 티어(Tier) 기반 한도 제어
봇을 초대한 사용자의 구독 티어에 따라, 서버에서 만들 수 있는 '생성용 채널'의 개수가 제한됩니다.
(자세한 티어 정책은 **`Docs/Decisions/subscription_tiers.md`** 참고)
### 3. 임시 채널 관리 인터랙션 (UI)
임시 채널이 생성되면, 해당 음성 채널의 '텍스트 채팅(Voice Text Channel)' 영역에 **방장 전용 관리 인터랙션(버튼, Select Menu)** 이 전송됩니다.
#### 기본 기능 (Essential)
1. **채널 명 변경**: 임시 채널의 이름 변경. (DB에 저장되어 추후 재생성 시에도 해당 이름으로 복구)
2. **Kick (내보내기)**: 특정 사용자를 선택하여 강제 퇴장.
3. **Ban (차단)**:
- 두 가지 수준으로 지원 가능한지 기술팀 검토 완료. (디스코드 권한 오버라이드 지원)
- *입장 금지 모드*: 대상의 `Connect` 권한을 `false`로 설정 (채널은 보이지만 들어올 수 없음).
- *투명 방 모드(Hide)*: 대상의 `ViewChannel` 권한까지 `false`로 설정 (채널 자체가 안 보임).
#### 추가 검토 및 커뮤니티 인기 기능 (Optional Research)
디스코드 봇 사용자 커뮤니티에서 자주 요구되는 아래 기능들도 도입이 함께 기획되었습니다.
1. **인원수 제한 (User Limit)**: 슬라이더나 모달을 통해 채널 최대 인원 설정 (1~99명).
2. **잠금/해제 (Lock/Unlock)**: 외부인의 접속을 완전히 차단하고, 방장이 초대한 사람만 들어올 수 있게 전환.
3. **주인 위임 (Transfer Ownership)**: 방장이 나가더라도 채널이 유지되는 조건(`deleteWhen: EMPTY`)일 경우, 잔류 유저에게 방장 권한 인계.
- **수동 위임 (Manual)**: 방장이 컨트롤 패널 버튼을 통해 직접 타겟 유저를 지정하여 위임.
- **자동 위임 (Auto)**: 방장 퇴장 시 빈 방이 아니라면 봇이 남아있는 유저 중 서버 가입일이 가장 오래된(혹은 무작위) 유저에게 랜덤으로 위임.
- **상태 전이 정책**: 방 이름만 "새 방장의 이름 설정"으로 덮어씌우고, 기존 방장이 걸었던 '잠금(Lock)', '인원수 제한(Limit)', '차단(Ban)' 등의 보안 및 인원 설정은 변경하지 않고 그대로 현상 유지함(새 방장이 임의 조작 가능).
### 4. 개발 방향 (Proposed Actions)
- `Prisma`를 통해 `VoiceGenerator``TempVoiceChannel`, 티어 검증 로직 반영.
- `voiceStateUpdate` 이벤트 훅 기반의 동적 음성 채널 제어 아키텍처 수립.
- `interactionCreate`에서 Modal 및 SelectMenu를 처리하여 권한 조작.