- Slash command
/memeuntuk mengirim meme acak ke kanal Discord - Slash command
/musikuntuk mengontrol koneksi voice dasar - Slash command
/playuntuk memutar audio dari URL YouTube - Slash command
/stopuntuk menghentikan audio yang sedang diputar - Slash command
/queueuntuk melihat antrean musik - Sistem antrean musik per server agar
/playberikutnya menunggu lagu aktif selesai - Aksi musik
gabunguntuk membuat bot masuk ke voice channel pengguna - Aksi musik
keluaruntuk membuat bot keluar dari voice channel - Aksi musik
statusuntuk mengecek koneksi voice bot - Validasi konfigurasi environment wajib sebelum bot dijalankan
- Pembacaan file
.envotomatis saat menjalankan bot - Tidak membutuhkan database pada versi awal
- Penyimpanan koneksi voice sementara selama proses bot berjalan
- Dukungan voice Discord terbaru melalui DAVE/E2EE
- Struktur command yang modular dan mudah dikembangkan
- Runtime Node.js untuk voice musik YouTube
- Struktur backend Ruby tetap tersedia sebagai fondasi awal
- Unit test untuk konfigurasi, katalog meme, command musik, dan registry voice
- Ruby
- discordrb
- Bundler
- Rake
- Minitest
- Node.js
- discord.js
- @discordjs/voice
- @snazzah/davey
- dotenv
- yt-dlp
- FFmpeg
- Discord API
- Discord slash command
- Discord voice channel
- libsodium
pal/
│── bin/
│ └── pal
│── lib/
│ ├── pal/
│ │ ├── commands/
│ │ │ ├── meme_command.rb
│ │ │ ├── music_command.rb
│ │ │ ├── play_command.rb
│ │ │ └── stop_command.rb
│ │ ├── audio_source_resolver.rb
│ │ ├── bot.rb
│ │ ├── commands.rb
│ │ ├── config.rb
│ │ ├── meme_catalog.rb
│ │ ├── version.rb
│ │ └── voice_registry.rb
│ └── pal.rb
│── test/
│ └── pal/
│ ├── audio_source_resolver_test.rb
│ ├── config_test.rb
│ ├── meme_catalog_test.rb
│ ├── music_command_test.rb
│ └── voice_registry_test.rb
│── src/
│ └── index.js
│── .env.example
│── .gitignore
│── .ruby-version
│── Gemfile
│── Gemfile.lock
│── package-lock.json
│── package.json
│── README.md
└── Rakefile
-
Persiapan Lingkungan: Pastikan komputer sudah terinstal Node.js 22+, npm, yt-dlp, dan FFmpeg untuk fitur musik YouTube.
-
Masuk ke Folder Proyek:
cd pal -
Install Dependensi Node.js:
npm install
-
Siapkan Environment: Salin file contoh environment, lalu isi token dan ID Discord.
cp .env.example .env
Isi
.env:DISCORD_BOT_TOKEN=token_bot_discord DISCORD_CLIENT_ID=application_client_id DISCORD_GUILD_ID=id_server_discord
-
Invite Bot ke Server Discord: Invite bot melalui Discord Developer Portal dengan scope
botdanapplications.commands. -
Jalankan PAL:
npm start
-
Gunakan Bot di Discord: Jalankan command berikut dari server Discord:
/meme /musik /play /stop /queue
Untuk
/musik gabungdan/play, pastikan pengguna sudah berada di voice channel. Jika audio sedang diputar, command/playberikutnya akan otomatis masuk antrean.
npm installuntuk menginstall dependensi runtime Node.js.npm startuntuk menjalankan PAL dengan dukungan voice DAVE/E2EE.npm run voice:reportuntuk mengecek dependency voice, DAVE, Opus, dan FFmpeg.node --check src/index.jsuntuk mengecek sintaks runtime Node.js.bundle installuntuk menginstall dependensi Ruby.bundle exec ruby bin/paluntuk menjalankan runtime Ruby lama.bundle exec rake testuntuk menjalankan unit test Ruby.ruby -c lib/pal/bot.rbuntuk mengecek sintaks file bot utama.
Bot membutuhkan aplikasi Discord yang dibuat melalui Discord Developer Portal.
Permission yang direkomendasikan:
Send MessagesUse Slash CommandsConnectSpeak
Saat pengembangan, isi DISCORD_GUILD_ID agar update slash command muncul cepat di satu server. Jika DISCORD_GUILD_ID kosong, command akan didaftarkan secara global dan bisa membutuhkan waktu lebih lama untuk muncul di Discord.
Fitur voice Discord sekarang membutuhkan dukungan DAVE/E2EE. Runtime Node.js di src/index.js memakai @discordjs/voice dan @snazzah/davey agar PAL bisa tersambung ke voice channel modern.
Untuk macOS dengan Homebrew, dependency native dapat diinstall menggunakan:
brew install yt-dlp ffmpeg opus libsodiumDikembangkan oleh:
- @franzxml