当您想在经典频道(#room)和直接消息中使�?OpenClaw 时使�?IRC。IRC 作为扩展插件发货,但在主配置中配置在 channels.irc 下�?

快速开�?

  1. �?~/.openclaw/openclaw.json 中启�?IRC 配置�?
  2. 至少设置�?
{
  "channels": {
    "irc": {
      "enabled": true,
      "host": "irc.libera.chat",
      "port": 6697,
      "tls": true,
      "nick": "openclaw-bot",
      "channels": ["#openclaw"]
    }
  }
}
  1. 启动/重启 gateway�?
openclaw gateway run

安全默认

  • channels.irc.dmPolicy 默认�?"pairing"�?
  • channels.irc.groupPolicy 默认�?"allowlist"�?
  • 使用 groupPolicy="allowlist" 时,设置 channels.irc.groups 以定义允许的频道�?
  • 使用 TLS(channels.irc.tls=true),除非您故意接受明文传输�?

访问控制

IRC 频道有两个单独的”门控”�?

  1. 频道访问groupPolicy + groups):机器人是否接受来自频道的消息�?
  2. **发送者访�?*(groupAllowFrom / 每频�?groups["#channel"].allowFrom):谁被允许在该频道内触发机器人�?

配置键:

  • DM 允许列表(DM 发送者访问):channels.irc.allowFrom
  • 群组发送者允许列表(频道发送者访问):channels.irc.groupAllowFrom
  • 每频道控制(频道 + 发送�?+ 提及规则):channels.irc.groups["#channel"]
  • channels.irc.groupPolicy="open" 允许未配置的频道�?仍然默认需要提�?�?

允许列表条目应使用稳定的发送者身份(nick!user@host)�? 仅当 channels.irc.dangerouslyAllowNameMatching: true 时,才启用可变的光杆昵称匹配�?

常见陷阱:allowFrom 用于 DM,而不是频�?

如果您看到如下日志:

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

这意味着发送者不被允许用�?*群组/频道**消息。通过以下方式修复�?

  • 设置 channels.irc.groupAllowFrom(全局用于所有频道),或
  • 设置每频道发送者允许列表:channels.irc.groups["#channel"].allowFrom

示例(允�?#tuirc-dev 中的任何人与机器人对话)�?

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

回复触发(提及)

即使频道被允许(通过 groupPolicy + groups)并且发送者被允许,OpenClaw 在群组上下文中默认为**需要提�?*�?

这意味着您可能会看到类似 drop channel �?(missing-mention) 的日志,除非消息包含与机器人匹配的提及模式�?

要使机器人在 IRC 频道�?*无需提及**即可回复,请为该频道禁用提及门控�?

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

或者允�?所�? IRC 频道(无每频道允许列表)仍然无需提及即可回复�?

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

安全说明(公共频道推荐)

如果您在公共频道中允�?allowFrom: ["*"],任何人都可以提示机器人�? 为降低风险,请限制该频道的工具�?

频道中每个人的相同工�?

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

每个发送者的不同工具(所有者获得更多权限)

使用 toolsBySender �?"*" 应用更严格的策略,对您的昵称应用更宽松的策略�?

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

注意�?

  • toolsBySender 键应使用 id: 用于 IRC 发送者身份值: id:eigen �?id:[email protected] 用于更强的匹配�?
  • 仍然接受旧版无前缀键并仅匹配为 id:�?
  • 第一个匹配的发送者策略获胜;"*" 是通配符回退�?

有关群组访问与提及门控(以及它们如何交互)的更多信息,请参阅:/zh/docs/channels/groups�?

NickServ

连接后与 NickServ 识别�?

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

可选的一次性连接注册:

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

注册后禁�?register 以避免重�?REGISTER 尝试�?

环境变量

默认账户支持�?

  • IRC_HOST
  • IRC_PORT
  • IRC_TLS
  • IRC_NICK
  • IRC_USERNAME
  • IRC_REALNAME
  • IRC_PASSWORD
  • IRC_CHANNELS(逗号分隔�?
  • IRC_NICKSERV_PASSWORD
  • IRC_NICKSERV_REGISTER_EMAIL

排查

  • 如果机器人连接但从不回复频道,请验证 channels.irc.groups 以及 提及门控是否正在丢弃消息(missing-mention)。如果您希望它在没有 ping 的情况下回复,请为频道设�?requireMention:false�?
  • 如果登录失败,请验证昵称可用性和服务器密码�?
  • 如果自定义网络上�?TLS 失败,请验证主机/端口和证书设置�?