Discord botunuzun kodu ne kadar iyi olursa olsun, onu Discord'a bağlayan şey tek bir metin dizisidir: bot token. Token, botun şifresidir; Gateway bağlantısında ve REST API isteklerinde botun kimliğini kanıtlar. Bu yüzden bir bot projesindeki en hassas bilgi kod değil, token'dır.
Bu yazıda token'ın ne olduğunu, Developer Portal'da gördüğünüz Application ID, Public Key ve Client Secret değerlerinden farkını, token'ı .env ve .gitignore ile nasıl saklayacağınızı, sızdığında saldırganın neler yapabileceğini ve hemen ne yapmanız gerektiğini anlatıyoruz. Botunuzu henüz oluşturmadıysanız Discord bot nasıl yapılır rehberiyle başlayın.
Bot token nedir?

Discord'un OAuth2 and Permissions sayfasına göre bot token, Developer Portal'da bir bot kullanıcısı oluşturduğunuzda üretilir ve kodunuzun bot kullanıcısı olarak kimlik doğrulamasını sağlar. Belgede özetlenen özellikleri şunlardır:
- Bir kişi adına değil, bot kullanıcısı olarak kimlik doğrular.
- Gateway bağlantılarında ve REST API çağrılarının çoğunda kullanılır.
- Botun sunucuya eklenirken aldığı izinleri taşır.
- Şifre gibi korunmalı, asla herkese açık bir yere konmamalıdır.
Kütüphane kullanırken token'ı yalnızca bir kez, giriş fonksiyonuna verirsiniz (client.login() veya bot.run()). Ham HTTP istekleri yapıyorsanız token, Authorization başlığında Bot önekiyle gönderilir:
Authorization: Bot BOT_TOKENINIZToken, Client Secret, Public Key ve Application ID farkı
Developer Portal'da birbirine benzeyen birkaç değer vardır ve yeni başlayanlar bunları sık karıştırır. discord.js rehberi de bu hataya dikkat çekiyor: kopyaladığınız değer çok daha kısaysa büyük ihtimalle token yerine client secret'ı almışsınızdır.
| Değer | Nerede | Ne için | Gizli mi? |
|---|---|---|---|
| Application ID | General Information | Uygulamanın kimliği; davet linkinde client_id, komut kaydında kullanılır | Hayır, herkese açık olabilir |
| Public Key | General Information | HTTP interactions botlarında, gelen isteğin imzasını (X-Signature-Ed25519) doğrulamak | Hayır, adı üstünde açık anahtar |
| Client Secret | OAuth2 sayfası | OAuth2 akışlarında (ör. "Discord ile giriş") kodu erişim token'ına çevirmek | Evet |
| Bot Token | Bot sayfası, "Reset Token" | Botun Gateway ve REST API'ye bot olarak giriş yapması | Evet, en hassas değer |
İki "token" türünü de ayırmak gerekir. OAuth2 kullanıcı token'ı, bir kullanıcının onay verdiği scope'larla uygulamanıza o kullanıcı adına işlem yapma yetkisi verir ve kısa ömürlüdür, yenilenmesi gerekir. Interaction token ise her etkileşimle gelir; Discord belgesine göre 15 dakika geçerlidir ve yalnızca o etkileşime yanıt/takip mesajı göndermek içindir. Bot token'ı ise siz sıfırlayana kadar geçerlidir.
Client secret özellikle "Discord ile giriş yap" gibi web akışlarında kullanılır; bu akışın genel mantığını OAuth2 ve OIDC rehberi yazısında bulabilirsiniz.
Token nasıl alınır ve neden bir kez gösterilir?
Developer Portal'da uygulamanızı açın, sol menüden "Bot" sayfasına gidin ve "Reset Token" düğmesine basıp onaylayın. Discord'un başlangıç rehberine göre token'ı yeniden üretmediğiniz sürece tekrar göremezsiniz; bu yüzden güvenli bir yerde (ör. bir parola yöneticisinde) saklamanız önerilir. Token'ı kaybettiyseniz tek yol yeniden sıfırlamaktır ve sıfırlama tüm eski token'ları geçersiz kılar.
Token'ı güvenli saklamak: .env ve .gitignore

Token'ı kaynak koduna yazmak en sık yapılan hatadır. Kod bir gün GitHub'a gönderilir, bir arkadaşla paylaşılır ya da ekran görüntüsünde görünür. Doğru yöntem, token'ı ortam değişkeninde tutmak ve kodda yalnızca değişkenin adını kullanmaktır.
Node.js (discord.js)
# .env
DISCORD_TOKEN=buraya-bot-tokeniniz// index.js
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.login(process.env.DISCORD_TOKEN);node --env-file=.env index.jsdiscord.js rehberi, .env dosyasını okumak için Node.js'in yerleşik --env-file bayrağını öneriyor; Bun ise .env dosyalarını kendiliğinden okur. Bu şekilde okunan değerler her zaman metin (string) olarak gelir.
Python (discord.py)
import os
import discord
intents = discord.Intents.default()
client = discord.Client(intents=intents)
client.run(os.getenv('DISCORD_TOKEN'))Python tarafında değişkeni terminalde, bir süreç yöneticisinin ortam dosyasında (ör. systemd EnvironmentFile=) veya Docker'ın ortam değişkenleriyle verebilirsiniz.
.gitignore
Git kullanıyorsanız .env dosyasını sürüm kontrolüne asla eklemeyin. Proje kökündeki .gitignore dosyası bunu sağlar:
# .gitignore
node_modules
.env
config.jsonToken'ı config.json içinde tutuyorsanız o dosyayı da listeye ekleyin. Konunun genel kuralları için .env dosyası ve en iyi pratikler ile .gitignore nedir yazılarına bakabilirsiniz.
Token asla istemci tarafında olmamalı
Token'ı bir web sayfasının JavaScript kodunda, mobil uygulamada, masaüstü uygulamasında ya da bir Discord Activity'nin ön yüzünde kullanmayın. Kullanıcının cihazına giden her kod okunabilir; tarayıcının geliştirici araçlarını açan herkes token'ı görür. Botla etkileşim gereken her işlemi kendi sunucunuzda çalışan bir arka uç üzerinden yapın; istemci yalnızca sizin API'nizle konuşsun. Aynı kural client secret için de geçerlidir: Discord, OAuth2 belgesinde client ID ve client secret bilgilerinin kaynak kodunda bulunmaması konusunda açıkça uyarıyor.
Botu bir paneldeki "dashboard"a bağlıyorsanız da token yalnızca sunucu tarafında, botun çalıştığı süreçte kalmalıdır.
Token sızarsa saldırgan neler yapabilir?

discord.js rehberinin verdiği senaryo, riski iyi özetliyor: token'ı ele geçiren kişi botu kendi botuymuş gibi kullanabilir. Bu da şunlar demektir:
- Botun bulunduğu her sunucuda spam atmak,
- mümkün olduğunca çok kullanıcıya DM ile spam göndermek,
- kanalları silmek,
- üyeleri atmak veya yasaklamak,
- botu girdiği tüm sunuculardan çıkarmak.
Saldırganın yapabilecekleri botun izinleriyle sınırlıdır. Bu yüzden davet linkinde Administrator gibi geniş izinler istemek, sızıntının etkisini büyütür. Yalnızca gereken izinleri istemenin pratik tarafı için botu sunucuya ekleme ve bot izinleri ve rol hiyerarşisi yazılarına bakın.
Token sızdığında ilk 5 dakika
- 1. Hemen sıfırlayın: Developer Portal'da "Bot" sayfasına gidip "Reset Token" düğmesine basın. Bu, eski token'ların hepsini geçersiz kılar ve saldırganın bağlantısını keser.
- 2. Yeni token'ı her yerde güncelleyin: Sunucudaki
.env, systemd ortam dosyası, Docker değişkenleri, CI/CD gizli değişkenleri. Eski token'la çalışan süreç artık giriş yapamaz. - 3. Kaynağı kapatın: Token herkese açık bir depoda ise dosyayı kaldırıp
.gitignore'a ekleyin. Geçmişte kaldığını unutmayın; sıfırlama yapıldığı için eski değer artık işe yaramaz. - 4. Hasarı kontrol edin: Botun bulunduğu sunuculardaki silinen kanal, atılan üye veya beklenmedik mesajları sunucu yöneticilerine bildirin.
- 5. Nasıl sızdığını bulun: Kodda kalmış bir sabit değer, bir log satırı, paylaşılan bir ekran görüntüsü veya destek kanalına yapıştırılan bir hata çıktısı olabilir.
Üretim ortamında token yönetimi
Botunuzu bir VDS veya VPS üzerinde çalıştırırken de aynı ilke geçerlidir: token koda değil ortama aittir.
- systemd: Servis dosyasında
EnvironmentFile=ile yalnızca botun kullanıcısının okuyabildiği bir dosyayı gösterin (systemd servis dosyası rehberi). - Docker:
.envdosyasını imaja kopyalamayın,.dockerignoreiçine ekleyin ve token'ı çalışma zamanında ortam değişkeni olarak verin (Dockerfile yazma rehberi). - CI/CD: GitHub Actions gibi araçlarda token'ı repository secret olarak tutun (GitHub Actions ile VPS deploy).
- Loglar: Hata ayıklarken istemci nesnesini veya ortam değişkenlerinin tamamını loglamayın.
Sunucunun kendisini güvenli tutmak için VPS güvenlik sertleştirme yazısı iyi bir başlangıçtır. Botu sürekli açık tutma adımlarının tamamı Discord botu 7/24 aktif tutma yazısında.
Token ile ilgili hata mesajları
| Hata | Anlamı | Ne yapmalı |
|---|---|---|
Gateway kapanış kodu 4004 Authentication failed | Identify sırasında gönderilen token yanlış | Token'ı doğru kopyaladığınızı, sıfırlanmadığını ve client secret olmadığını kontrol edin |
HTTP 401 / JSON kodu 40001 Unauthorized | İstek geçerli bir token taşımıyor | Authorization: Bot ... başlığını ve ortam değişkeninin gerçekten yüklendiğini kontrol edin |
Token undefined / None | Ortam değişkeni okunamadı | --env-file bayrağını veya değişken adını kontrol edin |
Diğer kodların açıklamaları için Discord API hata kodları yazısına bakın.
Sık Sorulan Sorular
Token'ı GitHub'a yanlışlıkla gönderdim, depoyu silmem yeterli mi?
Hayır. Depoyu silmek veya commit'i geri almak, token'ın daha önce kopyalanmadığını garanti etmez. Tek güvenli adım Developer Portal'da token'ı sıfırlamaktır; ardından yeni token'ı ortam değişkenlerinize yazın.
Application ID'yi paylaşmak tehlikeli mi?
Hayır. Application ID herkese açık bir kimliktir; davet linklerinde zaten görünür. Gizli tutmanız gerekenler bot token'ı ve client secret'tır.
Token'ı şifreleyip koda gömersem güvenli olur mu?
Kodu çalıştıran sürecin token'ı çözebilmesi gerekir; çözme anahtarı da kodun yanındaysa ek bir güvenlik sağlamaz. Doğru çözüm token'ı koddan tamamen ayırıp ortam değişkeni veya bir gizli bilgi yöneticisiyle vermektir.
Kullanıcı hesabımın token'ıyla bot çalıştırabilir miyim?
Bu yazı yalnızca Developer Portal'da oluşturulan bot token'larını anlatır. Botlar için Discord'un sunduğu yol bot kullanıcısıdır; platform kuralları için Discord Developer Policy ve bot kuralları yazısına bakın.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: Discord bot nasıl yapılır · Botu sunucuya ekleme · Botu 7/24 aktif tutma · .env dosyası nedir · .gitignore nedir · VPS güvenlik sertleştirme