名称: 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 将所有频道活动写入纯文本文件。一个监控脚本负责监听提及事件并触发 OpenClaw 系统事件。通过向 FIFO 写入内容来发送响应。
~/irc/
├── irc.sh # 管理脚本(启动/停止/状态/发送)
├── watch-daemon.sh # 提及监控器 → openclaw 系统事件
└── <服务器>/
└── <频道>/
├── in # FIFO - 向此写入以发送消息
└── out # 仅追加的频道消息日志
ii 包含在大多数包管理器中。Arch 系统:pacman -S ii。Debian/Ubuntu:apt install ii。或从 suckless.org 构建。
运行附带的设置脚本(将创建 ~/irc/irc.sh 和 ~/irc/watch-daemon.sh):
bash scripts/setup.sh --server irc.example.org --port 6667 --nick MyBot --channel "#mychannel"
或手动创建——参考 scripts/irc.sh.template 和 scripts/watch-daemon.sh.template。
实现开机自启动:
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 命令。
watch-daemon.sh 对频道的 out 文件执行 tail -F 监控openclaw system event --text "IRC mention: <消息>" --mode nowin FIFO 进行响应这是事件驱动的——零轮询、即时响应、资源占用极低。
ii 支持在同一服务器上加入多个频道。对于每个额外频道:
echo "/j #其他频道" > ~/irc/<服务器>/in
要监控多个频道,可以运行独立的监控器实例,或修改 watch-daemon.sh 以监控多个 out 文件。
ii 是否在运行(pgrep -f "ii -s"),确认服务器/端口in FIFO 必须存在;检查 ExecStartPost 的时机(如有需要可增加 sleep 时间)pgrep -f watch-daemon),检查昵称是否匹配Restart=always 会处理此问题;ii 在断开连接时退出,systemd 会重启它