- Logger.Timestamp now formats via Intl with timeZone Asia/Seoul, so
the timestamp is correct regardless of the container/host TZ. The
previous setHours(+9) hack assumed the system clock was UTC.
- Transcode.mp3BufferToPcmStream now attaches error/stderr handlers
to the ffmpeg child process and its streams, swallows EPIPE on
early downstream close, and force-kills on spawn error so failed
conversions can't leak processes. Log level bumped from 'quiet'
to 'error' so real ffmpeg errors surface.
- package.json homepage/bugs/repository pointed at github.com/tkrmagid/bot.ts
which doesn't reflect this repo. Repoint to the actual Gitea origin.
Handler.ts iterated readdirSync(COMMANDS_PATH) without filtering, so
any .d.ts declaration file, .js.map source map, or non-class module
that landed in commands/ would crash startup with 'mod.default is not
a constructor'. Restrict loading to .ts/.js (excluding .d.ts and maps)
and skip modules without a default-exported constructor.
- New optional env SIGNATURE_HOST overrides the hardcoded
192.168.10.5:2967 (defaults preserved for back-compat).
- WebSocket now reconnects with exponential backoff (1s, 2s, 4s ...
capped at 30s) on close/error. Previously a dropped signature
server connection silently disabled signature playback until the
bot was restarted.
- Add rootDir: ./src so tsc no longer errors with TS5011 demanding it
be set explicitly alongside outDir.
- Add ignoreDeprecations: 6.0 to silence the TS5101 baseUrl deprecation
warning until baseUrl is removed in TS 7.
- Mention/emoji regexes used [(0-9)]{18}; '(' and ')' inside a character
class are literal so this matched the bracket chars themselves and
hard-fixed the ID length to 18. Discord snowflakes are 17-20 digits
(older 2015-2017 accounts are 17, 2024+ trend toward 19-20). Switch
to \\d{17,20} and capture the ID for member lookup.
- Tighten emoji regex name segment from .* (greedy, eats across emojis)
to [^:]+ so adjacent emojis no longer collapse into one match.
- Rename getSorce -> getSource.
stmt.user.update was issuing UPDATE guilds instead of UPDATE users,
so any DB.user.update() call would silently corrupt guild rows that
happened to share the same WHERE clause shape and never touch the
intended user row.
코드베이스 분석 결과를 반영해 README를 placeholder에서 실사용 가능한 문서로 개편.
주요 기능, 슬래시/prefix 명령어, 기술 스택, 디렉터리 구조, 환경변수 표,
실행/Docker 절차, 동작 흐름을 정리하고, 현재 tsconfig 결함으로 인한
빌드 실패(TS5101/TS5011)와 해결 방법을 명시.