OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  ii-irc:基于文件的极简持久化 IRC 客户端

ii-irc:基于文件的极简持久化 IRC 客户端

 
  cluster ·  2026-02-06 19:25:27 · 3 次点击  · 0 条评论  

名称: ii-irc
描述: 使用 ii(基于文件的极简 IRC 客户端)建立持久化 IRC 在线状态,并支持事件驱动的提及检测。适用于在 IRC 上设置 AI 代理、监控 IRC 频道、发送 IRC 消息,或通过 ii 将 OpenClaw 与 IRC 集成。涵盖 ii 设置、提及监控器、systemd 服务以及消息发送/读取。
元数据: {"openclaw":{"os":["linux"],"requires":{"bins":["ii"]},"install":[{"id":"pacman","kind":"shell","command":"sudo pacman -S ii","bins":["ii"],"label":"通过 pacman 安装 ii(Arch)"},{"id":"apt","kind":"apt","packages":["ii"],"bins":["ii"],"label":"通过 apt 安装 ii(Debian/Ubuntu)"},{"id":"source","kind":"shell","command":"git clone https://git.suckless.org/ii && cd ii && make && sudo make install","bins":["ii"],"label":"从源码构建 ii"}]}}


ii-IRC:面向 AI 代理的事件驱动 IRC 方案

ii 将所有频道活动写入纯文本文件。一个监控脚本负责监听提及事件并触发 OpenClaw 系统事件。通过向 FIFO 写入内容来发送响应。

架构

~/irc/
├── irc.sh              # 管理脚本(启动/停止/状态/发送)
├── watch-daemon.sh     # 提及监控器 → openclaw 系统事件
└── <服务器>/
    └── <频道>/
        ├── in          # FIFO - 向此写入以发送消息
        └── out         # 仅追加的频道消息日志

快速设置

1. 安装 ii

ii 包含在大多数包管理器中。Arch 系统:pacman -S ii。Debian/Ubuntu:apt install ii。或从 suckless.org 构建。

2. 创建脚本

运行附带的设置脚本(将创建 ~/irc/irc.sh~/irc/watch-daemon.sh):

bash scripts/setup.sh --server irc.example.org --port 6667 --nick MyBot --channel "#mychannel"

或手动创建——参考 scripts/irc.sh.templatescripts/watch-daemon.sh.template

3. 创建 systemd 用户服务(推荐)

实现开机自启动:

mkdir -p ~/.config/systemd/user

# IRC 连接服务
cat > ~/.config/systemd/user/irc-bot.service << 'EOF'
[Unit]
Description=IRC connection (ii)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/ii -s SERVER -p PORT -n NICK -i %h/irc
ExecStartPost=/bin/bash -c 'sleep 3 && echo "/j CHANNEL" > %h/irc/SERVER/in'
Restart=always
RestartSec=10

[Install]
WantedBy=default.target
EOF

# 提及监控服务
cat > ~/.config/systemd/user/irc-watcher.service << 'EOF'
[Unit]
Description=IRC mention watcher
After=irc-bot.service
Wants=irc-bot.service

[Service]
Type=simple
ExecStart=%h/irc/watch-daemon.sh
Restart=always
RestartSec=5

[Install]
WantedBy=default.target
EOF

# 替换服务文件中的 SERVER, PORT, NICK, CHANNEL,然后执行:
systemctl --user daemon-reload
systemctl --user enable --now irc-bot.service irc-watcher.service

发送消息

# 通过管理脚本
~/irc/irc.sh send "Hello, world!"

# 或直接写入 FIFO
echo "Hello, world!" > ~/irc/<服务器>/<频道>/in

重要提示: ii 会在字节边界处拆分长消息,这可能导致单词中间或 UTF-8 字符中间被截断。请将消息控制在约 400 个字符以内。对于较长内容,请拆分为多条消息,并在发送之间稍作停顿。

读取上下文

# 最近 N 条消息(节省 token)
tail -n 20 ~/irc/<服务器>/<频道>/out

# 快速状态(最近 5 条消息)
~/irc/irc.sh status

切勿读取整个 out 文件——它会无限增长。始终使用带限制的 tail 命令。

提及检测工作原理

  1. watch-daemon.sh 对频道的 out 文件执行 tail -F 监控
  2. 检查每一新行(不区分大小写)是否包含机器人的昵称
  3. 跳过自身消息及加入/离开通知
  4. 匹配时触发 → openclaw system event --text "IRC mention: <消息>" --mode now
  5. OpenClaw 被唤醒,可通过 in FIFO 进行响应

这是事件驱动的——零轮询、即时响应、资源占用极低。

加入多个频道

ii 支持在同一服务器上加入多个频道。对于每个额外频道:

echo "/j #其他频道" > ~/irc/<服务器>/in

要监控多个频道,可以运行独立的监控器实例,或修改 watch-daemon.sh 以监控多个 out 文件。

故障排除

  • 无法连接: 检查 ii 是否在运行(pgrep -f "ii -s"),确认服务器/端口
  • 无法加入频道: in FIFO 必须存在;检查 ExecStartPost 的时机(如有需要可增加 sleep 时间)
  • 提及未触发: 确认监控器在运行(pgrep -f watch-daemon),检查昵称是否匹配
  • 消息拆分异常: 缩短消息;ii 有约 512 字节的 IRC 协议限制
  • 重新连接: systemd 的 Restart=always 会处理此问题;ii 在断开连接时退出,systemd 会重启它
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor