Müzik botu, /çal yazan kişinin sesli odasına girer ve istenen şarkıyı çalar; sonra gelen istekler kuyruğa
girer. Botun sesi de herkesinki gibi uçtan uca şifrelidir, sunucu dahil kimse araya girip dinleyemez.
Ne yapar
- YouTube’da arar ya da YouTube, SoundCloud, Bandcamp ve Twitch bağlantılarını çalar (canlı yayınlar dahil).
- Kuyruğu yönetir: sıraya ekleme, atlama, geri dönme, karıştırma, tekrar, şarkı içinde ileri geri gitme.
- Her yeni şarkıda butonlu bir şimdi çalıyor paneli gösterir.
- İsterseniz yalnızca bir grup yönetir; diğerleri şarkı geçmek için oy verir.
Bot, anten-bot kütüphanesiyle yazılmış sıradan bir bot hesabı. antend’in yanında kendi konteynerinde çalışır ve
antend’e aynı makinedeki bir iç ağdan bağlanır, yani sesi makineden çıkmadan antend’e ulaşır.
Hız
Şarkıları bulan ve getiren kısım (anten-source) sürekli açık durur. yt-dlp (videoların sesini bulan araç) bir kez yüklenir ve bağlantılarını açık tutar. Aranan şarkılar hatırlanır. Sıradaki şarkının ilk 20 saniyesi kadarı, çalan şarkı sürerken getirilir. Şarkı önce indirilmez, geldikçe çalınır; YouTube’un sesi zaten Opus biçiminde olduğu için yeniden kodlanmadan gönderilir (ses düzeyi değiştirildiğinde kodlanır).
Ölçülen süreler, komut bota ulaştıktan sonra ilk sese kadar: sıradaki şarkıya geçiş yaklaşık 50 ms; bot yeni açılmışken ilk şarkı yaklaşık 1,5 saniye. Bir odaya ilk girişte ses bağlantısının kurulması ve şifreleme anahtarlarının değiş tokuşu da buna eklenir. Bot internete sunucunun bağlantısıyla çıkar; dinleyenlerin bağlantı hızı şarkının başlamasını etkilemez.
Çalarken botun tamamı yaklaşık 110 MB bellek ve bir çekirdeğin %2’si kadar işlemci kullanır; boştayken yaklaşık 65 MB bellek ve neredeyse hiç işlemci.
Kurulum
Bu adımlar, kurulum kılavuzundaki gibi Docker Compose ile çalışan bir Anten varsayar. Komutlar sunucuda,
deploy klasöründe çalıştırılır.
-
Bot hesabını oluşturun. Sunucu ayarları → Entegrasyonlar → Botlar bölümünde “Müzik” adıyla Bot oluştur’a basın ve gösterilen anahtarı kopyalayın. Anahtar yalnızca bir kez gösterilir; bunun için Botları yönetme izni gerekir.
-
Anahtarı
deploy/.envdosyasına yazın. Anahtar yalnızca bu dosyada dursun; bir depoya ya da sohbete koymayın.MUSIC_BOT_TOKEN=anten_bot_... -
Aynı dosyada müzik botunu
COMPOSE_FILEsatırının sonuna ekleyin. Satır yoksa ya da#ile başlıyorsa bu satırı yazın. İnternete açık, HTTPS ekiyle çalışan bir sunucuda:COMPOSE_FILE=docker-compose.yml:docker-compose.server.yml:docker-compose.music.ymlSunucunun kendi ters vekil sunucusu (reverse proxy) varsa
docker-compose.server.ymlyerinedocker-compose.nginx.ymlyazın. Kendi bilgisayarınızda deniyorsanızCOMPOSE_FILE=docker-compose.yml:docker-compose.music.ymlyeterlidir. -
Botu başlatın ve kayıtlarını izleyin. İlk derleme birkaç dakika sürer. Kayıtlarda hata yoksa bot bağlanmıştır.
docker compose up -d --build docker compose logs -f music -
Botun nerede çalabileceğini gruplarıyla belirleyin. Bot her sunucuya varsayılan gruplarla üye olur. Çalacağı odalarda Görme gücü, Katılma gücü ve Konuşma gücü odanın istediğine yetmeli; cevap yazabilmesi için Mesaj gönderme izni de olmalıdır.
-
Gerekiyorsa botu AFK taşımasından muaf tutun. Sunucunuz uzun süre sessiz kalanları AFK odasına taşıyorsa bota AFK odasına taşınmaz iznini verin.
-
Deneyin. Bir sesli odaya girin, sonra mesaj kutusuna
/çalve bir şarkı adı yazın.
Kullanım
Komutlar sıradan mesajlar gibi yazılır. Mesaj kutusuna / yazınca odada kullanılabilecek komutlar ve seçenekleri
listelenir. Bot aynı anda tek bir sesli odada çalar: komutu yazanın bulunduğu odada.
Komutlar
Tabloda Türkçe adlar var. Bot İngilizce çalışıyorsa (MUSIC_LANG=en, bkz. Dil) son sütundaki adlar
kullanılır.
| Komut | Ne yapar | MUSIC_LANG=en |
|---|---|---|
/çal <şarkı> |
Adı ya da bağlantısı verilen şarkıyı çalar; bir şey çalıyorsa kuyruğun sonuna ekler | /play |
/ara <şarkı> |
Arar ve sonuçları bir menüde gösterir; seçtiğiniz şarkıyı çalar | /search |
/sıradaki <şarkı> |
Şarkıyı kuyruğun en başına ekler | /playnext |
/geç |
Sıradaki şarkıya geçer | /skip |
/önceki |
Bir önceki şarkıya döner | /back |
/dur, /devam |
Duraklatır; kaldığı yerden sürdürür | /pause, /resume |
/sar <süre> |
Şarkıda bir ana gider (1:30 ya da 90) |
/seek |
/ileri [saniye], /geri [saniye] |
İleri ya da geri sarar (varsayılan 10 saniye) | /forward, /rewind |
/başa |
Şarkıyı baştan çalar | /replay |
/tekrar <kip> |
şarkı ya da kuyruk tekrarlanır; kapalı tekrarı kapatır |
/loop (song, queue, off) |
/karıştır |
Kuyruğu karıştırır | /shuffle |
/kuyruk, /şimdi, /geçmiş |
Kuyruğu, çalan şarkıyı, son çalınanları gösterir | /queue, /now, /history |
/çıkar <sıra> |
Kuyruktan bir şarkı çıkarır | /remove |
/taşı <sıra> <yeni_sıra> |
Bir şarkının kuyruktaki yerini değiştirir | /move |
/temizle |
Kuyruğu boşaltır | /clear |
/otomatik <açık/kapalı> |
Kuyruk bitince son şarkıya benzer şarkılar çalar (YouTube’un karışık listesinden) | /autoplay (on, off) |
/söz [şarkı] |
Çalan ya da yazılan şarkının sözlerini gösterir | /lyrics |
/ses <düzey> |
Ses düzeyini yüzde olarak ayarlar (0–200) | /volume |
/bitir |
Müziği bitirir ve odadan ayrılır | /stop |
Çalanı değiştiren komutları yalnızca botla aynı sesli odada olanlar kullanabilir.
Şimdi çalıyor paneli
Her yeni şarkıda bot, şarkının adını, süresini, isteyeni ve kuyruktaki şarkı sayısını gösteren bir mesaj yazar; önceki panel silinir. Paneldeki butonlar: önceki, duraklat/sürdür, sonraki, bitir, kuyruk, Tekrar, Karıştır ve Sözler. Butonlar komutlarla aynı kurallara uyar; cevapları yalnızca basan kişi görür. Bot çalan şarkıyı adının yanında Dinliyor olarak da gösterir.
Arama
/ara ilk beş sonucu kanal adı ve süreyle bir menüde gösterir. Menüden yalnızca aramayı yapan kişi seçebilir;
Vazgeç aramayı kapatır. Sonuçlar 10 dakika seçilebilir kalır.
Kaynaklar
- Bağlantı olmayan her yazı bir YouTube aramasıdır.
- YouTube, SoundCloud, Bandcamp ve Twitch bağlantıları doğrudan çalınır. Başka sitelerin bağlantıları reddedilir.
- Spotify ve Apple Music’te yalnızca tek şarkı bağlantıları çalışır: bot sayfadan şarkının adını ve sanatçısını okur ve YouTube’da arar. Bu siteler sesi vermez; liste ve albüm bağlantıları desteklenmez.
- Şarkı sözleri lrclib.net’ten gelir. Bu servis anahtar istemez; oraya yalnızca şarkının adı gider.
Ayarlar
Botun ayarları deploy/.env dosyasına yazılır. Değiştirdikten sonra docker compose up -d ile botu yeniden
başlatın. Bütün değişkenlerin listesi Ayar başvurusu bölümündedir.
Dil
Komutlar ve cevaplar kurulumun diline (ANTEN_LANGUAGE) uyar; o da yoksa Türkçedir. MUSIC_LANG=tr ya da
MUSIC_LANG=en ile botun dilini ayrıca seçebilirsiniz.
Ne zaman ayrılır
Bot, odada dinleyen kalmayınca 2 dakika, çalacak bir şey kalmayınca 5 dakika sonra kendiliğinden ayrılır.
MUSIC_ALONE_MINUTES ve MUSIC_IDLE_MINUTES bu süreleri değiştirir; 0 verirseniz bot hiç ayrılmaz.
DJ grubu
MUSIC_DJ_GROUP bir sunucu grubunun adıysa, çalanı değiştiren komutları yalnızca o gruptakiler kullanabilir.
Şarkı istemek (/çal, /ara) herkese açık kalır.
- Gruptan olmayanlar
/geçyazınca oy verir. Odadakilerin yarısından fazlası isteyince şarkı geçilir. - Şarkıyı isteyen kişi kendi şarkısını her zaman geçebilir.
- Odada botla yalnız olan kişi her komutu kullanabilir.
Ayarlanmazsa herkes her komutu kullanabilir.
Panel, sözler ve kayıtlar
MUSIC_PANEL=0 şimdi çalıyor panelini kapatır. MUSIC_LYRICS=0 sözleri ve /söz komutunu kaldırır.
MUSIC_DEBUG=1 her komutun müziği kaç milisaniyede başlattığını kayıtlara yazar.
YouTube engellerse
YouTube, veri merkezlerindeki sunucuları çoğu zaman bot sanır ve şarkıyı vermez. Bu durumda bot sohbette bunu
söyler, kayıtlarda (docker compose logs music) da Sign in to confirm you're not a bot görünür. Aynı bot bir ev
bağlantısında çalışabilir; sorun koddan değil, sunucunun adresinden kaynaklanır.
Üç yol var. Sırayla deneyin, biri yetmezse sonrakini ekleyin; birlikte de çalışırlar. Bot açılırken
hangilerinin kurulu olduğunu kayıtlara against the bot check: ile başlayan bir satırla yazar.
1. PO token sağlayıcısı
Hesap gerektirmez; önce bunu deneyin. YouTube’un “bot değilim” jetonunu (PO token) üreten bir yardımcı, botun yanında kendi konteynerinde çalışır. Hiçbir anahtar tutmaz ve ona yalnızca bot ulaşır. Yaklaşık 100–200 MB bellek kullanır. Çoğu sunucuda yeterlidir, ama garantisi yoktur.
-
Yardımcıyı
COMPOSE_FILEsatırının sonuna ekleyin.COMPOSE_FILE=...:docker-compose.music.yml:docker-compose.music-pot.yml -
Botu yeniden başlatın.
docker compose up -d --build
2. Çerez dosyası
En kesin yoldur: bot YouTube’a bir Google hesabıyla girmiş gibi bağlanır.
-
Bilgisayarınızda tarayıcının gizli penceresini açın ve yedek hesapla YouTube’a girin.
-
Aynı sekmede
https://www.youtube.com/robots.txtadresini açın ve çerezleri Netscape cookies.txt biçiminde dışa aktarın. Bunu bir tarayıcı eklentisiyle yapabilirsiniz; kaynak kodu açık olan bir eklenti seçin. -
Gizli pencereyi hemen kapatın. Pencere açık kalırsa YouTube çerezleri yeniler ve dosyadakiler geçersiz olur.
-
Dosyayı sunucuda
deploy/youtube-cookies.txtolarak kaydedin ve yalnızca botun okuyabileceği hâle getirin.sudo chown 1000:1000 youtube-cookies.txt && sudo chmod 600 youtube-cookies.txt -
COMPOSE_FILEsatırının sonuna:docker-compose.music-cookies.ymlekleyin ve botu yeniden başlatın.docker compose up -d --build
Dosya başka bir yerdeyse .env dosyasına MUSIC_COOKIES_FILE=/yol/dosya.txt yazın. Bot dosyayı yalnızca okur
ve kendi kopyasını /tmp içinde tutar; dosyanın kendisine hiç yazmaz. Çerezler zamanla geçersiz olur: bot yine
engellendiğini söylerse adımları tekrarlayın.
3. Vekil sunucu
Bot YouTube’a sunucunun adresinden değil, başka bir adresten bağlanır; örneğin bir ev bağlantısından ya da bir
vekil sunucu (proxy) hizmetinden. deploy/.env dosyasına adresini yazın:
MUSIC_PROXY=http://kullanici:parola@proxy.example.org:3128
Yalnızca http:// vekil sunucular desteklenir, çünkü canlı yayınları ffmpeg kendisi çeker ve SOCKS kullanamaz.
https siteler vekil sunucunun içinden yine şifreli geçer. Şarkılar, aramalar ve canlı yayınlar bu adres üzerinden
gider. Odadaki sesin şifrelemesi etkilenmez: vekil sunucu yalnızca YouTube’la yapılan konuşmayı görür.
Yaş sınırlı videolar
YouTube bazı videoları yalnızca giriş yapmış yetişkin hesaplara verir; kayıtlarda Sign in to confirm your age
görünür. Bu bir bot engeli değildir, o videoya özgüdür. Bir aramanın ilk sonucu böyleyse bot sonraki sonuçları
dener ve aynı şarkının sınırsız bir yüklemesini çalar; değiştirilmiş sürümleri en sona bırakır. Hiçbiri olmazsa ya
da doğrudan böyle bir videonun bağlantısı verildiyse bot bunu söyler. Böyle bir videoyu çalmak için çerez dosyası
(2. yol) gerekir.
Gizlilik ve güvenlik
Ses ve bağlantılar
- Botun sesi uçtan uca şifrelidir. Anahtarı yokken hiç ses göndermez; şifresiz ses botun dışına çıkmaz.
- Bot YouTube’a ve izin verilen sitelere sunucunuzdan bağlanır; bu siteler sunucunun adresini görür. Anten’in kendisi hiçbir dış adrese bağlanmaz; bu bağlantıları müzik botunu kurarak siz seçmiş olursunuz.
- Sözler için lrclib.net’e yalnızca şarkının adı gider. İstemiyorsanız
MUSIC_LYRICS=0yazın.
Yazılanlar nereye gider
- Yazılan metin hiçbir zaman bir kabuğa (shell) ya da bir program seçeneğine gitmez. Ya bir YouTube araması olur ya da izin verilen bir sitenin bağlantısı. Böylece kimse botu sunucunun kendi ağındaki adreslere istek göndermeye zorlayamaz.
- YouTube, sayfasındaki JavaScript’in çalıştırılmasını ister. Bu kod Deno’da çalışır; dosyalara, ağa ve ortam değişkenlerine erişimi yoktur. Botun anahtarlarına erişebilecek Node sürecinde hiçbir zaman çalışmaz.
anten-source neyi yapabilir
- anten-source yalnızca botun önceden denetlediği aramaları ve bağlantıları alır; kendisine verileni çalıştırmaz.
- Botun anahtarını (token) hiç almaz: bot onu başlatırken ortam değişkenlerinden çıkarır.
- Sesi yalnızca makinenin içinde (127.0.0.1) ve rastgele bir gizli adresle verir; dışarıdan ulaşılamaz.
- Çerez dosyasını ve vekil sunucu adresini o kullanır; bu yüzden çerez dosyası yalnızca botun okuyabileceği hâlde durmalıdır.
Konteyner
Konteyner salt okunurdur, hiçbir ek yetkisi yoktur (cap_drop: ALL, no-new-privileges) ve root olmayan bir
kullanıcıyla çalışır. Yalnızca anahtar birimine ve /tmp klasörüne yazar. yt-dlp ve Deno’nun sürümleri sabittir.
Çalınan içeriklerin telif hakları ve sitelerin kullanım koşulları sunucuyu işletenin sorumluluğundadır.
Bakım
YouTube çalışmayı bırakırsa
YouTube zaman zaman değişir ve yt-dlp’nin güncellenmesi gerekir. bots/music/Dockerfile içindeki YTDLP
sürümünü (gerekirse YTDLP_EJS sürümünü de) yt-dlp’nin en yeni sürümüne çekin ve botu yeniden derleyin:
docker compose up -d --build music
Kendi ses botunuz
Müzik botu, anten-bot kütüphanesinin ses desteğiyle yazılmıştır (bots/music/src/main.js). VoiceHelper ses
yardımcısını (bots/voice) başlatır, bot.joinVoice(guild, room, helper) odaya girer ve şifreleme anahtarları
tarayıcılardaki yöntemle kendiliğinden anlaşılır. helper.play(...) bir dosyayı, bir akış adresini ya da bir
indiricinin çıktısını çalar. Ayrıntılar bot kılavuzunun sesli odalar bölümündedir.
Ayar başvurusu
| Değişken | Varsayılan | Anlamı |
|---|---|---|
MUSIC_BOT_TOKEN |
Botun anahtarı (gerekli) | |
MUSIC_LANG |
ANTEN_LANGUAGE, yoksa tr |
Komutların ve cevapların dili: tr ya da en |
MUSIC_SITES |
youtube.com,youtu.be,music.youtube.com,soundcloud.com,bandcamp.com,twitch.tv |
Bağlantıların gösterebileceği siteler (alt alan adları dahil) |
MUSIC_MAX_MINUTES |
180 |
En uzun şarkı, dakika |
MUSIC_QUEUE |
100 |
Kuyruktaki en fazla şarkı |
MUSIC_VOLUME |
100 |
Başlangıç ses düzeyi, yüzde (0–200) |
MUSIC_IDLE_MINUTES |
5 |
Çalacak şarkı kalmayınca kaç dakika sonra ayrılır; 0: ayrılmaz |
MUSIC_ALONE_MINUTES |
2 |
Odada dinleyen kalmayınca kaç dakika sonra ayrılır; 0: ayrılmaz |
MUSIC_DJ_GROUP |
Çalanı yalnızca bu sunucu grubu değiştirir; diğerleri oyla geçer | |
MUSIC_PANEL |
1 |
0: şimdi çalıyor paneli yok |
MUSIC_LYRICS |
1 |
0: sözler ve /söz yok |
MUSIC_DEBUG |
1: komuttan müziğe geçen süre kayıtlarda |
|
MUSIC_PROXY |
YouTube engellerse kullanılacak http:// vekil sunucu |
|
MUSIC_COOKIES_FILE |
./youtube-cookies.txt |
Çerez dosyasının yeri (docker-compose.music-cookies.yml ile) |