Geliştiriciler: fpslobby için bot yaz
fpslobby botları geliştiriciler yazar, sunucu sahipleri ekler. Bot, sunucuda yalnızca onu ekleyen kişinin verdiği izinlerle iş görür; insanlar için geçerli her kural (kanal izinleri, yavaş mod, otomatik filtre) bot için de geçerlidir.
1. Botunu oluştur
- Giriş yap, Ayarlar → Geliştirici bölümünden bot oluştur. Kişi başına en fazla 10 bot.
- Gösterilen bot anahtarını (fpsb_ ile başlar) hemen kopyala; bir daha gösterilmez. Kimseyle paylaşma, koduna ya da GitHub'a yazma; ortam değişkeninde sakla. Sızdırırsan aynı yerden yenile, eskisi anında geçersiz olur.
- "Sunucuya ekleme bağlantısı" bölümünde botun isteyeceği izinleri seç, bağlantıyı paylaş. Bağlantıyı açan sunucu yöneticisi, yönettiği bir sunucuyu seçip onaylar.
2. Kitaplığı kur
npm install @fpslobby/botNode.js 20 veya üstü gerekir. Kitaplık TypeScript ile yazılmıştır, tipleri içindedir.
3. Örnek bot
import { Client } from '@fpslobby/bot';
const client = new Client({ token: process.env.BOT_TOKEN });
client.on('ready', (me) => {
console.log(`${me.username} hazır`);
});
// Bota seslenilince (@bot selam) cevap verir.
client.on('messageCreate', async ({ channelId, message }) => {
if (message.content?.includes('selam')) {
await client.sendMessage(channelId, 'Aleyküm selam!');
}
});
// /zar yuz:20
client.command(
{
name: 'zar',
description: 'Zar atar',
options: [{ name: 'yuz', description: 'Kaç yüzlü', type: 'integer' }],
},
async (interaction) => {
const yuz = Number(interaction.option('yuz') ?? 6);
const sonuc = 1 + Math.floor(Math.random() * yuz);
await interaction.reply(`🎲 ${yuz} yüzlü zar: ${sonuc}`);
},
);
await client.login();BOT_TOKEN=fpsb_... node bot.js ile çalıştır. Bağlantı koparsa kitaplık kendisi yeniden bağlanır; hız sınırına takılan istekler, sunucunun söylediği kadar bekleyip yeniden gönderilir. Aynı mesaj ağ hatası yüzünden iki kez gönderilse de bir kez kaydedilir.
Olaylar
| Olay | Ne zaman |
|---|---|
ready | Bağlantı kuruldu: { botId, username } |
messageCreate | Botun görebildiği bir kanala mesaj geldi: { guildId, channelId, message } |
messageUpdate | Bir mesaj düzenlendi (aynı biçim) |
messageDelete | Bir mesaj silindi (içerik boş gelir) |
reactionAdd / reactionRemove | Tepki eklendi ya da kaldırıldı: { guildId, channelId, messageId, userId, emoji } |
memberAdd / memberRemove | Sunucuya biri katıldı ya da ayrıldı: { guildId, userId } |
guildCreate / guildDelete | Bot bir sunucuya eklendi ya da çıkarıldı: { guildId } |
interactionCreate | Botun bir komutu kullanıldı (client.command kullanıyorsan buna gerek yok) |
Bot kendi gönderdiği mesajları da messageCreate ile alır; kendine cevap vermemek için message.authorId değerini botun kimliğiyle karşılaştır.
İşlemler
me() | Botun kendi bilgisi |
guilds() | Botun bulunduğu sunucular |
channels(guildId) / roles(guildId) | Botun görebildiği kanallar, sunucunun rolleri |
messages(channelId, { beforeSeq }) | Kanal geçmişi (sayfa sayfa) |
sendMessage(channelId, metin | { content, replyToId }) | Mesaj gönder |
editMessage(channelId, messageId, metin) / deleteMessage(...) | Kendi mesajını düzenle, sil |
react / unreact(channelId, messageId, emoji) | Tepki ekle, kaldır |
addRole / removeRole(guildId, userId, roleId) | Rol ver, al (Rolleri yönetme izni) |
kick / ban(guildId, userId, sebep) | Sunucudan at, yasakla (ilgili izin) |
setCommands([...]) | Komut listesini toptan değiştir (client.command bunu kendisi yapar) |
Hatalı istekler FpslobbyError fırlatır: status, code (ör. FORBIDDEN, NOT_FOUND, RATE_LIMITED) ve Türkçe message.
Eğik çizgi komutları
Bot en fazla 50 komut tanımlar. Seçenek türleri: string, integer,boolean, user, role, channel; zorunlu seçenekler isteğe bağlılardan önce gelir. Sunucuda biri / yazınca komutlar listelenir. Komut bir mesaj olarak gönderilmez; bot 15 dakika içinde bir kez cevap verir. interaction.reply(metin) kanala "X, /komut kullandı" başlığıyla yazar; { content, ephemeral: true } cevabı yalnızca komutu kullanana gösterir. 3 saniye içinde cevap gelmezse kişiye "Bot cevap vermedi" görünür.
İzinler ve gizlilik
- Bot sunucuya eklenince kendi adıyla bir rol alır; izinleri bu rolden ve kanal ayarlarından gelir.
- Botun göremediği bir kanal ona hiç gösterilmez ("bulunamadı" döner).
- Bot varsayılan olarak yalnızca kendisinden bahsedilen mesajların ve kendi mesajlarının içeriğini görür; diğer mesajların içeriği boş gelir. Her mesajı okumak için bot ayarlarında "Tüm mesajları okuyabilsin" açılır; sunucu sahibi botu eklerken bu izni ayrıca görür.
- Botlar arkadaş eklenemez, özel mesaj alamaz, global sohbete ve ses odalarına giremez.
Sınırlar
- Bot başına dakikada 120 istek; kanal başına 5 saniyede 5 mesaj.
- Bot başına en fazla 2 eş zamanlı bağlantı.
- Onaysız bir bot en fazla 100 sunucuya eklenebilir.
- Mesajlar en fazla 2000 karakter.
Kitaplık olmadan: HTTP API
Her dilden kullanılabilir. Adres https://fpslobby.com/api/bot/v1, başlık Authorization: Bot fpsb_..., gövde JSON. Örnek:
curl -X POST https://fpslobby.com/api/bot/v1/channels/KANAL_ID/messages \
-H "Authorization: Bot $BOT_TOKEN" -H "Content-Type: application/json" \
-d '{"clientMessageId":"<rastgele UUID>","content":"Merhaba"}'Olaylar için https://fpslobby.com adresindeki Socket.IO sunucusunun /bot ad alanına { auth: { token } } ile bağlanılır. Hatalar her zaman { error: { code, message } } biçimindedir; hız sınırında Retry-After başlığı kaç saniye bekleneceğini söyler.