数据迁移
从旧版 Dice!(V2)迁移可转换的数据到 Dice!Next。迁移器会保留旧目录,且不会复制登录凭据或 WebUI 密码。
当前范围
这不是“把旧数据目录原样搬进新版”的功能。旧版与 Dice!Next 的存储结构、团务模型和插件运行环境并不相同;导入完成后,请保留旧目录并在测试群核对人物卡、团务、日志与插件。
已支持的迁移范围
导入器直接解析旧版 Dice! 数据目录的原始文件(含二进制 .dat / .RDconf 格式),转换写入 Dice!Next:
| 旧版数据 | 文件 | 迁移到 |
|---|---|---|
| 人物卡 | user/PlayerCards.RDconf | 人物卡库(数值/文本属性、锁定状态、旧骰式元数据、卡类型及群内选卡绑定) |
| 用户数据 | user/UserConf.dat | 玩家档案(昵称 / 信任等级 / 好感)及 Lua 兼容用户配置;群内昵称单独保留 |
| 群配置 | user/ChatConf.dat | 群设置:停用指令 → 群停用、rc 房规 → COC 房规、入群欢迎词;其余标量项保留为 Lua 兼容群配置,旧缓存群名另存为兼容信息 |
| 黑名单 | conf/BlackList.json | 黑白名单 |
| 自定义回复 | conf/CustomMsgReply.json | 关键词回复(多结果随机 / 文本) |
| 自定义文案 | conf/CustomMsg.json | 回复文案覆盖(写入简体中文层) |
| 自定义帮助 | conf/CustomHelp.json | .help 词条覆盖(写入简体中文层) |
| 骰主 | conf/Console.xml | Master 列表 |
| 外置牌堆 | PublicDeck/*.json | data/decks/(导入前做 JSON 格式校验) |
| Lua 模组 | mod/ | data/mod/(整棵复制,由 Lua 模组子系统识别) |
| Lua 插件 | plugin/ | data/plugin/(单文件和目录型插件单独复制) |
| 跨群链接 | conf/LinkList.json | 新版 .link 消息转发:迁入普通 QQ 群之间的 with/to/from 链接及暂停状态 |
| 通知窗口 | conf/NoticeList.json | 新版通知中心:迁入 QQ 私聊/群聊目标及原有通知级别掩码 |
| 自定义敏感词 | conf/CustomCensor.json | 系统设置中的敏感词拦截:保留 Ignore–Critical 数字等级;有规则时自动启用 |
| 团务会话 | user/session/*.json | 新版 .game 团务:生成新的 16 位团号,迁入群范围、GM/玩家、团务变量与轮盘状态 |
| 跑团日志 | user/log/*.txt 与 session 内日志状态 | 新版日志库:迁入文本记录,恢复进行中 / 暂停 / 已结束状态 |
说明
- 自定义文案 / 帮助只写入简体中文层,其他语言保留 Dice!Next 自带文案。
- 旧版文案键(
strXXX)中在新版有已核对的对应槽位、且运行时参数兼容的会自动映射;例如骰点、成功等级、牌堆、团务、旁观、欢迎词等。没有对应槽位或参数不兼容的不会丢——会以「无效文本」形式保留,可在管理面板中查看后手工移植。 - 用户与群的标量自定义配置会保留到 Lua 兼容配置空间;这不表示每个旧版内置功能在新版都具有同一行为,但旧 Lua 规则可继续读取这些值。
PublicDeck/下非.json文件会被跳过(记入报告的「跳过」项)。
迁移限制与尚未自动迁移的数据
下列内容已经列入迁移改进计划。在对应版本发布前,导入器会保留旧目录中的原文件,不会擅自删除:
| 旧版位置 / 数据 | 当前处理 | 原因与后续方向 |
|---|---|---|
user/GameTable.toml | 不单独迁移 | 它只保存旧版自增序号;新版团号使用不可预测的随机编码,因此不能沿用。 |
conf/LinkList.json 中的私聊、讨论组、频道链接 | 不迁移 | 新版 .link 仅支持普通群之间的转发;可安全对应的 QQ 群链接已自动迁入。 |
| 旧会话内的观察者、牌堆、自定义嵌套对象 | 部分保留 | 观察者和复杂对象会作为兼容元数据保存;新版没有直接等价界面/指令的部分不会伪装为已生效。 |
| 插件自建目录、任意自定义文件 | 尚未迁移 | plugin/ 本体会复制;插件运行时自行写入的任意位置无法安全推断用途。 |
CustomReply.json、CustomRegexReply.json | 已支持 | 在较新的 CustomMsgReply.json 缺失或为空时,转换为新版关键词/正则回复规则。 |
| 邀请人、活动时间、许可/免黑/忽略等群状态 | 尚未迁移 | 仅能迁移在新版有明确且安全对应项的设置。旧缓存群名会以兼容信息保留,不会直接覆盖当前适配器读取到的群名。 |
| 黑名单的群条目、外部/云黑记录与历史元数据 | 尚未迁移 | 当前只导入本地用户 ban / kick 记录;外部来源不应自动变成新版本地封禁。 |
conf/console.yaml 的运行参数、任务、通知、Git/WebUI 凭据 | 不迁移 | 这些内容要么没有等价功能,要么属于安全敏感配置,必须由骰主在新版重新配置。 |
conf/censor/ 外置词库、selfdata/、CardTemp/、每日统计 | 尚未迁移 | CustomCensor.json 已迁移;外置词库可能包含第三方大规模词表与编码声明,当前不自动注入,避免未经骰主确认就启用。 |
自定义文案与帮助
旧版 Dice! 的自定义文案和帮助以简体中文为主,因此导入器只写入 zh-Hans 是预期行为;繁体中文和英文继续使用 Dice!Next 内建文本。
- 有新版一对一槽位的
strXXX文案会接入对应模板;已设置的新等级回复、原生指令模板仍按现有优先级使用。 - 迁入时会把已核对的旧占位符(如
{pc}、{deck_name}、{game.log_name})转换为新版占位符。新版已不再提供必要参数的旧模板(例如旧.log off/end的日志名、文件名模板)不会强行迁入。 - 没有等价槽位或无法安全转换占位符的文案会保存在管理面板的「无效文本」中,不会丢失也不会冒充已经生效。
- 每次扩充新版文案槽位时,会重新核对这批无效文本;能找到明确语义对应的键会加入映射,无法保证语义等价的仍保留给骰主手工处理。
新增的按检定结果分级回复默认继承原有文案,不会自动写入覆盖、清除已迁入文本或要求重新导入。已兼容的完整模板和成功等级短语继续生效;只有主动配置新等级回复时,才按新的继承链选择完整回复。
以下检定文案缺口已补齐,无需把旧短句改写成新等级的完整回复:
| 旧文案 | 新版兼容处理 |
|---|---|
strRollCriticalSuccess/strRollExtremeSuccess/strRollHardSuccess/strRollRegularSuccess/strRollFailure/strRollFumble | 单轮检定的六个独立等级短句,不混同多轮短句 |
strCriticalSuccess/strExtremeSuccess/strHardSuccess/strSuccess/strFailure/strFumble | 继续作为多轮检定和 SAN 的等级短句 |
strRollSkill/strRollSkillReason | 检定前缀;连续多轮只加一次前缀 |
strRollSkillHidden | 暗检定群回执,不泄露私聊详细结果 |
strSanityRoll | 保留 SAN 完整模板及 rank/loss/change/final 的旧变量含义 |
strEnRoll/strEnRollNotChange/strEnRollFailure/strEnRollSuccess | 成长基础文本、未变化、失败变化、成功变化分别保留,引用随基础文本修改而更新 |
strEnDefaultName | 默认成长技能名称 |
支持嵌套 sample、case、grade,以及已映射旧文本的引用(如 {strEnRoll});不会执行 JavaScript、Python、等待等可执行宏。条件字段或变量无法对应时,报告标为「部分兼容」;不支持的宏、语法不完整和循环自引用保留原文,等待人工迁移。这不是旧版全部模板宏的全覆盖声明。
新导入的上述兼容文本会保留 legacy.strXXX 原稿,不覆盖已有且内容不同的目标。管理面板「备份与导入」可查看、下载逐项报告,区分已接入、部分兼容、仅保留、冲突跳过。「已接入」表示成功映射到文本槽,不表示替换了优先级更高的新回复。
已有数据库会在升级后的首次启动自动补回能安全对应的历史孤立槽位,并修正早期 dice.crit/dice.fumble 的单轮短句映射。全局与人格均保留原记录,不覆盖已有目标(包括主动设为空的目标)。修复记录持久保存;恢复默认后,下一次启动不会把已清除的旧文案重新补回。没有可靠旧原稿的缺口仍需重新导入,修复记录不是当前配置的实时审计。
旧版指令兼容边界
Dice!Next 直接复用新版存储、权限与插件管理实现旧写法,不运行一套平行的旧内核。当前已核对的迁移重点如下:
| 原版写法 | Dice!Next 行为 |
|---|---|
.h / .H、.rh、.rs | 短暗骰别名与仅最终值输出均保留;.help 不会被 .h 抢占 |
.coc/.coc7、.coc6、.cocd/.coc7d/.coc6d | 分别生成 7 版、6 版及详细制卡结果;接受旧排版标记 s |
.help on/off、.jrrp on/off、.reply on/off | 按群持久保存,沿用群管理 / 信任权限 |
.drawh | 私聊发送抽牌结果,群里只留暗抽回执 |
.pc nn/stat/cpy/copy/grp/tojson/type/temp | 接到统一人物卡与规则系统;复制顺序为 目标卡=来源卡 |
.rule set <书>、.ruleset clear | 接到统一规则书设置;设置和清除都校验群管理权限 |
.mod list/on/off/info | 接到统一插件清单与分群启停;更新、重载、删除、重装仅在 WebUI 确认 |
.user state/trust/tojson/diss | 接到统一玩家档案、权限和名单;diss 不删除档案或卡片 |
.strXXX <文本/show/reset/NULL> | 仅已审计的一对一文案键写入统一覆盖表;未知 str… 不会被吞掉 |
.cloud update/black | 不复刻。旧版这两条只报告状态并把人指向网页;版本号看不带参数的 .bot,云黑开关在网页「系统设置」。.cloud 现为账号中心授权与云人物卡入口 |
刻意不复刻
.system cmd:旧版远程 Shell,风险等同远程代码执行。.user kill/clr:聊天中不可逆删除玩家或卡片;请在 Web 管理面板二次确认。.mod update/reload/del/reinstall:聊天中不替换或删除插件文件。
JS 插件的兼容来源是 SealDice(海豹)sealdice-core,不是旧 Dice! JS;具体钩子、字段和限制见 JS 插件 API 参考。
迁移步骤(管理面板)
- 把旧版 Dice! 的数据目录(内含
conf/与user/的那一层)放到运行 Dice!Next 的这台机器上。 - 打开管理面板 → 系统设置 → 备份恢复 → 导入旧版数据。
- 填写该数据目录的完整路径。牌堆 / 模组文件默认跳过已存在的,如需覆盖可打开「覆盖已存在的文件」开关。
- 点「开始导入」,等待完成。
对应的 REST 接口为 POST /api/legacy/import,参数 { "dir": "路径", "overwrite": false }。
迁移报告
回复引用规范化
导入器先导入牌堆、帮助与全局文案,再根据实际可用资源处理回复及冷却 / 日限提示语中的引用。无歧义引用会自动转换:
{牌堆}/{%牌堆}→{deck:牌堆}/{deck:%牌堆},保留当前回复内不放回 / 放回规则,并只引用文件牌堆。- 帮助词条 →
{help:词条};旧全局文案 →{text:文案名}。 {nick}等上下文变量及已有显式前缀保持不变,转义内容不改写;嵌套sample:的所有分支均会处理。不会在导入时实际抽牌或投骰。
变量与资源同名、同时匹配多个类型、未找到资源时,保留原文并报告原因。仅仍有待确认引用的旧回复保留裸牌堆查找兼容;新回复使用显式前缀,避免新增牌堆后意外覆盖原有表达式或帮助引用。
疑似骰子算式也列入待确认项:旧裸表达式求值失败会保留原文,而显式 roll: 失败会显示 ?,不能仅根据字符形式自动替换。确认含义后可手工添加 roll:。
导入结果中的 replyReferences 包含转换数、歧义数、未找到数及每处引用的规则、位置、原文、目标和原因。网页可展开明细或下载 JSON 报告。请保留报告,按实际用途修正待确认项。
已经导入过的规则可重新导入原数据:完整定义相同的规则原位升级,不重复新增,保留骰主调整的启停状态与优先级;后续补齐资源后,再次导入也会尝试规范化仍待确认的旧引用。
导入完成后返回各项数量,包括:
- 人物卡数(及涉及的用户数)、玩家档案、黑名单、自定义回复、帮助、文案(另计「无效文本」条数)、Master 数
- 牌堆、模组与插件的成功 / 失败 / 跳过明细(逐文件列出原因)
- 群配置:导入的设置项数与涉及群数;跨群链接、通知窗口、敏感词规则、团务会话、日志和日志消息数量
页面上会直接展示牌堆 / 模组 / 插件的逐项结果卡片,以及团务和日志的汇总数量。