BOT REHBERİ

Getcord+ için bot yap, sunucunu taşı

Botlar sunucundaki mesajları dinler, komutlara yanıt verir ve moderasyonu otomatikleştirir. Discord sunucun varsa rollerini ve kanallarını tek adımda Getcord+'a aktarabilirsin.

Başlarken

  1. Bot oluştur. Getcord+'ta Ayarlar → Botlarım bölümünde “Bot oluştur”a bas ve bir ad ver.
  2. Token'ı kopyala. Token yalnızca bir kez gösterilir; kaybedersen “Token'ı yenile” ile yenisini alırsın. Token botun parolasıdır, kimseyle paylaşma.
  3. Sunucuna ekle. Sunucu ayarlarında Botlar sekmesini aç, bot kimliğini gir ve botun alacağı izinleri seç. Bunun için “Sunucuyu yönet” iznin olmalı.
  4. Kodunu çalıştır. Aşağıdaki örnek botla başlayabilirsin.

Bir kişi en fazla 10 bot oluşturabilir, bir sunucuda en fazla 20 bot olabilir. Botlar “BOT” etiketiyle görünür; insan hesapları bot. ile başlayan kullanıcı adı alamaz.

Kimlik doğrulama

Her istekte token'ı Authorization başlığında gönder:

Authorization: Bot <bot kimliği>.<gizli kısım>

Token kimlik.gizli biçimindedir (örn. 3f2b…c1.AbC…). Geçersiz, yenilenmiş ya da silinmiş token 401 invalid_token döner. Bot token'ı insan uçlarında (giriş, ayarlar, sunucu oluşturma vb.) 403 bot_forbidden ile reddedilir.

İzinler

Bot sunucuya eklenirken ona özel bir rol oluşturulur ve izinler bu rolden gelir. Kanal izin katmanları (kanala özel kısıtlar) botlar için de insanlarla aynı kuralla çalışır.

  • Botu ekleyen kişi, kendinde olmayan bir izni bota veremez.
  • Bir botun görebildiği kanallar ve yazabildiği yerler izinlerine göre belirlenir; göremediği kanala ait istekler 404 döner.
  • Sunucu iki aşamalı doğrulama şartı koyduysa botlar bundan etkilenmez.
  • Bot sunucudan atılınca ya da ayrılınca yönetilen rolü de silinir.

REST API

Temel adres: https://getcord.projectgamers240.com. Gövdeler JSON'dur. Kimlikler (sunucu, kanal, mesaj) metin olarak taşınır.

UçNe yapar?
GET /api/guildsBotun üye olduğu sunucular
GET /api/guilds/:sunucuSunucu, kanallar ve roller
GET /api/guilds/:sunucu/membersÜye listesi (bot: true alanı bot olanları gösterir)
PATCH /api/guilds/:sunucu/members/:kullanıcıRol ata / takma ad / zaman aşımı (izin gerekir)
DELETE /api/guilds/:sunucu/members/:kullanıcıÜyeyi at (izin gerekir)
PUT|DELETE /api/guilds/:sunucu/bans/:kullanıcıYasakla / yasağı kaldır (izin gerekir)
POST /api/guilds/:sunucu/leaveBotu sunucudan çıkar
GET /api/channels/:kanal/messagesMesajları listele (limit, before, after)
POST /api/channels/:kanal/messagesMesaj gönder: {"content":"…","replyTo":"…"}
PATCH|DELETE /api/channels/:kanal/messages/:mesajKendi mesajını düzenle / sil; Mesajları yönet iznin varsa başkasınınkini sil
PUT|DELETE /api/channels/:kanal/messages/:mesaj/reactions/:emoji/@meTepki ekle / kaldır (emoji adres kodlu)
GET /api/channels/:kanal/pinsSabit mesajlar
PUT|DELETE /api/channels/:kanal/pins/:mesajMesajı sabitle / kaldır
POST /api/channels/:kanal/typing“Yazıyor…” göster
GET|POST /api/channels/:kanal/threadsThread'leri listele / oluştur (forum için /posts)

Aşağıdakiler botlara açık değildir: sunucu oluşturma/silme/devretme, rol ve kanal yönetimi, davet oluşturma, özel mesaj ve sesli kanallar.

Hız sınırları

Genel: dakikada 600 istek. Mesaj gönderme: 10 saniyede 20. Tepki: 10 saniyede 30. Sınır aşılırsa 429 döner; kısa bir süre bekleyip yeniden dene.

Hata kodları

Hatalar {"error":"kod"} biçimindedir: invalid_token (401), bot_forbidden / missing_permissions (403), not_found (404), invalid_* (400), automod_blocked (400, mesaj AutoMod kuralına takıldı).

WebSocket (olaylar)

Mesajları sormak yerine anında almak için wss://getcord.projectgamers240.com/ws adresine bağlan. Bağlandıktan sonra 10 saniye içinde kimlik doğrulaman gerekir.

→ {"t":"auth","bot":true,"token":"<bot token'ı>"}
← {"t":"ready","uid":"<bot kimliği>"}
→ {"t":"guild.sub","subId":"bot"}
← {"t":"guild","subId":"bot","e":"SUBSCRIBED","d":{}}
← {"t":"guild","subId":"bot","e":"MESSAGE_CREATE","d":{"message":{…},"nonce":null}}
→ {"t":"ping"}      ← {"t":"pong"}
OlayVeri (d)
MESSAGE_CREATEmessage (yazar, içerik, channelId, guildId…)
MESSAGE_UPDATEmessage
MESSAGE_DELETEchannelId, id
MESSAGE_REACTION_UPDATETepki değişti
TYPING_STARTchannelId, userId
GUILD_CREATE / GUILD_DELETEguildId — bot bir sunucuya eklendi / çıkarıldı
GUILD_SYNC / MEMBERS_SYNCguildId — sunucu ya da üyeler değişti, REST ile yeniden çek
PRESENCE_UPDATEuserId, online

Olaylar botun o anki izinlerine göre süzülür: göremediği kanalın mesajı gelmez. Bot soketinden yalnızca guild.sub, guild.unsub ve ping iletileri kabul edilir. Kapanış kodları: 4001 token geçersiz ya da yenilendi, 4003 hesap devre dışı, 4008 çok hızlı ileti (10 saniyede 300). Bu kodlarda token'ı doğrulamadan yeniden bağlanma.

Örnek bot

!ping yazana pong diyen, ek paket gerektirmeyen bir bot. Node.js 22 ya da üstü yeterli.

// Getcord+ örnek botu: "!ping" yazana "pong" ile yanıt verir.
// Gereken: Node.js 22 ya da üstü (ek paket yok).
// Çalıştırma:  GETCORD_BOT_TOKEN=<bot token'ın> node ping-bot.mjs
const BASE = process.env.GETCORD_URL || 'https://getcord.projectgamers240.com';
const TOKEN = process.env.GETCORD_BOT_TOKEN;
if (!TOKEN) {
  console.error('GETCORD_BOT_TOKEN ortam değişkenini ayarla.');
  process.exit(1);
}

async function api(method, path, body) {
  const res = await fetch(BASE + path, {
    method,
    headers: { Authorization: 'Bot ' + TOKEN, 'Content-Type': 'application/json' },
    body: body ? JSON.stringify(body) : undefined,
  });
  if (!res.ok) throw new Error(`${method} ${path} -> ${res.status} ${await res.text()}`);
  return res.json();
}

function connect() {
  const ws = new WebSocket(BASE.replace(/^http/, 'ws') + '/ws');
  let me = null; // botun kendi kimliği ('ready' iletisinde gelir)
  let beat = null;
  const send = (m) => ws.send(JSON.stringify(m));

  ws.onopen = () => send({ t: 'auth', bot: true, token: TOKEN });
  ws.onmessage = async (ev) => {
    const m = JSON.parse(ev.data);
    if (m.t === 'ready') {
      me = m.uid;
      send({ t: 'guild.sub', subId: 'bot' }); // üye olduğun tüm sunucuların olaylarını al
      beat = setInterval(() => send({ t: 'ping' }), 30000);
      console.log('Hazır, bot kimliği:', me);
    } else if (m.t === 'guild' && m.e === 'MESSAGE_CREATE') {
      const msg = m.d.message;
      if (!msg.author || msg.author.id === me || msg.author.bot) return; // kendine ve diğer botlara yanıt verme
      if (msg.content.trim() === '!ping') {
        await api('POST', `/api/channels/${msg.channelId}/messages`, { content: 'pong 🏓', replyTo: msg.id }).catch((e) => console.error(e.message));
      }
    }
  };
  ws.onclose = (ev) => {
    clearInterval(beat);
    if (ev.code === 4001 || ev.code === 4003) {
      console.error('Token geçersiz ya da iptal edildi; çıkılıyor.');
      process.exit(1);
    }
    setTimeout(connect, 3000); // bağlantı koptu: yeniden bağlan
  };
}
connect();

Kaydet (ping-bot.mjs), bot sunucuna ekliyken çalıştır:

GETCORD_BOT_TOKEN=<bot token'ın> node ping-bot.mjs

Botun “Mesaj gönder” ve “Kanalları görüntüle” izinlerine sahip olmalı. Token'ı kodun içine yazma, ortam değişkeni kullan.

Discord sunucunu taşı

Discord sunucunun yapısını (roller, izinler, kategoriler, kanallar) Getcord+'a kopyalar. Kendi Discord botunun token'ını kullanırsın; Getcord+ token'ı saklamaz, yalnızca o istekte kullanıp unutur.

  1. Discord'da bir bot oluştur. discord.com/developers/applications → “New Application” → “Bot” → “Reset Token” ile token'ı kopyala.
  2. Botu sunucuna ekle. “OAuth2 → URL Generator”da bot kapsamını seç (özel izin gerekmez), oluşan bağlantıyla botu taşımak istediğin sunucuya ekle.
  3. Sunucu kimliğini al. Discord'da Ayarlar → Gelişmiş → Geliştirici Modunu aç, sunucu simgesine sağ tıklayıp “Sunucu Kimliğini Kopyala”yı seç.
  4. Getcord+'ta içe aktar. Sol taraftaki + → “Discord'dan aktar”. Token'ı ve sunucu kimliğini gir, önce “Önizle”, sonra “İçe aktar”.
  5. Temizlik. İşin bitince Discord'da token'ı yeniden sıfırla ya da botu sil.

Aktarılır

  • Sunucu adı ve açıklaması
  • Roller: ad, renk, ayrı gösterim, bahsedilebilirlik, izinler, sıralama
  • Kategoriler ve kanallar (metin, duyuru, forum, ses; sahne kanalı ses olur), konu başlıkları
  • Rol bazlı kanal izin katmanları

Aktarılmaz

  • Mesajlar, üyeler ve rol atamaları (üyeleri davet bağlantısıyla çağır)
  • Üye bazlı izin katmanları
  • Emoji, çıkartma, sunucu simgesi ve afişi
  • Thread'ler, webhook'lar, botlar ve entegrasyon rolleri
  • Getcord+'ın desteklemediği izinler (sonucta uyarı olarak listelenir)

Sınırlar: en fazla 99 rol ve 200 kanal aktarılır; fazlası atlanır ve sonuç ekranında bildirilir. Bir kişi en fazla 20 sunucu sahibi olabilir. Saatte en fazla 10 deneme yapabilirsin.

Güvenlik

  • Token'ı git deposuna, ekran görüntüsüne ya da herkese açık kanala koyma. Sızdıysa hemen Token'ı yenile: eski token ve açık bağlantılar anında kapanır.
  • Token sunucuda düz metin olarak saklanmaz; yalnızca özeti tutulur. Bu yüzden kaybedilen token geri getirilemez, yenilenir.
  • Bota yalnızca gerçekten ihtiyacı olan izinleri ver. “Yönetici” izni kanal kısıtlarını da aşar.
  • Botunun kendi mesajlarına ve diğer botlara yanıt vermemesini sağla; aksi halde sonsuz döngü ve hız sınırı yersin.
  • Hesabını silersen oluşturduğun botlar da silinir.

Sık sorulanlar

Eğik çizgi (/) komutları var mı?

Henüz yok. Şimdilik botlar mesajları okuyup !komut gibi metin komutlarına yanıt verir.

Bot dosya yükleyebilir ya da sesli kanala girebilir mi?

Dosya: evet; bot resim/dosya yükleyip kendi mesajına ekleyebilir (örneğin profil resmi ya da seviye kartı gönderir). Sesli kanala girmesi şimdilik mümkün değil.

Başkasının botunu sunucuma ekleyebilir miyim?

Bot sahibi botunu “herkese açık” yaptıysa bot kimliğini bilen herkes kendi sunucusuna ekleyebilir. Aksi halde yalnızca sahibi ekleyebilir.

Discord'dan aktarırken sunucumda bir şey değişir mi?

Hayır. Getcord+ Discord sunucuna yalnızca okuma isteği gönderir; hiçbir şeyi değiştirmez.