# 2026-03-31 낚시 미니게임 Phase 1 구현 ## 개요 낚시 미니게임의 1차 구현을 추가했습니다. 이번 단계에서는 전용 스레드 기반 세션, 실시간 버튼 조작, 거리/끊어짐 게이지, 성공 시 골드 지급, 종료 시 스레드 정리까지 MVP 범위를 구현했습니다. ## 구현 내용 - `fishing` 미니게임을 공용 미니게임 레지스트리에 등록 - `/fishing cast` 명령 추가 - `/fishing end` 명령 추가 - 낚시 시작 시 `UserName's Fishing Spot` 형식의 전용 스레드 생성 - 사용자당 1개 세션만 허용하는 메모리 기반 세션 관리 추가 - `⬅️`, `⏺️`, `➡️`, `🛌` 버튼 조작 추가 - 1초 주기 상태 갱신 루프 추가 - 거리 게이지와 끊어짐 게이지 렌더링 추가 - 중앙 라인에 물고기 이모지 위치 표시 추가 - 방향 일치 시 거리 감소 및 끊어짐 게이지 증가 로직 구현 - 휴식 선택 시 끊어짐 게이지 회복 로직 구현 - 성공 시 `RefinementProfile.gold` 기준 골드 지급 연동 - 성공/실패/강제 종료 시 버튼 비활성화 및 스레드 자동 정리 추가 ## 주요 파일 - `src/commands/fishing.ts` - `src/services/FishingService.ts` - `src/events/interactionCreate.ts` - `src/services/MiniGameRegistry.ts` - `src/services/RefinementService.ts` - `src/i18n/types.ts` - `src/i18n/locales/en.ts` - `src/i18n/locales/ko.ts` - `tests/services/FishingService.test.ts` ## 검증 - `tsc` - `jest tests/services/FishingService.test.ts --runInBand` ## 비고 - Prisma Client는 최신 스키마 기준으로 다시 생성해 타입을 맞췄습니다. - `ko.ts`에 존재하던 일부 깨진 문자열은 빌드를 막는 구간 위주로 우선 복구했습니다. - 세션은 메모리 기반이므로 봇 재시작 시 진행 중 낚시 세션은 유지되지 않습니다.