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

Hızlı karşılaştırma tablosu: discord.js, Sapphire, Discordeno, discord.py
KütüphaneDilBelgelerdeki gereksinimÖne çıkan özellik
discord.jsJavaScript/TypeScriptRehber güncel Node.js LTS öneriyorNesne yönelimli, API'nin tamamını kapsadığını belirtiyor
SapphireJavaScript/TypeScriptNode.js 18+, discord.js 14.xdiscord.js üzerine komut ve olay framework'ü
DiscordenoJavaScript/TypeScriptNode.js, Deno veya BunVarsayılan olarak önbelleksiz, fonksiyonel API
discord.pyPythonPython 3.8+async/await, rate limit yönetimi
PycordPythonPython 3.10+ (API belgesi)discord.py'nin bakımı yapılan fork'u
nextcordPythonPython 3.12+Yerleşik slash command desteği
hikariPythonPython 3.11 ile 3.15 arasıStatik tipli mikro framework, GatewayBot ve RESTBot
interactions.pyPythonPython 3.10+Otomatik komut senkronizasyonu, eklenti sistemi
JDAJava (Kotlin uyumlu)Java SE 8+Olay sistemi, RestAction, özelleştirilebilir önbellek
Discord4JJava, Kotlin, JVMREADME'de belirtilmiyorReactive (reactive-streams), modüler
Discord.NetC#/.NET.NET 8.0 ve 9.0Paketlere bölünmüş yapı, Interactions servisi
serenityRustREADME'de belirtilmiyorOtomatik sharding ve önbellek, poise framework
DiscordGoGoÇ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:

python
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:

python
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:

python
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

Java ve JVM: JDA (Java Discord API), Discord4J

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 botumdiscord.js
discord.js ile büyük, düzenli bir projediscord.js + Sapphire
Deno/Bun kullanıyorum ya da çok büyük ölçek hedefliyorumDiscordeno
Python biliyorum, ilk botumdiscord.py
Statik tip ve HTTP tabanlı bot istiyorum (Python)hikari (RESTBot)
Java/Kotlin ekibim varJDA; reactive mimari tercih ediyorsanız Discord4J
.NET altyapısı kullanıyorumDiscord.Net
Rust ile performans ve tip güvenliğiserenity + 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