- Add `discord.js-selfbot-v13` as a git submodule in `vendor/` - Update `pnpm-workspace.yaml` to include the new submodule path - Modify `.gitmodules` to track the submodule repository - Change `discord.js-selfbot-v13` dependency in `package.json` to use `workspace:*` - Create implementation and design documents for the submodule integration
4.5 KiB
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.