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

  1. Giriş yap, Ayarlar → Geliştirici bölümünden bot oluştur. Kişi başına en fazla 10 bot.
  2. 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.
  3. "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/bot

Node.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

OlayNe zaman
readyBağlantı kuruldu: { botId, username }
messageCreateBotun görebildiği bir kanala mesaj geldi: { guildId, channelId, message }
messageUpdateBir mesaj düzenlendi (aynı biçim)
messageDeleteBir mesaj silindi (içerik boş gelir)
reactionAdd / reactionRemoveTepki eklendi ya da kaldırıldı: { guildId, channelId, messageId, userId, emoji }
memberAdd / memberRemoveSunucuya biri katıldı ya da ayrıldı: { guildId, userId }
guildCreate / guildDeleteBot bir sunucuya eklendi ya da çıkarıldı: { guildId }
interactionCreateBotun 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

Sınırlar

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.