Twitch (plugin)

Obsluga czatu Twitch przez polaczenie IRC. OpenClaw laczy sie jako uzytkownik Twitch (konto bota) aby odbierac i wysylac wiadomosci na kanalach.

Wymagany plugin

Twitch jest dostarczany jako plugin i nie jest dolaczony do instalacji podstawowej.

Instalacja przez CLI (rejestr npm):

openclaw plugins install @openclaw/twitch

Lokalny checkout (przy uruchomieniu z repozytorium git):

openclaw plugins install ./extensions/twitch

Szczegoly: Pluginy

Szybka konfiguracja (dla poczatkujacych)

  1. Utworz dedykowane konto Twitch dla bota (lub uzyj istniejacego konta).
  2. Wygeneruj dane logowania: Twitch Token Generator
    • Wybierz Bot Token
    • Sprawdz, czy zakresy chat:read i chat:write sa zaznaczone
    • Skopiuj Client ID i Access Token
  3. Znajdz swoje ID uzytkownika Twitch: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  4. Skonfiguruj token:
    • Zmienna: OPENCLAW_TWITCH_ACCESS_TOKEN=... (tylko domyslne konto)
    • Lub konfiguracja: channels.twitch.accessToken
    • Jesli oba sa ustawione, konfiguracja ma pierwszenstwo (zmienna jako zastepczym tylko dla domyslnego konta).
  5. Uruchom gateway.

Ostrzezenie: Dodaj kontrole dostepu (allowFrom lub allowedRoles) aby zapobiec wyzwalaniu bota przez nieautoryzowanych uzytkownikow. requireMention domyslnie true.

Minimalna konfiguracja:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // Konto Twitch bota
      accessToken: "oauth:abc123...", // OAuth Access Token (lub uzyj zmiennej OPENCLAW_TWITCH_ACCESS_TOKEN)
      clientId: "xyz789...", // Client ID z Token Generator
      channel: "vevisk", // Kanal czatu Twitch do dolaczenia (wymagany)
      allowFrom: ["123456789"], // (zalecane) Tylko twoje ID uzytkownika Twitch - pobierz z https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
    },
  },
}

Czym jest

  • Kanal Twitch nalezacy do Gateway.
  • Deterministyczny routing: odpowiedzi zawsze wracaja do Twitch.
  • Kazde konto mapuje sie na izolowany klucz sesji agent:<agentId>:twitch:<accountName>.
  • username to konto bota (kto sie uwierzytelnia), channel to pokoj czatu do dolaczenia.

Konfiguracja (szczegolowa)

Generowanie danych logowania

Uzyj Twitch Token Generator:

  • Wybierz Bot Token
  • Sprawdz, czy zakresy chat:read i chat:write sa zaznaczone
  • Skopiuj Client ID i Access Token

Reczna rejestracja aplikacji nie jest wymagana. Tokeny wygasaja po kilku godzinach.

Konfiguracja bota

Zmienna (tylko domyslne konto):

OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...

Lub konfiguracja:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
    },
  },
}

Jesli oba (zmienna i konfiguracja) sa ustawione, konfiguracja ma pierwszenstwo.

Kontrola dostepu (zalecana)

{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (zalecane) Tylko twoje ID uzytkownika Twitch
    },
  },
}

Preferuj allowFrom dla twardej listy dozwolonych. Uzyj allowedRoles zamiast tego, jesli chcesz dostep oparty na rolach.

Dostepne role: "moderator", "owner", "vip", "subscriber", "all".

Dlaczego ID uzytkownikow? Nazwy uzytkownikow moga sie zmieniac, umozliwiajac podszywanie sie. ID uzytkownikow sa trwale.

Znajdz swoje ID uzytkownika Twitch: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Konwertuj nazwe uzytkownika Twitch na ID)

Odswiezanie tokenu (opcjonalne)

Tokeny z Twitch Token Generator nie moga byc automatycznie odswiezane - wygeneruj ponownie po wygasnieciu.

Dla automatycznego odswiezania tokenow utworz wlasna aplikacje Twitch w Twitch Developer Console i dodaj do konfiguracji:

{
  channels: {
    twitch: {
      clientSecret: "your_client_secret",
      refreshToken: "your_refresh_token",
    },
  },
}

Bot automatycznie odswieza tokeny przed wygasnieciem i loguje zdarzenia odswiezania.

Obsluga wielu kont

Uzyj channels.twitch.accounts z tokenami per konto. Zobacz gateway/configuration dla wspolnego wzorca.

Przyklad (jedno konto bota na dwoch kanalach):

{
  channels: {
    twitch: {
      accounts: {
        channel1: {
          username: "openclaw",
          accessToken: "oauth:abc123...",
          clientId: "xyz789...",
          channel: "vevisk",
        },
        channel2: {
          username: "openclaw",
          accessToken: "oauth:def456...",
          clientId: "uvw012...",
          channel: "secondchannel",
        },
      },
    },
  },
}

Uwaga: Kazde konto potrzebuje wlasnego tokenu (jeden token na kanal).

Kontrola dostepu

Ograniczenia oparte na rolach

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator", "vip"],
        },
      },
    },
  },
}

Lista dozwolonych po ID uzytkownika (najbezpieczniejsza)

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowFrom: ["123456789", "987654321"],
        },
      },
    },
  },
}

Dostep oparty na rolach (alternatywa)

allowFrom to twarda lista dozwolonych. Gdy ustawiona, tylko te ID uzytkownikow sa dozwolone. Jesli chcesz dostep oparty na rolach, pozostaw allowFrom nieustawione i skonfiguruj allowedRoles:

{
  channels: {
    twitch: {
      accounts: {
        default: {
          allowedRoles: ["moderator"],
        },
      },
    },
  },
}

Wylaczenie wymogu @wzmianki

Domyslnie requireMention jest true. Aby wylaczyc i odpowiadac na wszystkie wiadomosci:

{
  channels: {
    twitch: {
      accounts: {
        default: {
          requireMention: false,
        },
      },
    },
  },
}

Rozwiazywanie problemow

Najpierw uruchom polecenia diagnostyczne:

openclaw doctor
openclaw channels status --probe

Bot nie odpowiada na wiadomosci

Sprawdz kontrole dostepu: Upewnij sie, ze twoje ID uzytkownika jest w allowFrom, lub tymczasowo usun allowFrom i ustaw allowedRoles: ["all"] do testowania.

Sprawdz, czy bot jest na kanale: Bot musi dolaczyc do kanalu okreslonego w channel.

Problemy z tokenem

“Failed to connect” lub bledy uwierzytelniania:

  • Zweryfikuj, ze accessToken to wartosc tokenu dostepu OAuth (zwykle zaczyna sie od prefiksu oauth:)
  • Sprawdz, czy token ma zakresy chat:read i chat:write
  • Jesli uzywasz odswiezania tokenu, sprawdz, czy clientSecret i refreshToken sa ustawione

Odswiezanie tokenu nie dziala

Sprawdz logi pod katem zdarzen odswiezania:

Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)

Jesli widzisz “token refresh disabled (no refresh token)”:

  • Upewnij sie, ze clientSecret jest podany
  • Upewnij sie, ze refreshToken jest podany

Konfiguracja

Konfiguracja konta:

  • username - Nazwa uzytkownika bota
  • accessToken - Token dostepu OAuth z chat:read i chat:write
  • clientId - Twitch Client ID (z Token Generator lub twojej aplikacji)
  • channel - Kanal do dolaczenia (wymagany)
  • enabled - Wlacz to konto (domyslnie: true)
  • clientSecret - Opcjonalnie: do automatycznego odswiezania tokenu
  • refreshToken - Opcjonalnie: do automatycznego odswiezania tokenu
  • expiresIn - Czas wygasniecia tokenu w sekundach
  • obtainmentTimestamp - Czas uzyskania tokenu
  • allowFrom - Lista dozwolonych ID uzytkownikow
  • allowedRoles - Kontrola dostepu oparta na rolach ("moderator" | "owner" | "vip" | "subscriber" | "all")
  • requireMention - Wymagaj @wzmianki (domyslnie: true)

Opcje dostawcy:

  • channels.twitch.enabled - Wlaczenie/wylaczenie startu kanalu
  • channels.twitch.username - Nazwa uzytkownika bota (uproszczona konfiguracja jednokontowa)
  • channels.twitch.accessToken - Token dostepu OAuth (uproszczona konfiguracja jednokontowa)
  • channels.twitch.clientId - Twitch Client ID (uproszczona konfiguracja jednokontowa)
  • channels.twitch.channel - Kanal do dolaczenia (uproszczona konfiguracja jednokontowa)
  • channels.twitch.accounts.<accountName> - Konfiguracja wielokontowa (wszystkie pola konta powyzej)

Pelny przyklad:

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw",
      accessToken: "oauth:abc123...",
      clientId: "xyz789...",
      channel: "vevisk",
      clientSecret: "secret123...",
      refreshToken: "refresh456...",
      allowFrom: ["123456789"],
      allowedRoles: ["moderator", "vip"],
      accounts: {
        default: {
          username: "mybot",
          accessToken: "oauth:abc123...",
          clientId: "xyz789...",
          channel: "your_channel",
          enabled: true,
          clientSecret: "secret123...",
          refreshToken: "refresh456...",
          expiresIn: 14400,
          obtainmentTimestamp: 1706092800000,
          allowFrom: ["123456789", "987654321"],
          allowedRoles: ["moderator"],
        },
      },
    },
  },
}

Akcje narzedziowe

Agent moze wywolac twitch z akcja:

  • send - Wyslij wiadomosc na kanal

Przyklad:

{
  action: "twitch",
  params: {
    message: "Hello Twitch!",
    to: "#mychannel",
  },
}

Bezpieczenstwo i operacje

  • Traktuj tokeny jak hasla - Nigdy nie commituj tokenow do git
  • Uzywaj automatycznego odswiezania tokenow dla dlugodzialajaych botow
  • Uzywaj list dozwolonych ID uzytkownikow zamiast nazw uzytkownikow do kontroli dostepu
  • Monitoruj logi pod katem zdarzen odswiezania tokenow i statusu polaczenia
  • Ogranicz zakresy tokenow - Zadaj tylko chat:read i chat:write
  • Jesli utknales: Zrestartuj gateway po potwierdzeniu, ze zaden inny proces nie jest wlascicielem sesji

Limity

  • 500 znakow na wiadomosc (automatyczne dzielenie na granicach slow)
  • Markdown jest usuwany przed dzieleniem
  • Brak limitowania szybkosci (uzywa wbudowanych limitow Twitch)