%
ISTANBUL'a taşınmamıza özel Oyun Sunucularında %10 İNDİRİM (sadece yeni müşterilere özel)
Discord Botları

Discord botu 7/24 nasıl aktif tutulur?

TheCrewHost EkibiGüncellendi: 10 dk okuma

Kısa cevap

Discord botu yalnızca onu çalıştıran süreç açık ve Discord'un gateway'ine bağlı olduğu sürece çevrimiçidir. Botu 7/24 aktif tutmak için onu kendi bilgisayarında ya da uyku moduna geçen ücretsiz platformlarda değil, sürekli açık bir sunucuda çalıştırırsın. pm2 veya systemd gibi bir süreç yöneticisi botu çökmelerden ve yeniden başlatmalardan sonra otomatik ayağa kaldırır. Token'ı ortam değişkeninde tutar, yalnızca gereken intent'leri ister ve logları izlersin.

Discord botu neden çevrimdışı olur?

Bot, senin yazdığın program çalıştığı ve Discord'un gateway'ine açık bir WebSocket bağlantısı tuttuğu sürece çevrimiçidir; süreç durduğu anda yeşil nokta kaybolur. Discord senin kodunu barındırmaz. Botun, token ile giriş yapan, olayları dinleyen ve onlara yanıt veren bir istemciden ibarettir; yani tamamen onu çalıştıran makineye ve sürece bağımlıdır.

Sebepler çoğu zaman tahmin edilebilir. Evdeki bilgisayar uyku moduna geçer, güncelleme için yeniden başlar ya da internet bağlantısı kopar. Terminal penceresini kapatmak süreci sonlandırır. Yakalanmamış bir hata botu çökertir ve onu yeniden başlatacak bir şey yoktur. Sistem, bellek yetmediği için süreci öldürür. Ya da bot hiç bağlanamaz, çünkü token sıfırlanmıştır veya Developer Portal'da açılmamış bir intent istiyordur; Discord bu durumda bağlantıyı 4014 kapanış koduyla reddeder.

Ücretsiz platformlar botu neden açık tutamaz?

Ücretsiz platformların çoğu, bir HTTP isteği geldiğinde uyanan web uygulamaları için tasarlanmıştır ve boşta bekleyen her şeyi askıya alır. Discord botu ise HTTP isteği almaz; kendi giden bağlantısını açar ve olay bekler. Platform bunu boşta duran bir uygulama olarak görür ve uyutur. Küçük bir web sunucusu ekleyip onu birkaç dakikada bir dışarıdan pinglemek gibi yaygın çözümler kırılgandır ve çoğu zaman platformun kullanım koşullarına aykırıdır.

Paylaşılan altyapının daha az bilinen bir sorunu da var. Discord, çok sayıda geçersiz API isteği yapan IP adreslerini geçici olarak kısıtlar; bu sınır şu an 10 dakikada 10.000 istektir. Ücretsiz bir platformda botun, giden IP adresini başka birçok kişinin projesiyle paylaşır ve onlardan biri hatalı davranırsa senin botun da API'den engellenebilir. Ücretsiz katmanlar denemeler için uygundur, ama bir topluluğun güvendiği bot için değil.

Botu nerede barındırmalısın: ev bilgisayarı, VPS mi bot hosting mi?

Sürekli açık kalması gereken bir bot için seçim, kendin yönettiğin bir VPS ile yönetilen bot hosting arasındadır; ev bilgisayarı ancak ara sıra yaşanan kesintileri kabul edersen işe yarar. Gateway üzerinden çalışan bir botun açık porta veya sabit IP'ye ihtiyacı yoktur, çünkü Discord'a yalnızca giden bağlantılar kurar. Gereken şey hiç uyumayan bir makine, kararlı bir bağlantı ve kütüphanenin önbellekleri için yeterli bellektir.

TheCrewHost iki yolu da İstanbul'dan sunar. Discord bot hosting, Node.js (discord.js) ve Python (discord.py) botlarını npm ve pip desteği, dosya yöneticisi ve ücretsiz DDoS korumasıyla 7/24 çalıştırır. KVM tabanlı VPS ise botunu, veritabanını ve bir yönetim panelini yan yana çalıştırabileceğin tam root erişimi verir.

SeçenekKesintisizlikSana düşen işKimin için
Ev bilgisayarıUyku, güncelleme veya bağlantı kopmasında dururMakineyi açık ve güncel tutmakGeliştirme ve test
Ücretsiz uygulama platformuBoşta askıya alınır, IP paylaşılırUyanık tutma hileleriKısa denemeler
Yönetilen bot hostingSürekli açık, panelden başlatılırKodu yüklemek, bağımlılıkları kurmakÇoğu topluluk botu
Root erişimli VPSSürekli açık, yeniden başlatmayı sen kurarsınGüncellemeler, süreç yöneticisi, güvenlikBüyük botlar, çoklu servis, özel altyapı

pm2 ve systemd botu nasıl ayakta tutar?

Süreç yöneticisi botunu arka planda başlatır, çöktüğünde yeniden başlatır ve sunucu yeniden açıldığında geri getirir; 7/24 çalışma için gereken tam olarak budur. pm2, Node.js dünyasında yaygın seçimdir ve Python betiklerini de çalıştırabilir. pm2 start index.js --name mybot botu başlatır, pm2 save süreç listesini kaydeder, pm2 startup ise pm2'yi sistemin açılış servisine kaydeden komutu ekrana yazar; o komutu da çalıştırdığında bot yeniden başlatmadan sonra kendiliğinden döner.

Çoğu modern Linux dağıtımında yerleşik gelen systemd aynı işi ek yazılım olmadan yapar. Kullanıcıyı, çalışma dizinini ve ExecStart komutunu belirten küçük bir unit dosyası yazar, Restart=on-failure ve bir RestartSec gecikmesi ekler, ardından servisi systemctl enable --now ile etkinleştirirsin. Loglar sistem günlüğüne gider ve journalctl -u ile servis adını yazarak onları okursun.

Hangisini seçersen seç, yeniden başlatmaların arasına bekleme koy. Çökme döngüsüne giren bir bot her başlatmada yeniden giriş yapar; Discord ise tüm shard'lar dahil 24 saatte 1.000 gateway girişine (IDENTIFY) izin verir. Bu sınır aşılırsa botun tüm oturumları kapatılır ve token'ı sıfırlanır. pm2'nin --exp-backoff-restart-delay seçeneği ve systemd'de makul bir RestartSec değeri bunun önüne geçer.

Bot token'ını nasıl güvende tutarsın?

Token'a şifre gibi davran: ona sahip olan herkes botun adına giriş yapabilir ve botun sahip olduğu bütün yetkileri kullanabilir. Onu asla kaynak koda yazma, Git'e gönderme ya da loglarda ve hata mesajlarında yazdırma. Bunun yerine bir ortam değişkenine koy ve kodun başlangıçta oradan okusun; örneğin Node.js'te process.env.DISCORD_TOKEN, Python'da os.environ ile.

Yaygın yöntem, kodun yanında duran, .gitignore listesine eklenmiş ve yalnızca botun kullanıcısının okuyabildiği (chmod 600) bir .env dosyasıdır. Node.js 20.6 ve sonrası bu dosyayı node --env-file=.env ile doğrudan yükler, eski kurulumlar dotenv paketini kullanır, Python botları ise python-dotenv ile okur. systemd'de EnvironmentFile satırı aynı işi görür; pm2 değişkenleri ecosystem dosyasından alabilir, ama o dosyayı da Git'in dışında tutman gerekir.

Token bir gün sızarsa Developer Portal'daki Bot sayfasından hemen sıfırla; eski token anında geçersiz olur, yenisi ise yalnızca bir kez gösterilir, bu yüzden sayfayı kapatmadan kaydet. Davet bağlantısını oluştururken bota yalnızca ihtiyaç duyduğu izinleri ver; böylece olası bir sızıntının vereceği zarar da sınırlı kalır.

discord.js ile discord.py arasında barındırma açısından ne fark var?

İki kütüphane de botu aynı mantıkla bağlı tutar; barındırmadaki fark çoğunlukla çalışma ortamında ve bağımlılıkların nasıl kurulduğundadır. discord.js Node.js üzerinde çalışır: bağımlılıklar package.json dosyasında tanımlanır, npm ile kurulur ve bot client.login ile bağlanır. Sunucuda npm ci komutu package-lock.json dosyasındaki sürümlerin birebir aynısını kurar; böylece canlı ortam test ettiğin ortamla aynı kalır.

discord.py Python üzerinde çalışır ve bot.run ile bağlanır. Bağımlılıklarını sistem Python'una değil, requirements.txt dosyasından bir sanal ortama (venv) kur; güncel Debian ve Ubuntu sürümleri zaten sistem genelindeki pip kurulumlarını varsayılan olarak engeller. Botu pm2 veya systemd altında çalıştırırken bu sanal ortamın içindeki Python'u göster ki doğru paketler yüklensin.

Güncellemeden önce her kütüphanenin README dosyasında istenen en düşük çalışma ortamı sürümünü kontrol et; yeni ana sürümler bu çıtayı yükseltir. İki kütüphane de üyeler ve mesajlar gibi verileri bellekte önbelleğe alır. discord.py varsayılan olarak 1.000 mesaj tutar, discord.js ise istemci seçeneklerinden önbellekleri sınırlamana ve eski kayıtları temizlemene izin verir. Büyüyen bir botu küçük bir paketin RAM'inde tutmanın en kolay yolu bu önbellek ayarlarıdır.

Botunun gerçekte hangi gateway intent'lerine ihtiyacı var?

Intent'ler Discord'a botuna hangi olayları göndereceğini söyler; yalnızca özelliklerinin kullandıklarını iste, çünkü her fazladan intent daha fazla olay işlemek ve daha fazla veri önbelleğe almak demektir. Üç intent ayrıcalıklıdır (privileged): sunucu üyeleri, durum bilgisi (presence) ve mesaj içeriği. Kodun bunları istemeden önce Developer Portal'daki Bot sayfasında Privileged Gateway Intents bölümünden açılmaları gerekir; aksi halde bağlantı 4014 koduyla kapanır ve kütüphaneler bunu izin verilmeyen intent (disallowed intents) hatası olarak gösterir.

Botların en çok takıldığı intent mesaj içeriğidir. Bu izin yoksa mesaj içerikleri boş gelir; istisnalar doğrudan mesajlar, botu etiketleyen mesajlar, botun kendi mesajları ve bağlam menüsü komutuyla kullanılan mesajlardır. Slash komutları bu izne hiç ihtiyaç duymaz; önekli komutları slash komutlarına taşımanın bir nedeni de budur. Uygulaman 10.000'den fazla kişiye ulaştığında Discord, ayrıcalıklı intent'lere erişimin sürmesi için ayrıca inceleme ister.

Bot ne zaman sharding'e ihtiyaç duyar?

Sharding, botun sunucularını birden fazla gateway bağlantısına böler. Tek bir shard en fazla 2.500 sunucu taşıyabildiği için Discord, 2.500 sunucuya ulaşan botlarda sharding'i zorunlu tutar. discord.js rehberi hazırlığa 2.000 sunucu civarında başlamayı ve shard başına yaklaşık 1.000 sunucu planlamayı önerir; Discord'un gateway bot uç noktası da botun için önerilen shard sayısını döndürür.

discord.js'te ShardingManager her shard'ı ayrı bir süreçte çalıştırır; istemcideki shards: 'auto' seçeneği ise hepsini tek süreçte tutar ve rehber bunun büyük botlarda bellek açısından ağırlaştığı konusunda uyarır. discord.py'da AutoShardedClient ve AutoShardedBot shard'ları tek süreç içinde senin yerine yönetir. Shard'lar günlük 1.000 giriş sınırını paylaştığı ve max_concurrency değeri aynı anda kaç tanesinin başlayabileceğini belirlediği için büyük botları tek seferde değil, gruplar halinde sırayla yeniden başlat.

Botu nasıl loglar ve izlersin?

Loglar botun neden düştüğünü, izleme ise düştüğünü söyler. Çıktıyı süreç yöneticisinin loglarına gönder, pm2 logs ya da journalctl ile oku ve dosyaların diski doldurmaması için pm2-logrotate modülü gibi bir log döndürme ekle. Bağlantıyı anlatan olayları kaydet: hazır olma, bağlantı kopmaları, oturumun sürdürülmesi ve hatalar. Node.js'te yakalanmamış promise hatalarını (unhandled rejection) da mutlaka logla; bunlar varsayılan olarak süreci çökertir.

Zaman içinde birkaç değeri takip et: bellek kullanımı, yeniden başlatma sayısı ve iki kütüphanenin de ping ya da gecikme değeri olarak sunduğu gateway gecikmesi. discord.py'daki on_ready olayının yeniden bağlanmalardan sonra birden fazla kez tetiklenebileceğini unutma; tek seferlik kurulum işlerini oraya koyma. Uyarı için heartbeat kontrolü kullan: bot her dakika harici bir izleme servisine haber verir, haber kesildiğinde sana bildirim gelir.

Botu kesintiye uğratmadan nasıl güncellersin?

Gateway botunda süreci sıfır kesintiyle değiştirmek mümkün değildir, ama iyi planlanmış bir yeniden başlatma aradaki boşluğu birkaç saniyeye indirir. Yavaş işleri yeniden başlatmadan önce yap: yeni kodu çek, npm ci veya pip install komutunu çalıştır ve eski sürüm hâlâ çevrimiçiyken testlerini koştur; ardından tek bir yeniden başlatma yap. Yeni sürümü aynı token'la eskisinin yanında asla başlatma; iki kopya da her olayı alır ve botun her şeye iki kez cevap verir.

Bazı değişiklikler hiç yeniden başlatma gerektirmez. discord.py uzantıları (cog'lar) reload_extension ile yeniden yüklenebilir, discord.js botları da komut modüllerini çalışırken yeniden yükleyebilir. Slash komutlarını her açılışta değil, yalnızca tanımları değiştiğinde ayrı bir dağıtım betiğiyle kaydet. Shard'lı botlar shard shard yeniden başlatılabilir; yalnızca slash komutu kullanan botlar ise etkileşimleri gateway yerine HTTP üzerinden alarak yük dengeleyici arkasında sıradan bir web uygulaması gibi dağıtılabilir.

Discord botunu Linux sunucuda 7/24 çalıştırma adımları

  1. 1

    Sunucuyu hazırla

    Sistemi güncelle, bot için root olmayan ayrı bir kullanıcı oluştur ve kütüphanene göre güncel bir Node.js LTS sürümünü ya da venv destekli Python 3'ü kur.

  2. 2

    Kodu gizli bilgiler olmadan yükle

    Depoyu klonla veya dosyaları SFTP ile yükle. .env dosyasının ve token içeren her dosyanın Git'in dışında kaldığından emin ol.

  3. 3

    Bağımlılıkları kur

    discord.js için npm ci çalıştır; discord.py için bir sanal ortam oluşturup requirements.txt dosyasını kur. Hataları bot servise bağlanmadan önce şimdi çöz.

  4. 4

    Token'ı ortam değişkeni yap

    Yalnızca botun kullanıcısının okuyabildiği bir .env dosyası ya da systemd için bir EnvironmentFile oluştur ve kodunda token'ı oradan oku.

  5. 5

    Intent'leri kontrol et

    Developer Portal'da yalnızca kodunun istediği ayrıcalıklı intent'leri aç. Botu bir kez ön planda çalıştırıp giriş yaptığını ve bir komuta cevap verdiğini doğrula.

  6. 6

    Süreç yöneticisine bağla

    Botu pm2 ile üstel bekleme süreli yeniden başlatma seçeneğiyle başlat ya da Restart=on-failure ve RestartSec içeren bir systemd unit dosyası oluştur.

  7. 7

    Yeniden başlatmaya dayanıklı yap

    pm2 save ve pm2 startup çıktısındaki komutu çalıştır ya da unit için systemctl enable kullan. Sunucuyu bir kez yeniden başlatıp botun kendiliğinden döndüğünü gör.

  8. 8

    Log ve uyarıları kur

    Log döndürmeyi etkinleştir, bellek kullanımını ve yeniden başlatma sayısını izle, bot haber vermeyi bıraktığında seni uyaran bir heartbeat izleyici ekle.

Sık Sorulan Sorular

Bilgisayarımı açık bırakarak botu 7/24 aktif tutabilir miyim?

Teknik olarak evet, ama o zaman botun çalışma süresi bilgisayarının hiç uyumamasına, güncelleme için yeniden başlamamasına, elektriğin ve internetin kesilmemesine bağlı olur. Bunlardan herhangi biri, sen fark edip yeniden başlatana kadar botu çevrimdışı bırakır. Geliştirme için sorun değildir; başkalarının güvendiği bir bot için onu sürekli açık bir sunucuya taşı ve kendi kendine yeniden başlaması için bir süreç yöneticisi kullan.

Botum neden her komuta iki kez cevap veriyor?

Neredeyse her zaman aynı token'la çalışan iki bot kopyası vardır: biri bilgisayarında, biri sunucuda ya da pm2'nin veya unutulmuş bir terminalin hâlâ açık tuttuğu eski bir süreç. Her kopya her olayı alır ve ayrı ayrı cevap verir. Tüm örnekleri durdur, pm2 list çıktısını ve çalışan süreçleri kontrol et, ardından tam olarak bir tane başlat.

Bot çevrimiçi görünüyor ama komutlara cevap vermiyor. Neden?

Üç şeyi kontrol et. Birincisi intent'ler: mesaj içeriği açık değilse önekli komutlar boş mesaj görür. İkincisi izinler: botun kanala erişimi ve oraya mesaj gönderme yetkisi olmalıdır. Üçüncüsü slash komutlarına 3 saniye içinde ilk yanıtın verilmesi gerekir; yavaş işlerde önce yanıtı ertele (defer), sonra devam mesajı gönder. Etkileşim token'ı 15 dakika geçerlidir.

Disallowed intents hatası ne anlama gelir?

Kodun, uygulaman için açılmamış ayrıcalıklı bir intent istiyor demektir; sunucu üyeleri, durum bilgisi ya da mesaj içeriği gibi. Discord bağlantıyı 4014 kapanış koduyla kapatır. Developer Portal'da Bot sayfasındaki Privileged Gateway Intents bölümünden ilgili intent'i aç ya da ihtiyacın yoksa kodundan kaldır. İnceleme eşiğini geçmiş uygulamaların önce onay alması gerekir.

Bir Discord botu ne kadar RAM'e ihtiyaç duyar?

Birkaç sunucuda çalışan küçük bir moderasyon veya yardımcı bot genellikle birkaç yüz megabayt ya da daha azıyla çalışır. Bellek ihtiyacı sunucu sayısıyla, önbelleğe alınan üye ve mesajlarla, müzik çalma veya görsel işleme gibi özelliklerle artar. Botunun gerçek kullanımını birkaç gün pm2 monit veya top ile ölç, en yüksek değerin üzerinde pay bırak ve ihtiyacın olmayan önbellekleri sınırla.

pm2 mi systemd mi kullanmalıyım?

İkisi de güvenilirdir. pm2'yi öğrenmek daha hızlıdır, logları ve bellek kullanımını tek bakışta gösterir ve birkaç Node.js uygulaması çalıştıran geliştiricilere uyar; Python betiklerini de çalıştırabilir. systemd ise ek yazılım gerektirmez, çoğu Linux sunucusunda zaten vardır ve sistem günlüğüyle bütünleşir. Yönetilen bot hostingte genellikle ikisine de gerek kalmaz, çünkü botu panel başlatır ve durdurur.

Discord botu için açık port veya sabit IP gerekir mi?

Normal bir gateway botu için hayır. Bot yalnızca Discord'un gateway'ine ve API'sine giden bağlantılar kurar; port yönlendirme veya sabit IP gerekmez. İstisna, etkileşimleri bir interactions endpoint adresi üzerinden HTTP ile alan botlardır; bu botlar Discord'un ulaşıp doğrulayabileceği herkese açık bir HTTPS adresine ihtiyaç duyar.

Oyuncu ve geliştirici topluluğumuzla bağlantı kurun

Anında destek alın, deneyimlerinizi paylaşın ve en son haberlerden haberdar olun

Join Discord