当前位置: 首页 > news >正文

OpenClaw从入门到应用——频道:IRC

通过OpenClaw实现副业收入:《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》

Quick start

  1. ~/.openclaw/openclaw.json中启用 IRC 配置。
  2. 至少设置以下内容:
theme={"theme":{"light":"min-light","dark":"min-dark"}}{"channels":{"irc":{"enabled":true,"host":"irc.libera.chat","port":6697,"tls":true,"nick":"openclaw-bot","channels":["#openclaw"]}}}
  1. 启动/重启网关:
theme={"theme":{"light":"min-light","dark":"min-dark"}}openclaw gateway run

Security defaults

  • channels.irc.dmPolicy默认为"pairing"
  • channels.irc.groupPolicy默认为"allowlist"
  • groupPolicy="allowlist"时,需要设置channels.irc.groups来定义允许的频道。
  • 除非你故意接受明文传输,否则请使用 TLS(channels.irc.tls=true)。

Access control

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中的任何人跟机器人对话):

theme={"theme":{"light":"min-light","dark":"min-dark"}} { channels: { irc: { groupPolicy: "allowlist", groups: { "#tuirc-dev": { allowFrom: ["*"], }, }, }, }, }

Reply triggering (mentions)

即使频道被允许(通过groupPolicy+groups)且发送者被允许,OpenClaw 在群组上下文中默认需要提及。这意味着你可能看到类似drop channel … (missing-mention)的日志,除非消息中包含与机器人匹配的提及模式。

要让机器人在 IRC 频道中回复而不需要提及,请禁用该频道的提及门控:

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

或者允许所有IRC 频道(无需每个频道的白名单)并且回复不需要提及:

theme={"theme":{"light":"min-light","dark":"min-dark"}} { channels: { irc: { groupPolicy: "open", groups: { "*": { requireMention: false, allowFrom: ["*"] }, }, }, }, }

Security note (recommended for public channels)

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

频道内所有用户使用相同工具

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

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

使用toolsBySender"*"应用更严格的策略,对你的昵称应用更宽松的策略:

theme={"theme":{"light":"min-light","dark":"min-dark"}} { 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:eigenid:eigen!~eigen@174.127.248.171以实现更强的匹配。
  • 旧的无前缀键仍然被接受,并且仅作为id:匹配。
  • 第一个匹配的发送者策略生效;"*"是通配符回退。

有关群组访问与提及门控(以及它们如何交互)的更多信息,请参阅:https://blog.csdn.net/hy592070616/article/details/81707766。

NickServ

在连接后向 NickServ 认证:

theme={"theme":{"light":"min-light","dark":"min-dark"}}{"channels":{"irc":{"nickserv":{"enabled":true,"service":"NickServ","password":"your-nickserv-password"}}}}

连接时可选的单次注册:

theme={"theme":{"light":"min-light","dark":"min-dark"}}{"channels":{"irc":{"nickserv":{"register":true,"registerEmail":"bot@example.com"}}}}

在昵称注册后禁用register,以避免重复尝试 REGISTER。

Environment variables

默认账户支持:

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

Troubleshooting

  • 如果机器人连接成功但从不在频道中回复,请检查channels.irc.groups以及提及门控是否丢弃了消息(missing-mention)。如果你希望它无需 ping 就能回复,请为该频道设置requireMention: false
  • 如果登录失败,请验证昵称的可用性和服务器密码。
  • 如果在自定义网络上 TLS 失败,请验证主机/端口和证书设置。
http://www.jsqmd.com/news/598784/

相关文章:

  • 圣女司幼幽-造相Z-Turbo进阶用法:用Python脚本批量生成角色图教程
  • 别再乱猜了!手把手教你用数字万用表的‘通断档’精准定位电路板上的信号短路
  • jupyter Kernel Disconnected崩溃的修复
  • 【花雕动手做】ESP32-S3 + MimiClaw 实战:通过飞书自然语言指令控制板载 WS2812 彩灯
  • P社游戏Mod管理神器:手把手教你用C++打造自动排序工具
  • 如何掌握Cucumber.js API接口:从CLI到编程式调用的完整指南
  • 3个智能控制策略让电脑用户实现散热优化与静音平衡
  • 零基础玩转PowerPaint-V1:手把手教你用Gradio实现智能修图,小白也能轻松上手
  • GPT-5.4在机器学习模型训练中的深度应用与实践指南
  • 分支限界法实战:从矩阵规约到回路构建的TSP求解
  • 3个维度彻底解放音乐格式枷锁:qmc-decoder的技术民主化实践
  • GraphRAG vs. Fixed Entity Architecture:知识图谱赋能RAG的新范式
  • Avoiding App Store Rejection: A Deep Dive into Guideline 4.3 and Unique App Design
  • 南昌留学机构怎么选?真心推荐南昌这几家口碑留学机构 - 企业推荐官【官方】
  • Join-Monster核心组件深度解析:查询规划与批量数据获取的完整实现原理
  • 3步解锁AI代码补全:TabNine深度配置与性能优化指南
  • Wi-Fi信号不好?用RTL-SDR和开源软件‘偷看’一下你路由器的星座图(故障排查实战)
  • GPT-5.4深度学习代码调试实战:从报错定位到根因分析
  • 5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南
  • Windows这三项安全机制完胜Linux
  • 5步颠覆黑苹果配置:OpCore-Simplify智能配置工具的硬件兼容性检测革命
  • 【二叉树】—— 算法题
  • 用JSP+Servlet实现图书管理系统:从登录验证到CRUD完整流程
  • 双馈风机次同步振荡抑制策略(一) 含 基于转子侧附加阻尼控制(SDC)的双馈风机次同步振荡抑制...
  • 如何为 Scala.js 编写自定义链接器插件:从零开始的完整指南
  • RWKV7-1.5B-G1A入门实操:GitHub代码仓库分析与总结生成
  • 基于Django的农场管理系统_5c4c39so_zl071
  • Android Init 系列专题【篇二:Selinux启动流程】
  • 如何高效解析小程序包?wxappUnpacker技术指南
  • 别再只会用了!PowerBI中CONCATENATEX函数实战:从动态标签到多值筛选器