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