Kiwi IRC 1.7.1 配置参数详解
Kiwi IRC 1.7.1 运行时配置全解:config.json 加载与三层合并链路、内置 configTemplates 全量默认值逐项溯源(源码实查)、startupOptions 与 buffers 参数组、启动屏五种取值、? 随机昵称机制、三种连接形态的配置组织与生产配置实测验证。
Kiwi IRC 1.7.1 配置参数详解
目标:讲清 Kiwi IRC 1.7.1 的运行时配置体系——config.json 的加载与合并链路、全部内置默认值(逐项溯源自 v1.7.1 源码 src/res/configTemplates.js)、startupOptions / buffers 等参数组的行为、以及直连 / 网关 / BNC 三种连接形态下的配置组织。所有默认值与行为结论均为 2026-10-26 源码实查与本地实测所得。
一、环境信息
| 项目 | 实测值 |
|---|---|
| 实测日期 | 2026-10-26 |
| 配置溯源对象 | kiwiirc/kiwiirc v1.7.1 源码(src/res/configTemplates.js,373 行;src/components/App.vue;components/startups/*;src/libs/ConfigLoader.js) |
| 实测运行环境 | 与本专栏部署篇同环境:nginx 静态托管 + /ircws/ WebSocket 反代 + Ergo 2.7.0 对端 |
| 实测配置形态 | 直连(direct)模式生产配置,startupScreen=customServer |
二、配置体系与加载链路
2.1 唯一的运行时配置文件
Kiwi IRC 1.7.1 的全部运行时行为由一个 JSON 配置文件驱动:源码树中为 static/config.json,构建后随 dist/ 分发(dist/static/config.json),页面加载后由前端运行时拉取(src/libs/ConfigLoader.js 的 loadFromUrl 实查)。没有独立的后端配置进程,改配置 = 改文件 + 浏览器刷新。
2.2 三层合并:内置模板 → 基础模板 → 用户配置
源码 src/libs/state.js 与 main.js 实查,最终生效的配置按以下顺序合并(后者覆盖前者):
- 内置默认模板:src/res/configTemplates.js 中的 default 对象——全部配置项的权威默认值都在这里(第三章起的参数表即逐项取自该文件);
- 基础模板覆盖:若 config.json 设置了顶层 template 键,则把 configTemplates.irc(硬核 IRC 老手风格)或 configTemplates.team(团队协作风格)合并到默认值之上;
- 用户配置:config.json 本身最后合并——所以只需写「与默认值不同的项」。
两个官方附加模板的覆盖内容(configTemplates.js 实查):
| 模板 | 覆盖项 |
|---|---|
| template: "irc" | showEmojiPicker: false、buffers.messageLayout: "inline"、show_hostnames: true、 coloured_nicklist/colour_nicknames_in_messages/show_emoticons/show_message_info/share_typing/inline_link_auto_previews 全部 false |
| template: "team" | teamHighlights: true、buffers.show_joinparts: false、show_realnames: true |
2.3 JSON5 语法与报错定位
配置文件用 JSON5 解析(ConfigLoader.js 实查):支持注释与尾逗号;语法错误时报错形如 Config file error: ...,并自动把 JSON5 的 at 22:16 转写为 line 22, position 16(源码中的正则替换),可按行号列号直接定位。
2.4 值替换机制:? 变随机数
startupOptions.nick 与 nick_format 中的 ? 会被替换为 0–99 的随机整数——源码 components/startups/CustomServer.vue 实查:nick.replace(/?/g, () => Math.floor(Math.random() * 100).toString())。配置写 guest_? 时,实测连接页预填为 guest_99 一类的随机值,多开页面自然错开昵称。
2.5 配置持久化边界
src/libs/settingTools.js 实查,以下键被列为实例级配置、不会写入用户级持久化状态:emojis、themes、bnc、aliases、restricted、kiwiServer、hide_advanced、windowTitle、startupOptions、plugins、presetNetworks、ircFramework。即这些项改了只影响站点本身,不跟随单个浏览器的用户偏好走。
三、顶层参数详解
以下默认值全部取自 configTemplates.js 的 default 模板(逐项实查)。
3.1 站点外观与语言
| 键 | 默认值 | 说明 |
|---|---|---|
| windowTitle | "Kiwi IRC - The web IRC client" | 浏览器标签页标题(WindowTitle.js 读取;实测改为 KiwiTest Web IRC 后标题同步变化) |
| theme | "Default" | 默认主题名,对应 themes 数组中的 name |
| themes | [{name: Default, url: static/themes/default}] | 可选主题清单(预构建包内置 9 套:Default/Dark/Coffee/GrayFox/Nightswatch/Osprey/Radioactive/Sky/Elite) |
| useMonospace | false | 消息区是否等宽字体 |
| language | "" | 界面语言,空为跟随浏览器(对应 static/locales/ 下的语言包) |
| emojiLocation | "https://kiwiirc.com/shared/emoji/" | 表情图片 CDN 地址 |
| embedly | {Key: ""} | 链接预览服务 embedly 的 key |
3.2 启动与连接骨架
| 键 | 默认值 | 说明 |
|---|---|---|
| startupScreen | "customServer" | 启动屏,详见 3.3 |
| startupOptions | 见第四章 | 连接参数组(服务器/端口/昵称/频道等) |
| kiwiServer | "/webirc/kiwiirc/" | 网关模式后端地址;直连模式应置空 |
| restricted | true | 限制模式:隐藏「网络列表/自助加网络」入口(StateBrowser.vue 实查),把客户端锁定为单服务器形态 |
| bnc | {active: false, server: "", port: 6667, tls: false, path: "", username: "", password: ""} | BNC(bouncer)接入参数,active 为 true 时全部连接经 BNC 路由 |
| presetNetworks | [] | 预置网络清单(配合欢迎屏展示的网络列表) |
3.3 startupScreen:五种内置启动屏
源码 components/App.vue 实查,启动屏组件注册表为:
| 取值 | 组件 | 行为 |
|---|---|---|
| welcome | Welcome.vue | 欢迎页:展示 presetNetworks 网络列表供点选 |
| customServer | CustomServer.vue | 「服务器 + 昵称 + 频道」三要素表单(本专栏部署篇实测即此形态) |
| personal | Personal.vue | 个人客户端形态:多网络管理(默认取值,startupScreen 未配置时回退到它) |
| kiwiBnc | KiwiBnc.vue | 连接 KiwiBNC bouncer 的登录屏 |
| znc | ZncLogin.vue | 连接 ZNC bouncer 的登录屏 |
此外插件可通过 getStartups() 注册自定义启动屏;配错名字会在控制台报 Startup screen "xxx" does not exist 并白屏,排障时先查该值。
3.4 行为开关
| 键 | 默认值 | 说明 |
|---|---|---|
| warnOnExit | true | 关页面时弹「确认离开」提示 |
| quitMessage | "Page closed" | 页面关闭时向 ircd 发送的 QUIT 理由 |
| autoReconnect | false | 断线自动重连 |
| disconnectOnSaslFail | true | SASL 认证失败即断开 |
| noticeActiveBuffer | true | 提及通知只针对当前正在看的缓冲区发桌面通知 |
| changeNickOnCollision | true | 昵称冲突时自动改名 |
| showRaw | false | 是否显示原始协议调试面板 |
| showAutocomplete | true | 输入框自动补全(命令/频道/昵称) |
| autocompleteTokens | ["/", "#", "@"] | 触发自动补全的前缀字符 |
| showEmojiPicker / showColorPicker / showSendButton | true / false / false | 输入区表情面板、颜色面板、独立发送按钮 |
| sidebarDefault | "nicklist" | 侧栏默认页(nicklist/关于/设置等) |
| highlights | "" | 额外高亮关键词(正则) |
| teamHighlights | false | 团队高亮(配合 team 模板) |
| skipHiddenMessages / hideSettings / allowRegisterProtocolHandler | false / null / false | 隐藏类消息过滤、隐藏设置入口、注册协议处理器 |
四、startupOptions 参数组(连接行为)
默认值(configTemplates.js 实查):
{
"server": "",
"port": 6667,
"tls": false,
"channel": "",
"nick": "kiwi_?",
"direct": false,
"state_key": "kiwi-state",
"remember_buffers": true,
"nick_format": ""
}
逐项说明(含部署篇实测值对照):
| 键 | 默认 | 实测生产值 | 说明 |
|---|---|---|---|
| server | "" | "192.168.146.131" | IRC 服务器地址,连接页预填 |
| port | 6667 | 8143 | WebSocket 入口端口——direct 模式下是 nginx 入口而非 ircd 端口 |
| tls | false | false | 是否走 wss/https |
| direct | false | true | true 为直连模式(浏览器 WebSocket 经反代直达 ircd);false 为网关模式(走 kiwiServer) |
| direct_path | (无默认,直连时可省) | "/ircws/" | 直连模式的 WebSocket 路径,对应 nginx 反代段 |
| channel | "" | "#kiwitest" | 连接后自动加入的频道 |
| nick | "kiwi_?" | "guest_?" | 昵称模板,? 替换为 0–99 随机数(见 2.4) |
| state_key | "kiwi-state" | — | localStorage 键名(连接状态持久化) |
| remember_buffers | true | — | 重连后恢复缓冲区 |
| nick_format | "" | — | 昵称格式化模板(可用 ? 随机数) |
| greetingText / buttonText / welcomeText 等文案项 | 无默认 | greetingText: "连接 KiwiTest IRC 网络"、buttonText: "连接" | customServer 启动屏的界面文案定制(实测生效) |
⚠️ 注意:startupOptions 直接决定用户「开箱看到什么」。restricted: true + startupScreen: "customServer" 组合是「站点即单一网络入口」的最常见形态;要开放多网络自助连接,用 restricted: false + startupScreen: "personal"。
五、buffers 参数组(消息缓冲与显示)
buffers 控制每个频道/私聊缓冲区的显示与通知行为,默认值(configTemplates.js 实查,共 37 项,分组列出):
布局与时间戳
| 键 | 默认值 | 说明 |
|---|---|---|
| messageLayout | "modern" | 消息布局:modern(气泡流)/ inline(单行流)/ compact(紧凑行,UI 名 traditional,AppSettings.vue 实查) |
| timestamp_format | "%H:%M:%S" | 行内时间戳格式 |
| timestamp_full_format | "" | 悬浮完整时间戳,空为浏览器本地格式 |
| show_timestamps | true | 显示时间戳 |
通知与提醒
| 键 | 默认值 | 说明 |
|---|---|---|
| alert_on | "highlight" | 提醒时机:message(所有消息)/ highlight(仅提及我)/ never(BufferSettings.vue 三选项实查);响铃判定见 AudioManager.js:提及且为 highlight、或为 message 时触发 |
| mute_sound | false | 静音提示音 |
| flash_title | "message" | 标题栏闪烁:message/highlight/off |
| hide_message_counts | false | 隐藏未读计数 |
| traffic_as_activity | false | join/part 等流量消息是否算未读活动 |
| server_as_activity | true | 服务器消息是否算活动 |
消息可见性
| 键 | 默认值 | 说明 |
|---|---|---|
| show_joinparts / show_nick_changes / show_mode_changes / show_presence_changes | 全 true | 入退频道/改昵称/模式变更/在线状态变更消息 |
| show_topics / show_topic_in_header | true / false | 频道话题展示位置 |
| show_hostnames | false | 消息里显示用户主机名 |
| show_realnames | false | 显示真实姓名 |
| show_message_info | true | 消息悬停信息 |
| show_emoticons | true | 表情符号渲染为图片 |
| extra_formatting | true | 额外格式(代码块等) |
| coloured_nicklist / colour_nicknames_in_messages | true / true | 昵着色 |
| nicklist_avatars | false | 昵称列表头像 |
| show_link_previews / inline_link_auto_previews / inline_link_auto_previews_query / inline_link_auto_preview_whitelist | true / true / true / ".*" | 链接预览行为与白名单 |
| show_buffer_groups | true | 缓冲区分组显示 |
行为细节
| 键 | 默认值 | 说明 |
|---|---|---|
| scrollback_size | 250 | 回滚缓冲条数 |
| block_pms | false | 拒收私聊 |
| shared_input | false | 多缓冲区共享输入框 |
| share_typing | true | 输入中状态广播 |
| who_loop | true | WHO 轮询 |
| prompt_leave | "channels" | 关闭缓冲区二次确认:all/channels/queries/none |
| auto_request_history | "channels" | 打开缓冲区自动拉取历史:all/channels/queries/none |
| default_ban_mask | "*!%i@%h" | 默认封禁掩码 |
| default_kick_reason | "Your behaviour is not conducive to the desired environment." | 默认踢出理由 |
六、文本格式与别名(textFormats / aliases)
textFormats:界面消息模板集合(60+ 键),用 %nick/%text/%channel 等占位符定制每类消息的呈现。几个实测对照:部署篇频道视图中的「→ kiwibrowser has joined」正是默认模板 channel_join: "→ %text" 的渲染结果;入退频道箭头、话题 ⓘ、错误 ⚠ 前缀全部出自这里。常用键举例:
| 键 | 默认模板 | 渲染对象 |
|---|---|---|
| channel_join | "→ %text" | 入频提示 |
| channel_part / channel_quit | "← %text (%reason)" | 退频/断开提示 |
| channel_kicked | "← %text (%reason)" | 被踢提示 |
| action | "* %nick %text" | /me 动作消息 |
| notice | "[NOTICE] %text" | NOTICE 消息 |
| message_nick | "%prefix%nick" | 消息发送者前缀格式 |
aliases:命令别名表(默认为一段多行模板字符串,configTemplates.js 实查),常用默认别名包括 /p→/part、/j→/join、/q→/query、/w→/whois、/raw→/quote、/k→/kick、/bans→/mode +b、/slap 彩蛋别名等。可在 config.json 中整体覆盖以注入站点自定义命令。
emojis:文本表情→图片文件映射表(130+ 项),配合 emojiLocation 使用;一般不动,需定制表情时在 config.json 覆盖对应键值即可。
七、三种连接形态的配置组织
| 形态 | 关键配置 | 链路 |
|---|---|---|
| 直连(本专栏部署篇实测) | startupOptions.direct: true、direct_path: "/ircws/"、kiwiServer: ""、port 指向 nginx 入口 | 浏览器 → nginx(/ircws/ 反代)→ ircd 的 WebSocket 监听 |
| 网关 | startupOptions 不设 direct;kiwiServer 指向网关路径(预构建包默认 "/webirc/kiwiirc/") | 浏览器 → webircgateway → 任意普通 ircd(可注入 WebIRC 身份) |
| BNC | bnc.active: true + bnc 连接参数;startupScreen 配 kiwiBnc 或 znc | 浏览器 → KiwiBNC/ZNC → ircd(离线保活、历史回放) |
配置组织建议:直连形态下端口/路径三处联动(nginx listen、startupOptions.port、direct_path);网关形态下注意 kiwiServer 与网关路由前缀一致;BNC 形态的账号密码建议走连接页输入而非写死在配置里。
八、生产配置实测验证
以部署篇的生产配置为基准(直连形态,全文见部署篇第六章),逐项验证结果如下(2026-10-26 实测):
| 验证项 | 配置值 | 实测结果 |
|---|---|---|
| windowTitle | "KiwiTest Web IRC" | 浏览器标签页标题 = KiwiTest Web IRC(页面 title 实读) |
| startupScreen | "customServer" | 启动页出现三要素表单 |
| startupOptions.server/port | "192.168.146.131" / 8143 | 表单预填 server 框 = 192.168.146.131:8143(DOM 实读:form values: ["192.168.146.131:8143","kiwibrowser","#kiwitest"]) |
| startupOptions.nick | "guest_?" | 预填随机昵称(? 机制生效),改填 kiwibrowser 后连接成功 |
| startupOptions.channel | "#kiwitest" | 预填 #kiwitest,连接后自动入频(→ kiwibrowser has joined) |
| greetingText / buttonText | 中文文案 | 启动页提示语与「连接」按钮按配置渲染 |
| direct + direct_path | true + "/ircws/" | WebSocket 走 /ircws/ 反代,curl 握手 101 Switching Protocols(回显见部署篇) |
九、常见配置问题(FAQ)
Q1:改了 config.json 不生效? A:配置在页面加载时拉取,改完需浏览器强制刷新(Ctrl+Shift+R);另确认改的是部署目录(dist/static/config.json 或站点目录对应文件),而不是源码树里的副本。
Q2:启动屏白屏? A:startupScreen 拼错时 App.vue 会报 Startup screen "xxx" does not exist(控制台可见)。合法值:welcome/customServer/personal/kiwiBnc/znc,或插件注册的自定义名。
Q3:配置报 Config file error: JSON5 ...? A:JSON5 语法错误会精确到行号列号(line 22, position 16 形式),按提示修复;注意 JSON5 允许注释和尾逗号,但不允许未加引号的非法标识符之外的花样。
Q4:昵称尾缀随机数能控制范围吗? A:? 固定替换为 0–99 随机整数(源码写死 Math.floor(Math.random() * 100)),无法配置范围;需要更大区分度可用 nick_format 自定义模板或接入账号体系。
Q5:restricted 设 false 后用户能改什么? A:放开的是网络列表/自助添加网络入口(StateBrowser 侧栏);服务器地址锁定逻辑还受 startupScreen 形态影响,两种取值建议按 3.3 的形态表搭配使用。
Q6:template 模板与显式配置冲突听谁的? A:合并顺序为 default 模板 → template 指定模板 → config.json,显式配置永远最后覆盖;反之模板覆盖过的项,若 config.json 没写,就以模板值为准。
Q7:direct 模式连不上而网关模式正常? A:依次查三处:ircd 是否开了 WebSocket 监听(Ergo 为 listeners 的 websocket: true,注意其「仅 WebSocket」语义,纯 TCP 客户端连该口会得 400)、nginx 反代段是否带 Upgrade/Connection 头、startupOptions.port 是否指向 nginx 而非 ircd 端口。
十、参考链接与站内文档
- Kiwi IRC 仓库:https://github.com/kiwiirc/kiwiirc
- 配置 wiki:https://github.com/kiwiirc/kiwiirc/wiki/Configuration
- 插件 wiki:https://github.com/kiwiirc/kiwiirc/wiki/Plugins
- v1.7.1 源码 configTemplates.js(本文默认值溯源处):https://github.com/kiwiirc/kiwiirc/blob/v1.7.1/src/res/configTemplates.js
- webircgateway:https://github.com/kiwiirc/webircgateway
- KiwiBNC:https://github.com/kiwiirc/kiwibnc
站内相关文档: