Discord botu yazmaya karar verdiğinizde ilk soru genellikle "hangi kütüphane?" oluyor. Discord resmî bir SDK sunmuyor: Community Resources sayfasında Discord'un kendisi, resmî SDK'ları sürdürmediğini ve listelediği kütüphanelerin geçerli rate limit uygulamasına sahip, yakın zamanda bakımı yapılmış ve büyük aktif bot topluluklarına sahip üçüncü taraf projeler olduğunu belirtiyor.
Bu yazıda JavaScript/TypeScript, Python, Java, C#, Rust ve Go ekosistemlerinden 13 kütüphaneyi, kendi README ve belgelerinde yazanlara dayanarak karşılaştırıyoruz. Yıldız sayısı veya indirme istatistiği gibi değişken rakamlara yer vermiyoruz; odak, dil, çalışma ortamı gereksinimi ve tasarım yaklaşımı.
Hızlı karşılaştırma tablosu

| Kütüphane | Dil | Belgelerdeki gereksinim | Öne çıkan özellik |
|---|---|---|---|
| discord.js | JavaScript/TypeScript | Rehber güncel Node.js LTS öneriyor | Nesne yönelimli, API'nin tamamını kapsadığını belirtiyor |
| Sapphire | JavaScript/TypeScript | Node.js 18+, discord.js 14.x | discord.js üzerine komut ve olay framework'ü |
| Discordeno | JavaScript/TypeScript | Node.js, Deno veya Bun | Varsayılan olarak önbelleksiz, fonksiyonel API |
| discord.py | Python | Python 3.8+ | async/await, rate limit yönetimi |
| Pycord | Python | Python 3.10+ (API belgesi) | discord.py'nin bakımı yapılan fork'u |
| nextcord | Python | Python 3.12+ | Yerleşik slash command desteği |
| hikari | Python | Python 3.11 ile 3.15 arası | Statik tipli mikro framework, GatewayBot ve RESTBot |
| interactions.py | Python | Python 3.10+ | Otomatik komut senkronizasyonu, eklenti sistemi |
| JDA | Java (Kotlin uyumlu) | Java SE 8+ | Olay sistemi, RestAction, özelleştirilebilir önbellek |
| Discord4J | Java, Kotlin, JVM | README'de belirtilmiyor | Reactive (reactive-streams), modüler |
| Discord.Net | C#/.NET | .NET 8.0 ve 9.0 | Paketlere bölünmüş yapı, Interactions servisi |
| serenity | Rust | README'de belirtilmiyor | Otomatik sharding ve önbellek, poise framework |
| DiscordGo | Go | Çalışan bir Go ortamı | Düşük seviyeli bağlamalar |
JavaScript ve TypeScript
discord.js
discord.js, Node.js için Discord API'siyle çalışmayı kolaylaştıran bir modül. README'si kütüphaneyi nesne yönelimli, öngörülebilir soyutlamalara sahip, performanslı ve Discord API'sinin yüzde 100'ünü kapsayan bir yapı olarak tanımlıyor. Depo; REST, WebSocket, builders, voice ve collection gibi ayrı yayımlanan paketlerden oluşuyor. Ses için @discordjs/voice, WebSocket sıkıştırması için zlib-sync gibi isteğe bağlı paketler var. Resmî rehber discordjs.guide adresinde ve kurulum için güncel Node.js LTS sürümünü öneriyor.
Türkçe kaynak ve örnek bulmanın en kolay olduğu kütüphane olduğu için JavaScript bilen biri için doğal başlangıç noktası. Adım adım kurulum için Discord bot nasıl yapılır yazımıza bakabilirsiniz.
Sapphire
Sapphire ayrı bir API kütüphanesi değil, discord.js üzerine kurulan bir framework. Kurulumda @sapphire/framework ile birlikte discord.js@14.x yüklenir ve belgelere göre en az Node.js 18 gerekir. Komutları, dinleyicileri (listener) ve diğer parçaları dosya yapısından otomatik bulur; bunun için package.json içinde main alanını giriş dosyanıza ayarlamanız zorunlu. Komut ön koşulları (preconditions), argüman ayrıştırma ve eklentiler gibi hazır yapılar sunduğu için orta ve büyük ölçekli discord.js projelerinde düzen sağlar.
Discordeno
Discordeno Node.js, Deno ve Bun üzerinde çalışır. README'si kütüphanenin varsayılan olarak önbellek tutmadığını, sınıf kalıtımı yerine fonksiyonel bir API kullandığını ve REST ile Gateway gibi bileşenleri ayrı süreçler olarak çalıştırmaya izin verdiğini anlatıyor. Kullanılmayan nesne özelliklerini kaldırarak bellek tasarrufu sağlamak ve tek bir REST noktası üzerinden global rate limit'i yönetmek gibi büyük bot senaryolarına odaklanıyor. Belgelerinde ölçekli mimari için ayrı bir "bigbot" rehberi var. Küçük bir bot için gereğinden karmaşık gelebilir; sharding ve çok süreçli mimari düşünüyorsanız sharding yazımızla birlikte değerlendirin.
Python
Python ekosisteminde beş kütüphane öne çıkıyor. Hepsinin belgelerinde slash komut örnekleri var ama API yüzeyleri birbirinden farklı.
discord.py
README'ye göre Python ile yazılmış modern, kullanımı kolay, async hazır bir API sarmalayıcısı; düzgün rate limit yönetimi ve hız ile bellek optimizasyonu öne çıkan özellikleri. Python 3.8 veya üzeri gerekiyor; ses desteği için discord.py[voice] ekstrası ve PyNaCl kullanılıyor. Slash komutları app_commands modülü ve CommandTree ile yazılıyor. Ayrıntılı başlangıç için discord.py ile bot yapımı yazımıza bakın.
Pycord
Pycord kendi belgelerinde discord.py'nin bakımı yapılan bir fork'u olarak tanımlanıyor. Paket adı py-cord (pycord değil). API belgesindeki kurulum sayfası Python 3.10 veya üzerini istiyor. Önemli bir uyarı: Pycord ve discord.py aynı ortamda birlikte kurulmamalı; rehber discord.py'den geçerken önce onu kaldırmanızı, py-cord'u sonra kurmanızı söylüyor, aksi sırada sorun çıkabiliyor.
nextcord
nextcord da modern, async hazır bir Python API sarmalayıcısı olarak tanımlanıyor. Güncel README ve belgeler Python 3.12 veya üzerini şart koşuyor. Ses için nextcord[voice], ek hızlandırmalar için nextcord[speed] ekstraları var. Slash komutları @bot.slash_command dekoratörü ve SlashOption ile tanımlanıyor.
hikari
hikari kendini Discord'un v10 REST ve Gateway API'lerini destekleyen, "opinionated" ve statik tipli bir mikro framework olarak tanımlıyor; Python 3.11 ile 3.15 arası destekleniyor. İki hazır bot türü var: Gateway üzerinden olay alan GatewayBot ve yalnızca interaction alan bir HTTP sunucusu başlatan RESTBot. Varsayılan olarak bir komut framework'ü içermiyor; README bunun için lightbulb, tanjun, crescent ve arc gibi üçüncü taraf kütüphaneleri öneriyor. HTTP tabanlı bot mimarisi ilginizi çekiyorsa HTTP interactions yazımıza göz atın.
interactions.py
interactions.py'nin PyPI paket adı discord-py-interactions. README'si Discord API'sinin tamamını kapsadığını, TTL destekli dinamik önbellek ve tam otomatik komut senkronizasyonu sunduğunu belirtiyor. Belgelerine göre 5.x sürümüyle Python 3.10 veya üzeri gerekiyor. Prefix (mesaj) komutları varsayılan olarak işlenmiyor, ayrı bir eklentiyle açılıyor; bu tasarım slash komut öncelikli bir bot için mantıklı.
Python kütüphanelerinde aynı komut
Farkı görmek için aynı ping komutunun üç kütüphanedeki hâline bakalım. Kod örnekleri kütüphanelerin kendi örnek dosyalarındaki kalıplara göre yazıldı. discord.py:
import os
import discord
from discord import app_commands
class Bot(discord.Client):
def __init__(self):
super().__init__(intents=discord.Intents.default())
self.tree = app_commands.CommandTree(self)
async def setup_hook(self):
await self.tree.sync()
bot = Bot()
@bot.tree.command(description='Gecikmeyi test eder')
async def ping(interaction: discord.Interaction):
await interaction.response.send_message('Pong!')
bot.run(os.getenv('DISCORD_TOKEN'))Pycord ile ctx.respond kullanılır ve komut kaydı kütüphane tarafından yapılır:
import os
import discord
bot = discord.Bot()
@bot.slash_command(description='Gecikmeyi test eder')
async def ping(ctx: discord.ApplicationContext):
await ctx.respond('Pong!')
bot.run(os.getenv('DISCORD_TOKEN'))nextcord ise discord.py'ye benzer şekilde Interaction nesnesiyle çalışır:
import os
from nextcord import Interaction
from nextcord.ext import commands
bot = commands.Bot()
@bot.slash_command(description='Gecikmeyi test eder')
async def ping(interaction: Interaction):
await interaction.response.send_message('Pong!')
bot.run(os.getenv('DISCORD_TOKEN'))Java ve JVM

JDA (Java Discord API)
JDA, gerçek zamanlı Gateway ve REST API ile bot yazmak için açık kaynak bir kütüphane. README üç temel kavramı öne çıkarıyor: Gateway olaylarını sadeleştiren olay sistemi; callback, future veya bloklayan çağrılar arasında seçim yapabildiğiniz RestAction yapısı (rate limit'ler otomatik yönetiliyor) ve hazır ön ayarları olan özelleştirilebilir önbellek. Desteklenen en düşük Java sürümü Java SE 8; JSR 305 sayesinde Kotlin ile de rahat çalışıyor. Ses bağlantıları için README, DAVE protokolünü uygulayan ek bir bağımlılık gerektiğini belirtiyor. Maven Central üzerinden Gradle veya Maven ile kurulur.
Discord4J
Discord4J; Java, Kotlin ve diğer JVM dilleri için reactive bir kütüphane. reactive-streams protokolünü izliyor, modüllere bölünmüş yapısıyla düşük seviyeli kullanıma izin veriyor ve README'ye göre Spring ve Micronaut gibi framework'lerle entegre çalışıyor. Büyük botlar için dağıtık çalışma ve Redis tabanlı off-heap önbellek gibi ek projeleri var. Reactor ve reactive programlamaya alışkın değilseniz öğrenme eğrisi JDA'ya göre daha dik olabilir.
C#, Rust ve Go
Discord.Net
Discord.Net, Discord API'si için resmî olmayan, MIT lisanslı bir .NET sarmalayıcısı. Kurulum rehberine göre .NET 8.0 ve .NET 9.0'ı hedefliyor. NuGet'te Discord.Net meta paketi olarak gelir; isterseniz yalnızca ihtiyacınız olan parçaları (Discord.Net.WebSocket, Discord.Net.Rest, Discord.Net.Interactions, Discord.Net.Commands, Discord.Net.Webhook) kurabilirsiniz. Belgeler, eski Discord.Net-Labs dalının kullanımdan kalktığını ve ana pakete geçilmesini öneriyor.
serenity
serenity, Rust için bir Discord API kütüphanesi. README'ye göre shard bağlantıları kütüphane tarafından otomatik yönetiliyor ve olaylarla güncellenen bir önbellek sunuluyor; bir Context metodu çağrıldığında gereksiz HTTP isteklerini önlemek için önce önbelleğe bakılıyor. Slash veya metin komutlu bir bot için README, serenity üzerine kurulu poise framework'ünü, ses kanalları için de songbird kütüphanesini öneriyor.
DiscordGo
DiscordGo, Go için Discord API'sine düşük seviyeli bağlamalar (binding) sunan bir paket. README'ye göre neredeyse tüm REST uç noktalarını, WebSocket arayüzünü ve ses arayüzünü destekliyor. go get github.com/bwmarrin/discordgo ile kurulur. README'deki uyarıya dikkat: kütüphane ve Discord API'si "bitmemiş" olarak nitelendiriliyor ve ileride büyük değişiklikler olabileceği belirtiliyor. Belgeleme ağırlıklı olarak kod yorumları ve Go reference üzerinden.
Hangisini seçmelisiniz?
Aşağıdaki öneriler belgelerdeki özelliklere dayanan bizim değerlendirmemiz; kesin bir doğru yok. En önemli ölçüt, rahat yazdığınız dil ve sorun yaşadığınızda yardım bulabileceğiniz topluluk.
| Durumunuz | Öneri |
|---|---|
| JavaScript biliyorum, ilk botum | discord.js |
| discord.js ile büyük, düzenli bir proje | discord.js + Sapphire |
| Deno/Bun kullanıyorum ya da çok büyük ölçek hedefliyorum | Discordeno |
| Python biliyorum, ilk botum | discord.py |
| Statik tip ve HTTP tabanlı bot istiyorum (Python) | hikari (RESTBot) |
| Java/Kotlin ekibim var | JDA; reactive mimari tercih ediyorsanız Discord4J |
| .NET altyapısı kullanıyorum | Discord.Net |
| Rust ile performans ve tip güvenliği | serenity + poise |
| Go ile hafif, düşük seviyeli bir araç | DiscordGo |
Seçim yaparken şunlara da bakın:
- Güncel API desteği: Components V2, user-installable uygulamalar ve monetization gibi yeni özellikleri kütüphanenin destekleyip desteklemediğini değişiklik günlüğünden kontrol edin. Örnek olarak Components V2 yazımıza bakabilirsiniz.
- Ses ihtiyacı: Müzik botu düşünüyorsanız çoğu ekosistemde Lavalink istemcisi kullanılır; Lavalink yazımız bu kurulumu anlatıyor.
- Barındırma: Python 3.12 veya .NET 9 gibi yeni sürüm şartları, sunucunuzdaki işletim sistemi paketleriyle uyumsuz olabilir. Docker ile çalıştırmak sürüm sorunlarını azaltır; Dockerfile rehberimize bakın.
- Ölçek: Bot büyüdüğünde sharding gerekir; serenity ve discord.js gibi kütüphaneler bunu büyük ölçüde otomatik yönetiyor. Ayrıntılar sharding yazımızda.
Sık Sorulan Sorular
Discord'un resmî bir bot kütüphanesi var mı?
Hayır. Discord'un Community Resources sayfası resmî SDK sürdürmediğini açıkça belirtiyor ve üçüncü taraf kütüphaneleri listeliyor. Discord'un kendi sürdürdüğü araçlar daha çok Embedded App SDK ve Social SDK gibi özel kullanım alanlarına yönelik.
discord.py mı Pycord mu?
İkisi de benzer bir temelden geliyor ama komut API'leri farklı: discord.py app_commands ve CommandTree kullanırken Pycord bot.slash_command ve ctx.respond kullanıyor. Hangi kütüphanenin örneklerini takip ediyorsanız onu seçin ve ikisini aynı sanal ortama kurmayın.
TypeScript ile bot yazmak için hangisi uygun?
discord.js, Sapphire ve Discordeno TypeScript ile kullanılabiliyor. discord.js tip tanımlarını paketin içinde getiriyor; ham API tipleri için discord-api-types paketi de var.
Kütüphaneyi sonradan değiştirmek zor mu?
Discord kavramları (intent, interaction, component) her kütüphanede aynı, ama sınıf ve metot adları farklı. Bot mantığınızı (veritabanı, iş kuralları) kütüphaneden bağımsız modüllerde tutarsanız geçiş çok daha kolay olur.
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 · discord.py ile bot yapımı · Slash komut oluşturma · Sharding nedir · Botu 7/24 açık tutma · Node.js nedir · Python nedir