Kiwi IRC 1.7.1 配置参数详解

Kiwi IRC 1.7.1 运行时配置全解:config.json 加载与三层合并链路、内置 configTemplates 全量默认值逐项溯源(源码实查)、startupOptions 与 buffers 参数组、启动屏五种取值、? 随机昵称机制、三种连接形态的配置组织与生产配置实测验证。

Kiwi IRCKiwi IRCIRC即时通讯2026/10/26

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 实查,最终生效的配置按以下顺序合并(后者覆盖前者):

  1. 内置默认模板:src/res/configTemplates.js 中的 default 对象——全部配置项的权威默认值都在这里(第三章起的参数表即逐项取自该文件);
  2. 基础模板覆盖:若 config.json 设置了顶层 template 键,则把 configTemplates.irc(硬核 IRC 老手风格)或 configTemplates.team(团队协作风格)合并到默认值之上;
  3. 用户配置: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)
useMonospacefalse消息区是否等宽字体
language""界面语言,空为跟随浏览器(对应 static/locales/ 下的语言包)
emojiLocation"https://kiwiirc.com/shared/emoji/"表情图片 CDN 地址
embedly{Key: ""}链接预览服务 embedly 的 key

3.2 启动与连接骨架

键默认值说明
startupScreen"customServer"启动屏,详见 3.3
startupOptions见第四章连接参数组(服务器/端口/昵称/频道等)
kiwiServer"/webirc/kiwiirc/"网关模式后端地址;直连模式应置空
restrictedtrue限制模式:隐藏「网络列表/自助加网络」入口(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 实查,启动屏组件注册表为:

取值组件行为
welcomeWelcome.vue欢迎页:展示 presetNetworks 网络列表供点选
customServerCustomServer.vue「服务器 + 昵称 + 频道」三要素表单(本专栏部署篇实测即此形态)
personalPersonal.vue个人客户端形态:多网络管理(默认取值,startupScreen 未配置时回退到它)
kiwiBncKiwiBnc.vue连接 KiwiBNC bouncer 的登录屏
zncZncLogin.vue连接 ZNC bouncer 的登录屏

此外插件可通过 getStartups() 注册自定义启动屏;配错名字会在控制台报 Startup screen "xxx" does not exist 并白屏,排障时先查该值。

3.4 行为开关

键默认值说明
warnOnExittrue关页面时弹「确认离开」提示
quitMessage"Page closed"页面关闭时向 ircd 发送的 QUIT 理由
autoReconnectfalse断线自动重连
disconnectOnSaslFailtrueSASL 认证失败即断开
noticeActiveBuffertrue提及通知只针对当前正在看的缓冲区发桌面通知
changeNickOnCollisiontrue昵称冲突时自动改名
showRawfalse是否显示原始协议调试面板
showAutocompletetrue输入框自动补全(命令/频道/昵称)
autocompleteTokens["/", "#", "@"]触发自动补全的前缀字符
showEmojiPicker / showColorPicker / showSendButtontrue / false / false输入区表情面板、颜色面板、独立发送按钮
sidebarDefault"nicklist"侧栏默认页(nicklist/关于/设置等)
highlights""额外高亮关键词(正则)
teamHighlightsfalse团队高亮(配合 team 模板)
skipHiddenMessages / hideSettings / allowRegisterProtocolHandlerfalse / 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 服务器地址,连接页预填
port66678143WebSocket 入口端口——direct 模式下是 nginx 入口而非 ircd 端口
tlsfalsefalse是否走 wss/https
directfalsetruetrue 为直连模式(浏览器 WebSocket 经反代直达 ircd);false 为网关模式(走 kiwiServer)
direct_path(无默认,直连时可省)"/ircws/"直连模式的 WebSocket 路径,对应 nginx 反代段
channel"""#kiwitest"连接后自动加入的频道
nick"kiwi_?""guest_?"昵称模板,? 替换为 0–99 随机数(见 2.4)
state_key"kiwi-state"—localStorage 键名(连接状态持久化)
remember_bufferstrue—重连后恢复缓冲区
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_timestampstrue显示时间戳

通知与提醒

键默认值说明
alert_on"highlight"提醒时机:message(所有消息)/ highlight(仅提及我)/ never(BufferSettings.vue 三选项实查);响铃判定见 AudioManager.js:提及且为 highlight、或为 message 时触发
mute_soundfalse静音提示音
flash_title"message"标题栏闪烁:message/highlight/off
hide_message_countsfalse隐藏未读计数
traffic_as_activityfalsejoin/part 等流量消息是否算未读活动
server_as_activitytrue服务器消息是否算活动

消息可见性

键默认值说明
show_joinparts / show_nick_changes / show_mode_changes / show_presence_changes全 true入退频道/改昵称/模式变更/在线状态变更消息
show_topics / show_topic_in_headertrue / false频道话题展示位置
show_hostnamesfalse消息里显示用户主机名
show_realnamesfalse显示真实姓名
show_message_infotrue消息悬停信息
show_emoticonstrue表情符号渲染为图片
extra_formattingtrue额外格式(代码块等)
coloured_nicklist / colour_nicknames_in_messagestrue / true昵着色
nicklist_avatarsfalse昵称列表头像
show_link_previews / inline_link_auto_previews / inline_link_auto_previews_query / inline_link_auto_preview_whitelisttrue / true / true / ".*"链接预览行为与白名单
show_buffer_groupstrue缓冲区分组显示

行为细节

键默认值说明
scrollback_size250回滚缓冲条数
block_pmsfalse拒收私聊
shared_inputfalse多缓冲区共享输入框
share_typingtrue输入中状态广播
who_looptrueWHO 轮询
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 身份)
BNCbnc.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_pathtrue + "/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 端口。

十、参考链接与站内文档

站内相关文档: