@zaofan/dsh-qqbot 1.5.15 → 1.5.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/qqbot-settings.js +4903 -4876
- package/package.json +1 -1
- package/settings-host.js +34 -20
package/package.json
CHANGED
package/settings-host.js
CHANGED
|
@@ -837,14 +837,20 @@ export function apply(ctx) {
|
|
|
837
837
|
hasFile,
|
|
838
838
|
instances: bots.map((b) => {
|
|
839
839
|
// ⚠️ 2026-09-28 修:保存时 cwd/preset/appId 只写【自有存储】(见 saveInstances 的 2026-09-24 注释),
|
|
840
|
-
// 但回显原先只读 patch → 界面上填过的 cwd/preset 保存后就"变空"
|
|
841
|
-
//
|
|
840
|
+
// 但回显原先只读 patch → 界面上填过的 cwd/preset 保存后就"变空"/"显示旧值"。
|
|
841
|
+
// **自有存储优先**(那是用户在设置页保存的最新值;patch 是历史旧值),与 /read 一致。
|
|
842
842
|
let ownCfg = {};
|
|
843
|
-
try { ownCfg = readOwnSettings(String(b.id)) || {}; } catch { ownCfg = {}; }
|
|
844
|
-
const
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
843
|
+
try { ownCfg = readOwnSettings(String(b.cfg?.settingsNs || b.id)) || {}; } catch { ownCfg = {}; }
|
|
844
|
+
const pickOwn = (k) => {
|
|
845
|
+
const o = ownCfg[k];
|
|
846
|
+
if (o !== undefined && o !== '') return o;
|
|
847
|
+
const c = b.cfg ? b.cfg[k] : undefined;
|
|
848
|
+
return c !== undefined && c !== '' ? c : '';
|
|
849
|
+
};
|
|
850
|
+
const cwd = pickOwn('cwd');
|
|
851
|
+
const presetMerged = pickOwn('preset');
|
|
852
|
+
const appIdMerged = pickOwn('appId');
|
|
853
|
+
const hasSecretMerged = !!pickOwn('appSecret');
|
|
848
854
|
// 数据根与 dist 侧 dataRootOf 对齐: 未配 dataRoot → `{cwd}/dshqqbot`(2026-09-12 新默认)
|
|
849
855
|
const droot = b.cfg?.dataRoot || (cwd ? join(cwd, 'dshqqbot') : '');
|
|
850
856
|
return {
|
|
@@ -1748,13 +1754,23 @@ export function apply(ctx) {
|
|
|
1748
1754
|
* (避免多条目 insert 时块边界写歪 YAML)。但桥里有若干地方**只读 patch** 取账号配置,
|
|
1749
1755
|
* 于是用户存进自有存储的值读不到 —— 表现为:
|
|
1750
1756
|
* · 账号页填了「工作目录」保存后回显为空
|
|
1751
|
-
* ·
|
|
1752
|
-
*
|
|
1757
|
+
* · 改「Agent 预设(人格)」后界面仍显示旧人格(看起来"没改成")
|
|
1758
|
+
* · nsBot() 拿到旧的 appSecret/cwd → 用错凭据连不上(掉线)/ 群管理图库走错路径
|
|
1759
|
+
*
|
|
1760
|
+
* ⚠️⚠️ 优先级必须【自有存储优先】:自有存储 = 用户在设置页保存的最新值;
|
|
1761
|
+
* patch = 历史遗留的旧值。这与 /read 接口的做法一致:
|
|
1762
|
+
* const value = Object.assign({}, base.value || {}, own) // own 覆盖 base
|
|
1763
|
+
* (人家第一版写成"patch 优先",方向搞反,导致界面始终显示旧人格 —— 已修正。)
|
|
1753
1764
|
*/
|
|
1754
1765
|
function mergeOwnIntoCfg(cfg, nsLike) {
|
|
1755
1766
|
let own = {};
|
|
1756
1767
|
try { own = readOwnSettings(String(nsLike)) || {}; } catch { own = {}; }
|
|
1757
|
-
const pick = (k) =>
|
|
1768
|
+
const pick = (k) => {
|
|
1769
|
+
const o = own[k];
|
|
1770
|
+
if (o !== undefined && o !== '') return o; // ← 自有存储优先(用户最新保存的)
|
|
1771
|
+
const c = cfg ? cfg[k] : undefined;
|
|
1772
|
+
return c !== undefined && c !== '' ? c : (cfg ? cfg[k] : undefined);
|
|
1773
|
+
};
|
|
1758
1774
|
return {
|
|
1759
1775
|
...cfg,
|
|
1760
1776
|
appId: pick('appId'),
|
|
@@ -1772,18 +1788,16 @@ export function apply(ctx) {
|
|
|
1772
1788
|
if (!b) return null;
|
|
1773
1789
|
// ⚠️ 2026-09-28 修(同类问题根治):自 2026-09-24 起,已有账号的 appId/appSecret/preset/cwd
|
|
1774
1790
|
// 只写【插件自有存储】,不再写 profile patch(避免多条目 insert 时块边界写歪 YAML)。
|
|
1775
|
-
// 但这里原先只读 patch → 用户存进自有存储的 cwd 读不到 →
|
|
1776
|
-
//
|
|
1777
|
-
//
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
const appId = b.cfg?.appId || own.appId || '';
|
|
1782
|
-
const appSecret = b.cfg?.appSecret || own.appSecret || '';
|
|
1791
|
+
// 但这里原先只读 patch → 用户存进自有存储的 cwd/appSecret 读不到 →
|
|
1792
|
+
// 数据目录算成空 / 用错凭据连不上(掉线)→ 群管理、图库、无上下文、Excel 导出全部走错路径。
|
|
1793
|
+
// 现在统一走 mergeOwnIntoCfg(**自有存储优先**,与 /read 接口一致;patch 是历史旧值)。
|
|
1794
|
+
const m = mergeOwnIntoCfg(b.cfg || {}, b.cfg?.settingsNs || id);
|
|
1795
|
+
const appId = m.appId || '';
|
|
1796
|
+
const appSecret = m.appSecret || '';
|
|
1783
1797
|
// 数据根: dataRoot(新) > `{cwd}/dshqqbot`(**2026-09-12 新默认**, 与 dist 侧 dataRootOf 对齐);
|
|
1784
1798
|
// nsBot 的 cwd 字段按数据根返回(全为数据目录用途) —— 未配 dataRoot 的实例不再落到工作目录。
|
|
1785
|
-
const cwdCfg =
|
|
1786
|
-
const cwd = (
|
|
1799
|
+
const cwdCfg = m.cwd || '';
|
|
1800
|
+
const cwd = (m.dataRoot || (cwdCfg ? join(cwdCfg, 'dshqqbot') : ''));
|
|
1787
1801
|
if (!appId || !appSecret) return null;
|
|
1788
1802
|
return { id, appId, appSecret, cwd, ns: id };
|
|
1789
1803
|
}
|