Discord'da etkinlik durumu nasıl çalışır ve neden gereklidir?
Discord RPC (Remote Procedure Call), bilgisayarınızdaki uygulamanız veya oyununuz ile Discord istemcisi arasında yerel bir iletişim protokolüdür. Rich Presence, bu bağlantının görsel temsilidir: Arkadaşlarınıza tam olarak neyle meşgul olduğunuzu (oyundaki harita, mevcut seviye, oturum süresi) gösteren ve tek tuşla size katılmalarına olanak tanıyan gelişmiş bir durumdur.
Rich Presence'i yapılandırmak için geliştiricinin Discord Geliştirici Portalı'nda bir uygulama kaydetmesi, Application ID alması ve verileri yerel bir IPC kanalı üzerinden göndermeyi uygulaması gerekir. Normal bir kullanıcı için böyle bir durumun varlığı, oyunun veya programın Discord ile resmi entegrasyonu desteklediği anlamına gelir.
RPC ve Rich Presence arasındaki fark
Bu kavramlar sıkça karıştırılır, ancak teknik olarak farklı işlevler görürler:
- Discord RPC bir "boru" veya taşıma katmanıdır. Bu, üçüncü taraf yazılımların PC'nizdeki çalışan Discord istemcisiyle veri alışverişi yapmasını sağlayan mekanizmadır.
- Rich Presence, bu "boru" üzerinden iletilen belirli bir veri türüdür. Diğer kullanıcıların arkadaş listesinde veya profilinizde gördüğü biçimlendirilmiş etkinlik kartıdır.
Önemli: RPC yalnızca masaüstü Discord uygulaması (Windows, macOS, Linux) üzerinden çalışır. Web sürümü ve mobil istemciler yerel RPC bağlantısı için sunucu görevi göremez, ancak alınan durumu doğru şekilde görüntülerler.
Etkinlik durumunda neler görüntülenebilir?
Rich Presence, standart "Şunu oynuyor..." satırını bilgilendirici bir karta dönüştürür. Kontrol edilebilen temel öğeler şunlardır:
Kartın temel alanları
| Öğe | Açıklama | Kullanım örneği |
|---|---|---|
| Details | Ana durum satırı. | "Raidda", "Video düzenleme" |
| State | Ana satırın altındaki ek bilgi. | "Boss: Archon", "Render: %45" |
| Time Elapsed | Etkinliğin süresini gösteren zamanlayıcı. | "Oyunda: 2s 15d" |
| Large Image | Soldaki büyük simge (en fazla 512x512 px). | Oyun veya seviye haritası logosu |
| Small Image | Büyük simgenin üzerindeki küçük simge. | Rütbe veya durum simgesi (çevrimiçi/çevrimdışı) |
| Party Size | Grup göstergesi (örneğin, 2/5). | Lobinin doluluğunu gösterir |
| Buttons | Durumun altındaki iki adede kadar bağlantı düğmesi. | "Katıl", "Yayını İzle" |
Details ve State alanlarını öz kullanın. Kullanıcılar arkadaş listesini hızlıca tarar: uzun metinler üç nokta ile kesilir ve anlamını yitirir. En iyi uygulama: Details — ne yapıyoruz, State — nerede/nasıl.
Geliştiriciler için teknik uygulama
Bir oyun veya yardımcı program geliştiriyorsanız ve Rich Presence desteği eklemek istiyorsanız, süreç aşağıdaki gibi ilerler.
1. Uygulama kaydı
- Discord Geliştirici Portalı'na gidin.
- Yeni bir uygulama oluşturun (
New Application). - Application ID'yi kopyalayın — bağlantıyı başlatmak için buna ihtiyacınız olacak.
- Rich Presence -> Art Assets bölümünde, kullanmayı planladığınız görselleri yükleyin (görsel anahtarları kodda kullanılacaktır).
2. SDK üzerinden bağlantı
Discord, resmi kütüphaneler (C#, C++, Rust, Go vb.) ve protokol belgeleri sağlar. Modern yaklaşım, GameSDK kullanımı veya IPC (İşlemler Arası İletişim) üzerinden doğrudan veri alışverişini içerir.
Çalışma mantığı:
- Uygulama başlatılır ve Discord istemcisinin soketini arar.
Client IDiletilerek bir "el sıkışma" (handshake) gerçekleşir.- Uygulama, etkinlik verilerini içeren bir JSON nesnesi gönderir.
3. Veri yapısı (mantık örneği)
Veriler bir Activity nesnesi olarak gönderilir. Son görünümü etkileyen parametrelerin örneği:
{
"details": "Maçın başlaması bekleniyor",
"state": "Harita: Dust II",
"timestamps": {
"start": 1714123456000
},
"assets": {
"large_image": "map_dust2",
"large_text": "Klasik mod",
"small_image": "rank_gold",
"small_text": "Altın rütbe"
},
"party": {
"id": "lobby_123",
"size": [2, 5]
}
}
Durumu gereksiz yere çok sık güncellemeyin (15–30 saniyeden daha kısa aralıklarla). Aşırı paket gönderimi, spam koruması amacıyla Discord istemcisi tarafından RPC bağlantısının geçici olarak engellenmesine yol açabilir.
Kullanıcılar için yapılandırma: Neden durum görüntülenmiyor?
Eğer bir oyuncuysanız ve bazı oyunlarda detaylı durum olmadığını görüyorsanız, bunun birkaç nedeni olabilir:
- Oyun entegrasyonu desteklemiyor. Geliştiricilerin Discord RPC kodunu açıkça dahil etmesi gerekir. Eğer yoksa, Discord yalnızca işlem adını gösterir.
- Etkinlik görüntüleme devre dışı bırakılmış. Discord'un kendi ayarlarını kontrol edin:
- Kullanıcı Ayarları -> Etkinlik -> «Geçerli etkinliği durum olarak göster» anahtarının açık olduğundan emin olun.
- Başlatıcı çakışmaları. Bazen Epic Games Store veya Steam durum görüntülemesini ele geçirir. Oyunu doğrudan başlatmayı deneyin veya onu Discord'un oyun listesine manuel olarak ekleyin (Ayarlar -> Etkinlik -> Oyun Ekle).
Yapılandırma sırasında yapılan yaygın hatalar
- Barındırma için web sürümünü kullanmaya çalışmak. Yukarıda belirtildiği gibi, web istemcisi yerel programlardan RPC sinyallerini kabul edemez. Discord yalnızca tarayıcıda açıksa durum görünmez.
- Hatalı Client ID. Kodda başka bir uygulamanın ID'si belirtilirse, durum ya görüntülenmez ya da başka bir oyunun verilerini gösterir (görüntü anahtarlarının eşleşmesi düşük olasılıklıdır).
- Önbellekleme olmadan varlık yükleme. Developer Portal'a yeni simgeler yüklendikten sonra, bunlar Discord istemcisi tarafında 24 saate kadar önbelleğe alınabilir. Değişiklikleri hemen görmek için testler sırasında farklı dosya adları kullanın.
SSS
Durumu değiştirmek için üçüncü taraf programları (örneğin Discord Rich Presence Presences) kullanmak güvenli mi? Discord sürecine enjekte edilen doğrulanmamış yürütülebilir dosyaların kullanılması platformun kullanım koşullarını (ToS) ihlal edebilir ve istemci değişikliği olarak değerlendirilebilir. Enjektörler yerine resmi entegrasyonları veya açık API üzerinden çalışan programları (örneğin bazı müzik çalarlar) kullanmak daha güvenlidir.
Belirli bir oyun için Rich Presence gizlenebilir mi? Evet. Discord ayarlarında (Etkinlik), otomatik olarak tespit edilen belirli uygulamalar için durum görüntülemeyi devre dışı bırakabilir veya hassas bir oyunu başlatmadan önce Discord profilinden çıkış yapabilirsiniz.
Bu konsollarda (PS5, Xbox) çalışıyor mu? Konsollarda farklı bir entegrasyon sistemi kullanılır. Burada durum, PlayStation/Xbox hesaplarının Discord'a bağlanması yoluyla senkronize edilir, ancak yerel RPC teknolojisi burada uygulanmaz.