# 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`에 존재하던 일부 깨진 문자열은 빌드를 막는 구간 위주로 우선 복구했습니다.
- 세션은 메모리 기반이므로 봇 재시작 시 진행 중 낚시 세션은 유지되지 않습니다.
