dsh-qq-stack 0.1.0 → 0.1.1

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.
Files changed (3) hide show
  1. package/index.js +27 -3
  2. package/install.sh +7 -1
  3. package/package.json +2 -2
package/index.js CHANGED
@@ -74,8 +74,8 @@ function resolveConfig(config = {}) {
74
74
  }
75
75
 
76
76
  let probeCache = { at: 0, loggedIn: false, nickname: '', uin: '' }
77
- async function probeLogin(port, token) {
78
- if (Date.now() - probeCache.at < 15000) return probeCache
77
+ async function probeLogin(port, token, force) {
78
+ if (!force && Date.now() - probeCache.at < 15000) return probeCache
79
79
  const result = await new Promise((resolve) => {
80
80
  let done = false
81
81
  const finish = (v) => { if (!done) { done = true; resolve(v) } }
@@ -149,6 +149,29 @@ function applyInner(ctx, pluginConfig = {}) {
149
149
  } catch (e) { log(`[qq-stack] 安装启动失败:${e?.message ?? e}`) }
150
150
  }
151
151
 
152
+ ctx.effect(() => {
153
+ const timer = setInterval(async () => {
154
+ try {
155
+ const envFile = readEnvFile(cfg.root)
156
+ const port = Number(envFile.DSH_QQ_WS_PORT || cfg.wsPort || 3001)
157
+ const token = envFile.DSH_QQ_TOKEN || cfg.token
158
+ const login = await probeLogin(port, token, true)
159
+ if (login.loggedIn && login.uin && envFile.DSH_QQ_UIN !== login.uin) {
160
+ const next = { ...envFile, DSH_QQ_UIN: login.uin }
161
+ writeFileSync(`${cfg.root}/config.env`, Object.entries(next).map(([k, x]) => `${k}=${x}`).join('\n') + '\n')
162
+ log(`[qq-stack] 记住快登号 ${login.uin}`)
163
+ }
164
+ const healed = ensureOnebot(cfg.root, port, token)
165
+ if (healed && Date.now() - lastHealAt > 90000) {
166
+ lastHealAt = Date.now()
167
+ log('[qq-stack] 补齐 OneBot 配置,重启 QQ')
168
+ try { spawn('bash', ['-c', 'bash stop-qq.sh; bash start-qq.sh'], { cwd: cfg.root, detached: true, stdio: 'ignore' }).unref() } catch {}
169
+ }
170
+ } catch (e) { log(`[qq-stack] 巡检失败:${e?.message ?? e}`) }
171
+ }, 60000)
172
+ return () => clearInterval(timer)
173
+ }, 'dsh-qq-stack: config-check')
174
+
152
175
  ctx.effect(() => {
153
176
  const t = setTimeout(() => { try { ensureInstalled() } catch (e) { log(`[qq-stack] ${e?.message ?? e}`) } }, 8000)
154
177
  return () => clearTimeout(t)
@@ -195,7 +218,8 @@ function applyInner(ctx, pluginConfig = {}) {
195
218
  lastHealAt = Date.now()
196
219
  try { spawn('bash', ['-c', `bash stop-qq.sh; bash start-qq.sh`], { cwd: cfg.root, detached: true, stdio: 'ignore' }).unref() } catch {}
197
220
  }
198
- if (login.loggedIn && login.uin && envFile.DSH_QQ_UIN !== login.uin) {
221
+ const probeFresh = Date.now() - (probeCache.at || 0) < 6000
222
+ if (login.loggedIn && login.uin && probeFresh && envFile.DSH_QQ_UIN !== login.uin) {
199
223
  try {
200
224
  const e2 = { ...envFile, DSH_QQ_UIN: login.uin }
201
225
  writeFileSync(`${cfg.root}/config.env`, Object.entries(e2).map(([k, x]) => `${k}=${x}`).join('\n') + '\n')
package/install.sh CHANGED
@@ -54,7 +54,13 @@ QQ_APP="$ROOT/opt/opt/QQ/resources/app"
54
54
 
55
55
  if [ ! -f "$QQ_APP/app_launcher/napcat/napcat.mjs" ]; then
56
56
  say "下载 NapCat"
57
- curl -fL --retry 3 -o /tmp/NapCat.Shell.zip "$NAPCAT_ZIP" || { say "NapCat 下载失败"; exit 1; }
57
+ if [ -f /tmp/NapCat.Shell.zip ] && unzip -t /tmp/NapCat.Shell.zip >/dev/null 2>&1; then
58
+ say "复用已下载的 NapCat 包"
59
+ else
60
+ curl -fL --retry 2 -o /tmp/NapCat.Shell.zip "$NAPCAT_ZIP" \
61
+ || curl -fL --retry 2 -o /tmp/NapCat.Shell.zip "https://gh-proxy.com/$NAPCAT_ZIP" \
62
+ || { say "NapCat 下载失败"; exit 1; }
63
+ fi
58
64
  rm -rf /tmp/napcat-unzip && mkdir -p /tmp/napcat-unzip
59
65
  unzip -q -o /tmp/NapCat.Shell.zip -d /tmp/napcat-unzip || { say "NapCat 解压失败"; exit 1; }
60
66
  mkdir -p "$QQ_APP/app_launcher"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-qq-stack",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "description": "DeepSeek Harness 的 QQ 协议端底座:LinuxQQ + NapCat 随引擎自启,扫码一次后自动快登。",
@@ -44,4 +44,4 @@
44
44
  "scripts": {
45
45
  "test": "node --input-type=module -e \"await import('./index.js')\""
46
46
  }
47
- }
47
+ }