- Added a new implementation plan for separating text moderation and voice recording configurations. - Introduced new configuration keys for text and voice guild/channel IDs with backward compatibility. - Updated moderation capture and backlog sync to filter based on the new text-specific settings. - Split shared UI state into distinct text and voice fields, ensuring backward compatibility. - Enhanced the static dashboard to support separate selections for text and voice channels. - Created a new media subsystem for audio playback, allowing users to queue, play, skip, and stop audio sources. - Defined API routes for media control and integrated with existing voice functionalities.
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
PATHuntuk proses muxing audio. - 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
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
Database
Default database adalah SQLite di .muxer-queue.db. PostgreSQL dapat dipakai dengan DATABASE_TYPE=postgres dan konfigurasi DATABASE_URL atau variabel POSTGRES_*.
# 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
.oggper 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, dan moderation review.
- 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_TYPE—sqliteataupostgres.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.