Geliştiriciler

Geliştirici Portalı

Yankı için kendi botunu yap: eğik çizgi komutlarına yanıt veren, sohbete katılan, forum gönderilerini izleyen ya da sunucunu yöneten uygulamalar. Ücretsiz; herkes kullanabilir.

Yükleniyor…

Hızlı başlangıç

  1. Uygulama oluştur. Yukarıdan "Yeni uygulama"ya bas; botun adı, kullanıcı adı ve belirteci (token) hazırlanır. Belirteç bir kez gösterilir; şifre gibi sakla, kimseyle paylaşma.
  2. Botu sunucuna ekle. Uygulamanın "Davet bağlantısı"nı aç, sunucunu ve bota vereceğin izinleri seç. Bağlantıyı başkalarıyla da paylaşabilirsin (uygulama herkese açıksa).
  3. Kodu çalıştır. Aşağıdaki örneklerden birini kendi bilgisayarında ya da bir sunucuda çalıştır. Bot, olay ucunu yokladığı sürece çevrimiçi görünür.
  4. Komutu dene. Sunucunda mesaj kutusuna / yaz: botunun komutları listede görünür.

Kimlik doğrulama

Her isteğe şu başlığı ekle: Authorization: Bot <belirteç>. Sunucun bu başlığı iletmiyorsa X-Bot-Token: <belirteç> da kabul edilir. Belirteç sızdıysa portaldan hemen yenile; eskisi o an geçersiz olur.

Temel adres: https://stshdc.com/api/v1/ · Gövde ve yanıtlar JSON'dur; başarılı yanıtta "ok": true, hatada "ok": false, "error": "…" döner.

curl
curl -H "Authorization: Bot BELIRTEC" https://stshdc.com/api/v1/me
curl -X POST -H "Authorization: Bot BELIRTEC" -H "Content-Type: application/json" \
     -d '{"content":"Merhaba dünya!"}' https://stshdc.com/api/v1/channels/KANAL_ID/messages

API başvurusu

GET/meBotun kendisi ve uygulama bilgisi
GET/gateway?cursor=&wait=20Olaylar (uzun bekleme). İlk çağrıda cursor vermeden başlangıç noktası alınır.
PUT/commandsEğik çizgi komutlarının tamamını kaydet: {commands: [{name, description, options}]}
GET/commandsKayıtlı komutlar
GET/serversBotun bulunduğu sunucular
GET/servers/{id}Sunucu: kanallar, roller, botun izinleri
GET/servers/{id}/members?after=&limit=100Üyeler (sayfalı, en fazla 200)
GET/channels/{id}Kanal bilgisi ve botun bu kanaldaki izinleri
GET/channels/{id}/messages?before=Son 50 mesaj (before ile daha eskiler)
POST/channels/{id}/messagesMesaj gönder: {content, reply_to?} — forum gönderisi kimliğine yazarak yanıt verilir
POST/channels/{id}/typing"Yazıyor…" göstergesi
PATCH/messages/{id}Kendi mesajını düzenle: {content}
DELETE/messages/{id}Mesaj sil (kendi mesajın ya da "Mesajları Yönet" izniyle)
PUT/messages/{id}/reactionsTepki ekle: {emoji}
DELETE/messages/{id}/reactionsTepkiyi kaldır: {emoji}
POST/interactions/{id}/replyKomuta yanıt ver (15 dakika içinde): {content}

Olaylar

Bot, GET /gateway ucunu sürekli yoklar (uzun bekleme). Yanıttaki cursor'ı bir sonraki istekte geri gönder. Bot sadece bulunduğu sunucuların ve görmeye izni olan kanalların olaylarını alır.

interaction_createBiri botun eğik çizgi komutunu kullandı: {id, command, options, user, channel_id, server_id}
message_createYeni mesaj: {channel_id, server_id, message}
message_updateMesaj düzenlendi
message_deleteMesaj silindi: {channel_id, id}
reactionTepki değişti: {channel_id, message_id, emoji, users}
member_join / member_leaveSunucuya biri katıldı / ayrıldı
channel_create / channel_update / channel_deleteKanal değişiklikleri
forum_post / forum_post_deleteForum gönderisi açıldı / güncellendi / silindi

Eğik çizgi komutları

Komutları PUT /commands ile kaydet. Seçenek türleri: string, number, boolean, user, channel; required: true zorunlu yapar. Kişi /zar 20 yazınca bota interaction_create gelir; 15 dakika içinde POST /interactions/{id}/reply ile yanıtlarsın. Yanıtın üstünde "X /zar kullandı" satırı görünür. Bot çevrimdışıysa kişiye bildirilir.

Örnek bot: Node.js

JavaScript
// Yankı botu (Node.js 18+, ek paket gerekmez). Çalıştır: YANKI_TOKEN=... node bot.js
const API = 'https://stshdc.com/api/v1/';
const TOKEN = process.env.YANKI_TOKEN;
const call = async (method, path, body) => {
  const r = await fetch(API + path, {
    method,
    headers: { Authorization: 'Bot ' + TOKEN, 'Content-Type': 'application/json' },
    body: body ? JSON.stringify(body) : undefined,
  });
  const j = await r.json();
  if (!j.ok) throw new Error(j.error);
  return j;
};

// 1) Eğik çizgi komutlarını kaydet (her açılışta güncel liste gönderilir)
await call('PUT', 'commands', { commands: [
  { name: 'zar', description: 'Zar atar', options: [{ name: 'yuz', description: 'Kaç yüzlü', type: 'number' }] },
  { name: 'ping', description: 'Bot ayakta mı?' },
] });

// 2) Olayları dinle (uzun bekleme: yeni olay yoksa en fazla 20 sn bekler)
let { cursor } = await call('GET', 'gateway');
const me = (await call('GET', 'me')).user;
console.log('Bağlandı:', me.username);
for (;;) {
  try {
    const r = await call('GET', 'gateway?cursor=' + cursor + '&wait=20');
    cursor = r.cursor;
    for (const ev of r.events) {
      if (ev.type === 'interaction_create') {
        const i = ev.data;
        const text = i.command === 'zar'
          ? '🎲 <@' + i.user.id + '> **' + (1 + Math.floor(Math.random() * (i.options.yuz || 6))) + '** attı!'
          : 'Pong! 🏓';
        await call('POST', 'interactions/' + i.id + '/reply', { content: text });
      }
      if (ev.type === 'message_create' && ev.data.message.author.id !== me.id
          && ev.data.message.content === '!merhaba') {
        await call('POST', 'channels/' + ev.data.channel_id + '/messages',
          { content: 'Merhaba <@' + ev.data.message.author.id + '>!', reply_to: ev.data.message.id });
      }
    }
    if (r.retry_ms) await new Promise((ok) => setTimeout(ok, r.retry_ms));
  } catch (e) {
    console.error(e.message);
    await new Promise((ok) => setTimeout(ok, 3000)); // bağlantı koptu: biraz bekle, yeniden dene
  }
}

Örnek bot: Python

Python
# Yankı botu (Python 3.9+, pip install requests). Çalıştır: YANKI_TOKEN=... python bot.py
import os, random, time, requests

API = "https://stshdc.com/api/v1/"
S = requests.Session()
S.headers.update({"Authorization": "Bot " + os.environ["YANKI_TOKEN"]})

def call(method, path, body=None):
    j = S.request(method, API + path, json=body, timeout=40).json()
    if not j.get("ok"):
        raise RuntimeError(j.get("error"))
    return j

call("PUT", "commands", {"commands": [
    {"name": "zar", "description": "Zar atar",
     "options": [{"name": "yuz", "description": "Kaç yüzlü", "type": "number"}]},
]})
me = call("GET", "me")["user"]
cursor = call("GET", "gateway")["cursor"]
print("Bağlandı:", me["username"])
while True:
    try:
        r = call("GET", f"gateway?cursor={cursor}&wait=20")
        cursor = r["cursor"]
        for ev in r["events"]:
            if ev["type"] == "interaction_create" and ev["data"]["command"] == "zar":
                i = ev["data"]
                n = random.randint(1, int(i["options"].get("yuz", 6)))
                call("POST", f"interactions/{i['id']}/reply",
                     {"content": f"🎲 <@{i['user']['id']}> **{n}** attı!"})
        time.sleep(r.get("retry_ms", 0) / 1000)
    except Exception as e:
        print(e)
        time.sleep(3)

Kurallar ve sınırlar

  • Bot, eklendiği sunucuda kendisine verilen izinlerle sınırlıdır; izinleri sunucu ayarlarındaki bot rolünden değiştirilebilir.
  • Hız sınırı: uygulama başına 10 saniyede 60 istek; mesajlarda kullanıcılarla aynı sınırlar ve otomatik moderasyon geçerlidir.
  • Botlar arkadaş eklenemez ve özel mesaj alamaz; sunucu kanallarında ve forumlarda çalışır.
  • Bir hesap en fazla 10 uygulama oluşturabilir. Uygulamayı silmek botu tüm sunuculardan çıkarır ve mesajlarını siler.
  • Spam, dolandırıcılık ve kullanıcı verisi toplayan botlar yasaktır; site yönetimi bu botları askıya alabilir.