@sunjuntao/dsh-qqbot 0.1.14 → 0.1.15

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/lib/client.js CHANGED
@@ -6418,7 +6418,7 @@ function QqbotSettingsTab({ rpcCall }) {
6418
6418
  "div",
6419
6419
  { className: "qbot-brandHeading" },
6420
6420
  h("strong", { className: "qbot-brandName" }, t("app.title")),
6421
- h("span", { className: "qbot-brandVersion" }, `v${true ? "0.1.14" : "0.0.2"}`),
6421
+ h("span", { className: "qbot-brandVersion" }, `v${true ? "0.1.15" : "0.0.2"}`),
6422
6422
  h("button", {
6423
6423
  className: `qbot-btn qbot-updateBtn${update.done ? " is-done" : ""}`,
6424
6424
  type: "button",
package/lib/index.js CHANGED
@@ -4626,16 +4626,27 @@ function createBotState() {
4626
4626
  }
4627
4627
  var INCOMING_FINGERPRINT_WINDOW_MS = 15e3;
4628
4628
  var INCOMING_FINGERPRINT_CAP = 512;
4629
+ var lastFingerprintSweep = 0;
4630
+ var INCOMING_FINGERPRINT_SWEEP_MS = 6e4;
4631
+ function sweepIncomingFingerprints(state, now) {
4632
+ if (now - lastFingerprintSweep < INCOMING_FINGERPRINT_SWEEP_MS && state.incomingFingerprints.size <= INCOMING_FINGERPRINT_CAP) {
4633
+ return;
4634
+ }
4635
+ lastFingerprintSweep = now;
4636
+ for (const [k, at] of state.incomingFingerprints) {
4637
+ if (now - at > INCOMING_FINGERPRINT_WINDOW_MS) state.incomingFingerprints.delete(k);
4638
+ }
4639
+ }
4629
4640
  function markIncoming(state, group, sender, content, now = Date.now()) {
4630
4641
  const key = `${group}:${sender}:${content.replace(/\s+/g, "").slice(0, 120)}`;
4631
4642
  if (!group || !content) return true;
4632
- if (state.incomingFingerprints.has(key)) return false;
4633
- state.incomingFingerprints.set(key, now);
4634
- if (state.incomingFingerprints.size > INCOMING_FINGERPRINT_CAP) {
4635
- for (const [k, at] of state.incomingFingerprints) {
4636
- if (now - at > INCOMING_FINGERPRINT_WINDOW_MS) state.incomingFingerprints.delete(k);
4637
- }
4643
+ const seenAt = state.incomingFingerprints.get(key);
4644
+ if (seenAt !== void 0) {
4645
+ if (now - seenAt <= INCOMING_FINGERPRINT_WINDOW_MS) return false;
4646
+ state.incomingFingerprints.delete(key);
4638
4647
  }
4648
+ state.incomingFingerprints.set(key, now);
4649
+ sweepIncomingFingerprints(state, now);
4639
4650
  return true;
4640
4651
  }
4641
4652
  var SEEN_EVENT_CAP = 512;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunjuntao/dsh-qqbot",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "把 QQ 官方机器人(Webhook 回调)接入本机 DeepSeek Harness:QQ 群/单聊消息(含群全量消息上下文)→ DSH 会话 → 回复发回 QQ,支持被动回复与群主动消息。Connect the official QQ bot (webhook callback) to a local DeepSeek Harness.",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",