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)
- Creez un compte Twitch dedie pour le bot (ou utilisez un compte existant).
- Generez les identifiants : Twitch Token Generator
- Selectionnez Bot Token
- Verifiez que les scopes
chat:readetchat:writesont selectionnes - Copiez le Client ID et lâAccess Token
- Trouvez votre ID utilisateur Twitch : https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- 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).
- Env :
- Demarrez la gateway.
Avertissement : Ajoutez un controle dâacces (
allowFromouallowedRoles) pour empecher les utilisateurs non autorises de declencher le bot.requireMentionesttruepar 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>. usernameest le compte du bot (qui sâauthentifie),channelest le salon de chat a rejoindre.
Configuration (detaillee)
Generer les identifiants
Utilisez Twitch Token Generator :
- Selectionnez Bot Token
- Verifiez que les scopes
chat:readetchat:writesont 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
accessTokenest la valeur du jeton OAuth access (commence generalement par le prefixeoauth:) - Verifiez que le jeton a les scopes
chat:readetchat:write - Si vous utilisez le rafraichissement de jeton, verifiez que
clientSecretetrefreshTokensont 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
clientSecretest fourni - Assurez-vous que
refreshTokenest fourni
Configuration
Configuration de compte :
username- Nom dâutilisateur du botaccessToken- Jeton OAuth access avecchat:readetchat:writeclientId- 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 jetonrefreshToken- Optionnel : pour le rafraichissement automatique de jetonexpiresIn- Expiration du jeton en secondesobtainmentTimestamp- Horodatage dâobtention du jetonallowFrom- Liste dâautorisation par ID utilisateurallowedRoles- 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 canalchannels.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:readetchat: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)