Chord Geliştirici Dokümantasyonu
Chord Bot API ile kendi botlarını yaz: mesajları canlı dinle, komutlara yanıt ver, sunucularını otomatikleştir. Bu sayfa chord.js kütüphanesini, ham REST API'yi ve gateway olaylarını uçtan uca belgeler.
Nasıl çalışır?
- Uygulama oluşturursun → sana bir bot hesabı ve bir bot tokenı verilir.
- Botunu, sahibi/yöneticisi olduğun sunuculara eklersin.
- Botun REST ile mesaj gönderir/okur, gateway (socket.io) ile mesajları canlı dinler.
Başlangıç
- Uygulamanı oluştur: Chord'u aç → Ayarlar → Geliştirici Portalı → + Yeni Uygulama. Uygulamana bir ad ver; senin için otomatik bir bot hesabı oluşturulur.
- Tokenını kaydet: Token yalnızca oluşturma anında bir kez gösterilir. Güvenli bir yere kaydet (kaybedersen portaldan "Tokenı Yenile" ile yenisini üretirsin — eskisi anında geçersiz olur).
- Botu sunucuna ekle: Uygulama detayında Sunucuya Ekle → sahibi veya yöneticisi olduğun bir sunucuyu seç.
- İlk isteğini at:
curl https://chord.tr/api/bot/v1/me \
-H "Authorization: Bot SENIN_TOKENIN"
{ "id": "...", "username": "muzikbotu-bot", "is_bot": true, "application_id": "..." }
Bu yanıtı gördüysen hazırsın — ister chord.js ile ister ham REST ile devam et.
Token güvenliği
process.env.CHORD_TOKEN.- Sunucuda token yalnızca geri döndürülemez özet (sha256) olarak saklanır — biz bile göremeyiz.
- Sızdıysa: Geliştirici Portalı → uygulaman → Tokenı Yenile. Eski token o an ölür.
- Botlar yalnızca
/api/bot/*uçlarını çağırabilir — DM, ödeme ve hesap uçları bot tokenlarına kapalıdır.
chord.js — resmî istemci kütüphanesi
discord.js'e aşinaysan evinde hissedeceksin: olay tabanlı Client, msg.reply() gibi kısayollar, otomatik hız-sınırı yönetimi.
Kurulum
- chord.js dosyasını indir ve projenin klasörüne koy.
- Canlı olaylar için:
npm install socket.io-client(yalnız REST kullanacaksan gerekmez). - Node.js 18+ gerekir (yerleşik
fetch).
Hızlı başlangıç — ping botu
const { Client } = require('./chord.js');
const client = new Client({ token: process.env.CHORD_TOKEN });
client.on('ready', (me) => {
console.log(`✅ ${me.username} hazır!`);
});
client.on('message', async (msg) => {
if (msg.content === '!ping') await msg.reply('Pong! 🏓');
});
client.login();
429 yanıtlarında Retry-After kadar bekleyip isteği kendisi yineler.Client
| Üye | Açıklama |
|---|---|
new Client({ token, baseUrl?, allowSelf? }) | token zorunlu. baseUrl varsayılanı https://chord.tr. allowSelf: true botun kendi mesajlarını da 'message' olarak yayar. |
client.login() | Gateway'e bağlanır; ready'de çözülür. socket.io-client ister. |
client.me() | Bot kimliği (REST). |
client.servers() | [{id, name}] — botun üye olduğu sunucular. |
client.channels(serverId) | Channel[] — görülebilir metin kanalları. |
client.messages(channelId, {limit, before}) | Message[] geçmiş (limit ≤ 100). |
client.sendMessage(channelId, content, {replyToId}) | Mesaj gönderir, Message döner. |
client.destroy() | Gateway bağlantısını kapatır. |
client.user | login() sonrası bot kimliği. |
Olaylar
| Olay | Parametre | Ne zaman |
|---|---|---|
ready | me | Gateway doğrulandı, bot hazır. |
message | Message | Üye olunan sunucularda yeni mesaj (kendi mesajların hariç). |
error | Error | Kimlik/bağlantı hatası. |
disconnect | — | Bağlantı koptu (socket.io kendiliğinden yeniden dener). |
Message
| Üye | Açıklama |
|---|---|
msg.id msg.channelId msg.serverId | Kimlikler. |
msg.content | Mesaj metni. |
msg.author | { id, username, displayName, isBot } |
msg.createdAt | Date. |
msg.reply(content) | Bu mesaja yanıt gönderir. |
msg.send(content) | Aynı kanala normal mesaj. |
msg.raw | Ham API objesi (sarılmamış tüm alanlar). |
Channel
| Üye | Açıklama |
|---|---|
ch.id ch.name ch.category ch.serverId | Kanal bilgileri. |
ch.send(content) | Kanala mesaj gönderir. |
Hatalar — ChordAPIError
try {
await msg.reply('merhaba');
} catch (err) {
if (err.name === 'ChordAPIError') {
console.error(err.status, err.path, err.message); // örn. 403 /v1/channels/... "yetkin yok"
}
}
REST Referansı
Taban adres: https://chord.tr/api/bot · Kimlik: her istekte Authorization: Bot <token> başlığı · Gövde: Content-Type: application/json.
403 döner. Aşağıdaki yönetim uçları (/apps…) ise yalnızca insan oturumuyla (portal) kullanılır — burada yalnız bot uçları belgelenmiştir./v1/meBotun kimliği.
{ "id", "username", "display_name", "is_bot": true, "application_id", "application_name" }
/v1/serversBotun üye olduğu sunucular.
{ "servers": [ { "id", "name" } ] }
/v1/servers/:id/channelsBotun görebildiği metin kanalları (kanal izinleri uygulanır; ses kanalları listelenmez).
{ "channels": [ { "id", "name", "category" } ] }
| Hata | Sebep |
|---|---|
403 | Bot bu sunucuda üye değil. |
/v1/channels/:id/messages| Sorgu parametresi | Açıklama |
|---|---|
limit | 1–100 (varsayılan 50). |
before | Unix milisaniye — bu zamandan eski mesajlar (sayfalama). |
Yanıt: { "messages": [ … ] } — eski → yeni sıralı. Her mesajda author_is_bot alanı vardır.
| Hata | Sebep |
|---|---|
403 | Üye değil veya kanalı görme yetkisi yok. |
404 | Kanal yok. |
/v1/channels/:id/messages| Gövde alanı | Açıklama |
|---|---|
content | Zorunlu. 1–2000 karakter. |
replyToId | İsteğe bağlı — yanıtlanan mesajın id'si. |
{ "message": { "id", "channel_id", "content", "author_id", "author_name", "author_is_bot": 1, "created_at", … } } // 201
| Hata | Sebep |
|---|---|
400 | content boş ya da 2000 karakterden uzun. |
403 | Kanala yazma yetkisi yok. |
429 | Hız sınırı — Retry-After başlığına bak. |
İçerik kuralları: geçersiz/yetkisiz <:emoji:id> token'ları düz metne düşürülür; @everyone/@here yalnız botun o kanalda Herkesi Etiketle yetkisi varsa çalışır (yoksa zararsızlaştırılır).
Gateway — canlı olaylar
Gateway, Chord'un socket.io sunucusudur. chord.js bunu senin için yönetir (client.login()); ham kullanım:
const { io } = require('socket.io-client');
const socket = io('https://chord.tr');
socket.on('connect', () => socket.emit('authenticate', 'Bot SENIN_TOKENIN'));
socket.on('authenticated', ({ userId }) => console.log('bağlı:', userId));
socket.on('auth_error', (m) => console.error('kimlik hatası:', m));
socket.on('new_message', ({ message }) => {
if (message.author_is_bot) return; // kendi/diğer bot mesajlarını yok say
console.log(`#${message.channel_id}: ${message.author_name}: ${message.content}`);
});
Önemli davranışlar
- Bot doğrulanınca üye olduğu tüm sunucuların odalarına katılır; kısıtlı kanalların olayları izinsizse gelmez.
- Kendi mesajların da gelir — sonsuz döngüye girmemek için
author_idile filtrele (chord.js bunu otomatik yapar). - Bağlantı koparsa socket.io kendisi yeniden dener; yeniden bağlandığında
authenticate'i tekrar göndermelisin (chord.js otomatik). - Bot başına tek gateway bağlantısı kur.
- Bot sunucuya eklendiğinde/çıkarıldığında oda üyeliği sunucu tarafından anında güncellenir.
new_message yükü
{ "message": {
"id", "channel_id", "author_id", "content", "created_at",
"author_name", "author_display", "author_is_bot",
"reply_to_id", "attachment_url", "reactions": []
} }
Hız sınırları
| Kapsam | Sınır | Aşılınca |
|---|---|---|
| Tüm REST istekleri (uygulama başına) | 5 istek / saniye | 429 + Retry-After: 1 |
| Mesaj gönderme | 1 mesaj / saniye | 429 + Retry-After: 1 |
chord.js 429 aldığında Retry-After kadar bekleyip isteği kendiliğinden üç kez yineler. Ham REST kullanıyorsan aynısını yapmalısın — 429'u yut, bekle, tekrar dene.
Örnek botlar
1) Komut botu — !ping, !zar, !yardım
const { Client } = require('./chord.js');
const client = new Client({ token: process.env.CHORD_TOKEN });
const komutlar = {
'!ping': (msg) => msg.reply('Pong! 🏓'),
'!zar': (msg) => msg.reply(`🎲 ${1 + Math.floor(Math.random() * 6)} attın!`),
'!yardım': (msg) => msg.reply('Komutlar: !ping, !zar, !yardım'),
};
client.on('message', (msg) => komutlar[msg.content]?.(msg));
client.login();
2) Hoş geldin yanıtlayıcısı
client.on('message', async (msg) => {
if (/^(selam|merhaba|hey)\b/i.test(msg.content)) {
await msg.reply(`Selam ${msg.author.displayName || msg.author.username}! 👋`);
}
});
3) Zamanlanmış duyuru (gateway'siz, yalnız REST)
const { Client } = require('./chord.js');
const client = new Client({ token: process.env.CHORD_TOKEN });
const KANAL = 'KANAL_ID';
setInterval(async () => {
await client.sendMessage(KANAL, '⏰ Saat başı hatırlatma!');
}, 60 * 60 * 1000);
4) Basit denetim — yasaklı kelime
const YASAKLI = ['spam', 'reklam'];
client.on('message', async (msg) => {
if (YASAKLI.some(k => msg.content.toLowerCase().includes(k))) {
await msg.reply('⚠️ Lütfen sunucu kurallarına uy.');
}
});
SSS & sınırlamalar
Botum mesaj atamıyor (403)?
Bot o sunucuda üye mi (portaldan ekledin mi)? Kanalda Mesaj Gönder izni var mı? Botlar sunucuda normal üye rolündedir — kanal izinlerini rol/overwrite'larla yönetebilirsin.
Token'ı kaybettim.
Geliştirici Portalı → uygulaman → Tokenı Yenile. Eski token anında geçersiz olur, botunu yeni token'la yeniden başlat.
Kaç uygulama oluşturabilirim?
Kullanıcı başına 5 aktif uygulama.
v1'de neler yok?
- DM gönderme/okuma (botlar yalnız sunucu kanallarında).
- Mesaj silme/düzenleme, tepki ekleme.
- Slash (/) komutları — yol haritasında.
- Bot mesajları bildirim (mention rozeti) üretmez.
Botu nasıl kaldırırım?
Sunucudan: normal üye gibi at (sağ tık → At). Tamamen: portaldan Uygulamayı Sil — token ölür, bot tüm sunuculardan çıkar; mesaj geçmişi kalır.
Sürüm notları
v1.0 — İlk sürüm: uygulama/token yönetimi, REST v1 (me, servers, channels, messages get/post), gateway new_message, chord.js 1.0.0.
