Twitch (plugin)

Support du chat Twitch via connexion IRC. OpenClaw se connecte en tant qu’utilisateur Twitch (compte bot) pour recevoir et envoyer des messages dans les canaux.

Plugin requis

Twitch est fourni comme plugin et n’est pas inclus dans l’installation de base.

Installation via CLI (registre npm) :

openclaw plugins install @openclaw/twitch

Checkout local (execution depuis un depot git) :

openclaw plugins install ./extensions/twitch

Details : Plugins

Configuration rapide (debutant)

  1. Creez un compte Twitch dedie pour le bot (ou utilisez un compte existant).
  2. Generez les identifiants : Twitch Token Generator
    • Selectionnez Bot Token
    • Verifiez que les scopes chat:read et chat:write sont selectionnes
    • Copiez le Client ID et l’Access Token
  3. Trouvez votre ID utilisateur Twitch : https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  4. Configurez le jeton :
    • Env : OPENCLAW_TWITCH_ACCESS_TOKEN=... (compte par defaut uniquement)
    • Ou config : channels.twitch.accessToken
    • Si les deux sont definis, la config a la priorite (le repli env est uniquement pour le compte par defaut).
  5. Demarrez la gateway.

Avertissement : Ajoutez un controle d’acces (allowFrom ou allowedRoles) pour empecher les utilisateurs non autorises de declencher le bot. requireMention est true par defaut.

Configuration minimale :

{
  channels: {
    twitch: {
      enabled: true,
      username: "openclaw", // Compte Twitch du bot
      accessToken: "oauth:abc123...", // Jeton OAuth Access (ou utilisez la variable d'env OPENCLAW_TWITCH_ACCESS_TOKEN)
      clientId: "xyz789...", // Client ID du Token Generator
      channel: "vevisk", // Chat du canal Twitch a rejoindre (requis)
      allowFrom: ["123456789"], // (recommande) Votre ID utilisateur Twitch uniquement - obtenez-le depuis https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
    },
  },
}

Description

  • Un canal Twitch gere par la Gateway.
  • Routage deterministe : les reponses retournent toujours a Twitch.
  • Chaque compte correspond a une cle de session isolee agent:<agentId>:twitch:<accountName>.
  • username est le compte du bot (qui s’authentifie), channel est le salon de chat a rejoindre.

Configuration (detaillee)

Generer les identifiants

Utilisez Twitch Token Generator :

  • Selectionnez Bot Token
  • Verifiez que les scopes chat:read et chat:write sont selectionnes
  • Copiez le Client ID et l’Access Token

Pas besoin d’enregistrement d’application manuel. Les jetons expirent apres plusieurs heures.

Configurer le bot

Variable d’env (compte par defaut uniquement) :

OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...

Ou config :

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

Si les deux sont definis, la config a la priorite.

Controle d’acces (recommande)

{
  channels: {
    twitch: {
      allowFrom: ["123456789"], // (recommande) Votre ID utilisateur Twitch uniquement
    },
  },
}

Preferez allowFrom pour une liste d’autorisation stricte. Utilisez allowedRoles a la place si vous souhaitez un acces base sur les roles.

Roles disponibles : "moderator", "owner", "vip", "subscriber", "all".

Pourquoi les IDs utilisateur ? Les noms d’utilisateur peuvent changer, permettant l’usurpation d’identite. Les IDs utilisateur sont permanents.

Trouvez votre ID utilisateur Twitch : https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (Convertir votre nom d’utilisateur Twitch en ID)

Rafraichissement de jeton (optionnel)

Les jetons de Twitch Token Generator ne peuvent pas etre rafraichis automatiquement - regenerez-les quand ils expirent.

Pour le rafraichissement automatique de jeton, creez votre propre application Twitch sur Twitch Developer Console et ajoutez a la config :

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

Le bot rafraichit automatiquement les jetons avant expiration et journalise les evenements de rafraichissement.

Support multi-comptes

Utilisez channels.twitch.accounts avec des jetons par compte. Voir gateway/configuration pour le patron partage.

Exemple (un compte bot dans deux canaux) :

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

Remarque : Chaque compte necessite son propre jeton (un jeton par canal).

Controle d’acces

Restrictions basees sur les roles

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

Liste d’autorisation par ID utilisateur (le plus securise)

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

Acces base sur les roles (alternative)

allowFrom est une liste d’autorisation stricte. Quand elle est definie, seuls ces IDs utilisateur sont autorises. Si vous souhaitez un acces base sur les roles, laissez allowFrom non defini et configurez allowedRoles a la place :

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

Desactiver l’exigence de @mention

Par defaut, requireMention est true. Pour desactiver et repondre a tous les messages :

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

Depannage

Commencez par executer les commandes de diagnostic :

openclaw doctor
openclaw channels status --probe

Le bot ne repond pas aux messages

Verifiez le controle d’acces : assurez-vous que votre ID utilisateur est dans allowFrom, ou supprimez temporairement allowFrom et definissez allowedRoles: ["all"] pour tester.

Verifiez que le bot est dans le canal : le bot doit rejoindre le canal specifie dans channel.

Problemes de jeton

“Failed to connect” ou erreurs d’authentification :

  • Verifiez que accessToken est la valeur du jeton OAuth access (commence generalement par le prefixe oauth:)
  • Verifiez que le jeton a les scopes chat:read et chat:write
  • Si vous utilisez le rafraichissement de jeton, verifiez que clientSecret et refreshToken sont definis

Le rafraichissement de jeton ne fonctionne pas

Verifiez les logs pour les evenements de rafraichissement :

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

Si vous voyez “token refresh disabled (no refresh token)” :

  • Assurez-vous que clientSecret est fourni
  • Assurez-vous que refreshToken est fourni

Configuration

Configuration de compte :

  • username - Nom d’utilisateur du bot
  • accessToken - Jeton OAuth access avec chat:read et chat:write
  • clientId - Client ID Twitch (du Token Generator ou de votre application)
  • channel - Canal a rejoindre (requis)
  • enabled - Activer ce compte (par defaut : true)
  • clientSecret - Optionnel : pour le rafraichissement automatique de jeton
  • refreshToken - Optionnel : pour le rafraichissement automatique de jeton
  • expiresIn - Expiration du jeton en secondes
  • obtainmentTimestamp - Horodatage d’obtention du jeton
  • allowFrom - Liste d’autorisation par ID utilisateur
  • allowedRoles - Controle d’acces base sur les roles ("moderator" | "owner" | "vip" | "subscriber" | "all")
  • requireMention - Exiger une @mention (par defaut : true)

Options du fournisseur :

  • channels.twitch.enabled - Activer/desactiver le demarrage du canal
  • channels.twitch.username - Nom d’utilisateur du bot (configuration simplifiee a compte unique)
  • channels.twitch.accessToken - Jeton OAuth access (configuration simplifiee a compte unique)
  • channels.twitch.clientId - Client ID Twitch (configuration simplifiee a compte unique)
  • channels.twitch.channel - Canal a rejoindre (configuration simplifiee a compte unique)
  • channels.twitch.accounts.<accountName> - Configuration multi-comptes (tous les champs de compte ci-dessus)

Exemple complet :

{
  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"],
        },
      },
    },
  },
}

Actions d’outils

L’agent peut appeler twitch avec l’action :

  • send - Envoyer un message a un canal

Exemple :

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

Securite et operations

  • Traitez les jetons comme des mots de passe - Ne commitez jamais les jetons dans git
  • Utilisez le rafraichissement automatique de jeton pour les bots de longue duree
  • Utilisez des listes d’autorisation par ID utilisateur au lieu des noms d’utilisateur pour le controle d’acces
  • Surveillez les logs pour les evenements de rafraichissement de jeton et l’etat de connexion
  • Limitez les scopes des jetons - Ne demandez que chat:read et chat:write
  • En cas de blocage : redemarrez la gateway apres avoir confirme qu’aucun autre processus ne possede la session

Limites

  • 500 caracteres par message (decoupe automatique aux limites de mots)
  • Le Markdown est supprime avant la decoupe
  • Pas de limitation de debit (utilise les limites de debit integrees de Twitch)