Utilisez IRC quand vous souhaitez OpenClaw dans des canaux classiques (#room) et des messages prives. IRC est fourni comme plugin d’extension, mais il se configure dans la configuration principale sous channels.irc.

Demarrage rapide

  1. Activez la configuration IRC dans ~/.openclaw/openclaw.json.
  2. Definissez au minimum :
{
  "channels": {
    "irc": {
      "enabled": true,
      "host": "irc.libera.chat",
      "port": 6697,
      "tls": true,
      "nick": "openclaw-bot",
      "channels": ["#openclaw"]
    }
  }
}
  1. Demarrez/redemarrez la gateway :
openclaw gateway run

Valeurs de securite par defaut

  • channels.irc.dmPolicy est par defaut "pairing".
  • channels.irc.groupPolicy est par defaut "allowlist".
  • Avec groupPolicy="allowlist", definissez channels.irc.groups pour specifier les canaux autorises.
  • Utilisez TLS (channels.irc.tls=true) sauf si vous acceptez intentionnellement le transport en clair.

Controle d’acces

Il y a deux « portes » separees pour les canaux IRC :

  1. Acces au canal (groupPolicy + groups) : si le bot accepte les messages d’un canal.
  2. Acces expediteur (groupAllowFrom / par canal groups["#channel"].allowFrom) : qui peut declencher le bot dans ce canal.

Cles de configuration :

  • Liste d’autorisation DM (acces DM) : channels.irc.allowFrom
  • Liste d’autorisation expediteur groupe (acces expediteur canal) : channels.irc.groupAllowFrom
  • Controles par canal (canal + expediteur + regles de mention) : channels.irc.groups["#channel"]
  • channels.irc.groupPolicy="open" autorise les canaux non configures (toujours avec filtrage par mention par defaut)

Les entrees de liste d’autorisation doivent utiliser des identites d’expediteur stables (nick!user@host). La correspondance par pseudo nu est mutable et n’est activee que lorsque channels.irc.dangerouslyAllowNameMatching: true.

Piege courant : allowFrom concerne les DMs, pas les canaux

Si vous voyez des logs comme :

  • irc: drop group sender alice!ident@host (policy=allowlist)

…cela signifie que l’expediteur n’etait pas autorise pour les messages de groupe/canal. Corrigez en :

  • definissant channels.irc.groupAllowFrom (global pour tous les canaux), ou
  • definissant des listes d’autorisation par canal : channels.irc.groups["#channel"].allowFrom

Exemple (autoriser n’importe qui dans #tuirc-dev a parler au bot) :

{
  channels: {
    irc: {
      groupPolicy: "allowlist",
      groups: {
        "#tuirc-dev": { allowFrom: ["*"] },
      },
    },
  },
}

Declenchement des reponses (mentions)

Meme si un canal est autorise (via groupPolicy + groups) et que l’expediteur est autorise, OpenClaw applique par defaut le filtrage par mention dans les contextes de groupe.

Cela signifie que vous pouvez voir des logs comme drop channel ... (missing-mention) sauf si le message inclut un pattern de mention correspondant au bot.

Pour que le bot reponde dans un canal IRC sans necessiter de mention, desactivez le filtrage par mention pour ce canal :

{
  channels: {
    irc: {
      groupPolicy: "allowlist",
      groups: {
        "#tuirc-dev": {
          requireMention: false,
          allowFrom: ["*"],
        },
      },
    },
  },
}

Ou pour autoriser tous les canaux IRC (sans liste par canal) tout en repondant sans mentions :

{
  channels: {
    irc: {
      groupPolicy: "open",
      groups: {
        "*": { requireMention: false, allowFrom: ["*"] },
      },
    },
  },
}

Remarque de securite (recommande pour les canaux publics)

Si vous autorisez allowFrom: ["*"] dans un canal public, n’importe qui peut interagir avec le bot. Pour reduire les risques, restreignez les outils pour ce canal.

Memes outils pour tous dans le canal

{
  channels: {
    irc: {
      groups: {
        "#tuirc-dev": {
          allowFrom: ["*"],
          tools: {
            deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
          },
        },
      },
    },
  },
}

Outils differents par expediteur (le proprietaire a plus de pouvoir)

Utilisez toolsBySender pour appliquer une politique plus stricte a "*" et une plus souple a votre pseudo :

{
  channels: {
    irc: {
      groups: {
        "#tuirc-dev": {
          allowFrom: ["*"],
          toolsBySender: {
            "*": {
              deny: ["group:runtime", "group:fs", "gateway", "nodes", "cron", "browser"],
            },
            "id:eigen": {
              deny: ["gateway", "nodes", "cron"],
            },
          },
        },
      },
    },
  },
}

Remarques :

  • Les cles toolsBySender doivent utiliser id: pour les valeurs d’identite des expediteurs IRC : id:eigen ou id:[email protected] pour une correspondance plus forte.
  • Les cles legacy non prefixees sont toujours acceptees et correspondent uniquement a id:.
  • La premiere politique d’expediteur correspondante l’emporte ; "*" est le repli joker.

Pour en savoir plus sur l’acces aux groupes vs le filtrage par mention (et comment ils interagissent), voir : /channels/groups.

NickServ

Pour s’identifier aupres de NickServ apres connexion :

{
  "channels": {
    "irc": {
      "nickserv": {
        "enabled": true,
        "service": "NickServ",
        "password": "your-nickserv-password"
      }
    }
  }
}

Enregistrement unique optionnel a la connexion :

{
  "channels": {
    "irc": {
      "nickserv": {
        "register": true,
        "registerEmail": "[email protected]"
      }
    }
  }
}

Desactivez register apres l’enregistrement du pseudo pour eviter les tentatives REGISTER repetees.

Variables d’environnement

Le compte par defaut prend en charge :

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS (separees par des virgules)
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

Depannage

  • Si le bot se connecte mais ne repond jamais dans les canaux, verifiez channels.irc.groups et si le filtrage par mention rejette les messages (missing-mention). Si vous voulez qu’il reponde sans ping, definissez requireMention:false pour le canal.
  • Si la connexion echoue, verifiez la disponibilite du pseudo et le mot de passe du serveur.
  • Si TLS echoue sur un reseau personnalise, verifiez l’hote/port et la configuration du certificat.