2026-05-15 05:45:19 +07:00
# Discord Moderation Watcher Bot
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Bot monitoring Discord yang merekam voice channel, menangkap pesan teks, menyimpan attachment, menjalankan analisis opsional, dan menyediakan dashboard web real-time.
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Stack utama: Node.js, pnpm, TypeScript, `discord.js-selfbot-v13` , `@discordjs/voice` , Express, WebSocket, Drizzle ORM, SQLite/PostgreSQL, React, Vite, Vitest, dan Biome.
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
## Prasyarat
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
- Node.js versi modern yang kompatibel dengan TypeScript dan Vite.
- pnpm 10.x. Repo ini dipin ke `pnpm@10.25.0` .
2026-05-15 21:40:20 +07:00
- 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.
2026-05-15 05:45:19 +07:00
- Native audio dependencies dapat dibuild di mesin lokal (`@discordjs/opus` , `better-sqlite3` , `sodium-native` ).
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Install FFmpeg:
2026-05-12 19:38:23 +07:00
```bash
2026-05-15 05:45:19 +07:00
# Ubuntu/Debian
sudo apt install ffmpeg
# Arch
sudo pacman -S ffmpeg
2026-05-12 19:38:23 +07:00
```
2026-05-15 21:40:20 +07:00
Install `yt-dlp` :
```bash
pnpm run install:yt-dlp
```
Script installer akan memakai package manager yang tersedia (`pacman` , `apt-get` , `dnf` , `brew` ) atau fallback ke `pipx` /`pip` .
2026-05-15 05:45:19 +07:00
## Setup
2026-05-12 19:38:23 +07:00
```bash
2026-05-15 05:45:19 +07:00
pnpm install
2026-05-12 19:38:23 +07:00
cp .env.example .env
```
2026-05-15 05:45:19 +07:00
Edit `.env` sesuai server yang dimonitor:
2026-05-12 19:38:23 +07:00
```env
2026-05-15 05:45:19 +07:00
DISCORD_TOKEN=your_token_here
MONITOR_GUILD_ID=your_guild_id_here
2026-05-12 19:38:23 +07:00
RECORDINGS_DIR=./recordings
2026-05-15 05:45:19 +07:00
WEBSERVER_PORT=3000
DATABASE_TYPE=sqlite
2026-05-12 19:38:23 +07:00
```
2026-05-15 05:45:19 +07:00
Catatan: project ini memakai selfbot library, bukan bot token Discord standar. Pastikan penggunaan sesuai risiko dan aturan platform yang berlaku.
## Menjalankan
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
```bash
# Bot/server utama dengan auto-restart
pnpm run dev
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
# Production-style start
pnpm run start
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
# Dashboard frontend dev server
pnpm run dev:web
```
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Dashboard build production disajikan dari `public/app` setelah menjalankan:
2026-05-12 19:38:23 +07:00
```bash
2026-05-15 05:45:19 +07:00
pnpm run build:web
```
## Command Development
```bash
# Type checking
pnpm run typecheck
# Lint
pnpm run lint
# Format
pnpm run format
# Test
pnpm run test
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
# Build frontend + TypeScript
pnpm run build
2026-05-15 21:40:20 +07:00
# Install external yt-dlp CLI for YouTube/search/Spotify track playback
pnpm run install:yt-dlp
2026-05-12 19:38:23 +07:00
```
2026-05-15 05:45:19 +07:00
## Database
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Default database adalah SQLite di `.muxer-queue.db` . PostgreSQL dapat dipakai dengan `DATABASE_TYPE=postgres` dan konfigurasi `DATABASE_URL` atau variabel `POSTGRES_*` .
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
```bash
# Generate migration Drizzle
pnpm run db:generate
# Jalankan migration via drizzle-kit
pnpm run db:migrate
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
# Jalankan migration programmatic
pnpm run db:migrate:programmatic
# Buka Drizzle Studio
pnpm run db:studio
2026-05-12 19:38:23 +07:00
```
2026-05-15 05:45:19 +07:00
## 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.
2026-05-15 21:40:20 +07:00
- 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.
2026-05-15 05:45:19 +07:00
- Metrics Prometheus di endpoint server.
- Retry dengan backoff untuk operasi eksternal.
- AI moderation analysis opsional via konfigurasi `AI_*` .
## Struktur Rekaman
```text
2026-05-12 19:38:23 +07:00
recordings/
2026-05-15 05:45:19 +07:00
<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
2026-05-12 19:38:23 +07:00
```
2026-05-15 05:45:19 +07:00
Segment duration dikontrol oleh `RECORDING_SEGMENT_MS` .
## Struktur Proyek
```text
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
```
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
## Konfigurasi Penting
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
Lihat `.env.example` untuk daftar lengkap. Variabel utama:
2026-05-12 19:38:23 +07:00
2026-05-15 05:45:19 +07:00
- `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_TYPE` — `sqlite` 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:
```bash
pnpm install
pnpm run typecheck
pnpm run lint
pnpm run test
pnpm run build
2026-05-12 19:38:23 +07:00
```
2026-05-15 05:45:19 +07:00
## 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.