Bot API rehberi

Hızlı başlangıç

Sıfırdan çalışan bir bota giden altı adım. Kod parçaları depodaki örnek botla aynı el sıkışmayı kullanıyor.

  1. 1. Uygulama oluştur

    Portalda bir uygulama açtığında arkasında bir bot kullanıcısı yaratılır. Uygulamanın adı botun görünen adı olur.

    Uygulamalarım
  2. 2. Token üret ve sakla

    Uygulama detayında token üret. Token yalnızca bir kez gösterilir; kaybedersen döndürmen gerekir.

    TALKITH_BOT_TOKEN=nsb_...
    TALKITH_API_ORIGIN=https://api.talkith.com
    TALKITH_GATEWAY_ORIGIN=wss://api.talkith.com

    Token’ı depoya koyma. Sızdığını düşünürsen portaldan iptal et, eski token anında geçersizleşir.

  3. 3. Olay geçidine bağlan

    Bağlantı HELLO ile açılır, IDENTIFY ile kimlik doğrularsın ve HELLO’daki aralıkla kalp atışı gönderirsin.

    const socket = new WebSocket(
      `${process.env.TALKITH_GATEWAY_ORIGIN}/gateway/bot`
    );
    
    socket.addEventListener('message', (event) => {
      const frame = JSON.parse(event.data);
    
      if (frame.op === 'HELLO') {
        // HELLO kalp atışı aralığını taşır; IDENTIFY ile kimliği bildir.
        socket.send(JSON.stringify({
          op: 'IDENTIFY',
          d: {
            token: process.env.TALKITH_BOT_TOKEN,
            intents: ['APPLICATION_COMMANDS', 'SERVER_MESSAGES'],
          },
        }));
    
        setInterval(
          () => socket.send(JSON.stringify({ op: 'HEARTBEAT' })),
          frame.d.heartbeatInterval
        );
      }
    });

    Kalp atışına HEARTBEAT_ACK gelmezse bağlantı ölmüş sayılır; yeniden bağlanırken artan gecikme uygula.

  4. 4. Komutlarını kaydet

    Slash komutları portaldan değil, bot tarafından kaydedilir. Bu uç listeyi bütünüyle değiştirir.

    await fetch(`${API}/api/bot/v1/commands`, {
      method: 'PUT',
      headers: {
        Authorization: `Bot ${token}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        commands: [
          { name: 'ping', description: 'Botun ayakta olduğunu doğrular' },
        ],
      }),
    });

    Gönderilmeyen komutlar silinir. Kayıtlı listeyi uygulama detay sayfasından görebilirsin.

  5. 5. Komuta yanıt ver

    Kullanıcı komutu çalıştırdığında geçitten APPLICATION_COMMAND düşer; etkileşimi kısa sürede yanıtla.

    if (frame.op === 'DISPATCH' && frame.t === 'APPLICATION_COMMAND') {
      const interactionId = frame.d.interactionId;
    
      await fetch(
        `${API}/api/bot/v1/interactions/${interactionId}/response`,
        {
          method: 'POST',
          headers: {
            Authorization: `Bot ${token}`,
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({ content: 'pong' }),
        }
      );
    }

    İşin uzun sürecekse önce defer et, sonuç hazır olunca yanıtı güncelle.

  6. 6. Gerisini referanstan al

    Mesaj, reaksiyon, ek dosya, ses ve WHIP uçlarının tamamı referansta; parametreleri ve gövdeleriyle.

    Referansı aç