MythEclipse f04b0f0b42 refactor(voice): optimize recording pipeline and improve performance
Refactor the voice recording and playback systems to improve efficiency, reduce latency, and enhance Docker build performance.

- **Infrastructure**: Optimize Dockerfiles using build mounts for pnpm cache and reorder layers for better caching of dependencies and build tools.
- **Backend/Gateway**:
  - Refactor `broadcast` module to use a generic event-based system instead of hardcoded functions.
  - Simplify voice recording logic by merging metadata and segment management into a unified `segment.ts`.
  - Optimize audio downsampling in `streamSetup.ts` using `Int16Array` views for better performance.
  - Implement `withFallback` utility for more robust Redis/Database command execution.
- **Frontend**:
  - Optimize audio playback visualization using pre-computed level shapes and efficient RMS calculation.
  - Reduce latency in voice commands by prioritizing WebSocket communication over HTTP.
  - Improve base64 encoding efficiency in audio transmission.
- **General**:
  - Add default value for `ADMIN_PASSWORD` in shared config.
  - Fix Docker healthcheck to use `127.0.0.1` instead of `localhost`.
2026-06-09 22:04:05 +07:00
2026-06-02 19:04:49 +07:00
2026-06-02 18:55:48 +07:00

Discord Moderation Watcher Bot

Bot monitoring Discord yang merekam voice channel, menangkap pesan teks, menyimpan attachment, menjalankan analisis opsional, dan menyediakan dashboard web real-time.

Stack utama: Node.js, pnpm, TypeScript, discord.js-selfbot-v13, @discordjs/voice, Express, WebSocket, Drizzle ORM, SQLite/PostgreSQL, React, Vite, Vitest, dan Biome.

Prasyarat

  • Node.js versi modern yang kompatibel dengan TypeScript dan Vite.
  • pnpm 10.x. Repo ini dipin ke pnpm@10.25.0.
  • FFmpeg tersedia di PATH untuk proses muxing audio dan playback media.
  • yt-dlp tersedia di PATH untuk resolve audio YouTube, search result YouTube, dan Spotify track.
  • Native audio dependencies dapat dibuild di mesin lokal (@discordjs/opus, better-sqlite3, sodium-native).

Install FFmpeg:

# Ubuntu/Debian
sudo apt install ffmpeg

# Arch
sudo pacman -S ffmpeg

Install yt-dlp:

pnpm run install:yt-dlp

Script installer akan memakai package manager yang tersedia (pacman, apt-get, dnf, brew) atau fallback ke pipx/pip.

Setup

pnpm install
cp .env.example .env

Edit .env sesuai server yang dimonitor:

DISCORD_TOKEN=your_token_here
MONITOR_GUILD_ID=your_guild_id_here
RECORDINGS_DIR=./recordings
WEBSERVER_PORT=3000
DATABASE_TYPE=sqlite

Catatan: project ini memakai selfbot library, bukan bot token Discord standar. Pastikan penggunaan sesuai risiko dan aturan platform yang berlaku.

Menjalankan

# Bot/server utama dengan auto-restart
pnpm run dev

# Production-style start
pnpm run start

# Dashboard frontend dev server
pnpm run dev:web

Dashboard build production disajikan dari public/app setelah menjalankan:

pnpm run build:web

Command Development

# Type checking
pnpm run typecheck

# Lint
pnpm run lint

# Format
pnpm run format

# Test
pnpm run test

# Build frontend + TypeScript
pnpm run build

# Install external yt-dlp CLI for YouTube/search/Spotify track playback
pnpm run install:yt-dlp

Database

Default database adalah SQLite di .muxer-queue.db. PostgreSQL dapat dipakai dengan DATABASE_TYPE=postgres dan konfigurasi DATABASE_URL atau variabel POSTGRES_*.

Jika aplikasi dijalankan di PostgreSQL production, migrasi dapat dijalankan otomatis saat startup dengan AUTO_MIGRATE_ON_STARTUP=true. Jalur ini memakai advisory lock supaya hanya satu instance yang memigrasi schema pada satu waktu.

# Generate migration Drizzle
pnpm run db:generate

# Jalankan migration via drizzle-kit
pnpm run db:migrate

# Jalankan migration programmatic
pnpm run db:migrate:programmatic

# Buka Drizzle Studio
pnpm run db:studio

Fitur

  • Voice recording ke segment .ogg per user.
  • Metadata JSON per segment audio.
  • Text message capture untuk pesan baru, edit, dan delete.
  • Attachment capture dan upload ke endpoint Picser.
  • SQLite/PostgreSQL via Drizzle ORM.
  • REST API dan WebSocket untuk dashboard.
  • Dashboard React untuk pesan, gambar, voice, media playback, dan moderation review.
  • Media playback dari direct URL, file lokal, YouTube URL, search terms, dan Spotify track URL.
  • Metrics Prometheus di endpoint server.
  • Retry dengan backoff untuk operasi eksternal.
  • AI moderation analysis opsional via konfigurasi AI_*.

Struktur Rekaman

recordings/
  <user-id>/
    <user-id>-<session-start>-0.ogg
    <user-id>-<session-start>-0.json
    <user-id>-<session-start>-1.ogg
    <user-id>-<session-start>-1.json

Segment duration dikontrol oleh RECORDING_SEGMENT_MS.

Struktur Proyek

src/
  index.ts                    Entry point Discord client dan server
  recorder.ts                 Voice recording pipeline
  recorder/                   Audio stream, decoder, segment metadata
  moderation/                 Message capture, storage, uploads, AI review
  database/                   Drizzle setup, schema, migrations
  routes/                     Express route modules
  webserver.ts                Express + WebSocket server
  retry.ts                    Retry helper berbasis p-retry
  audio/ffmpegProcess.ts      Direct ffmpeg process wrapper
frontend/                     React dashboard source
public/app/                   Dashboard build output
tests/                        Vitest tests
drizzle/migrations/           Database migrations

Konfigurasi Penting

Lihat .env.example untuk daftar lengkap. Variabel utama:

  • DISCORD_TOKEN — token akun/client yang dipakai selfbot.
  • MONITOR_GUILD_ID — guild yang dimonitor untuk moderation capture.
  • RECORDINGS_DIR — direktori output audio.
  • WEBSERVER_PORT — port HTTP/WebSocket.
  • DATABASE_TYPEsqlite atau postgres.
  • PICSER_UPLOAD_URL — endpoint upload attachment.
  • AI_ANALYSIS_ENABLED — aktifkan/nonaktifkan analisis AI.
  • AI_LLM_API_KEY, AI_LLM_BASE_URL, AI_LLM_MODEL — konfigurasi provider LLM.

Verifikasi Setelah Perubahan

Sebelum menjalankan lama atau deploy, jalankan:

pnpm install
pnpm run typecheck
pnpm run lint
pnpm run test
pnpm run build

Catatan Library Modernization

Project memakai Zod untuk validasi runtime, Drizzle untuk database, dan wrapper node:child_process langsung untuk FFmpeg. Library lama class-transformer, class-validator, dan fluent-ffmpeg sudah tidak dipakai.

S
Description
Bete Discord moderation watcher
Readme
26 MiB
Languages
TypeScript 97.1%
Nix 1%
Shell 0.8%
CSS 0.7%
PLpgSQL 0.4%