cortico-world-hands 0.10.0 → 0.11.0
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/dist/index.js +48 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -23,7 +23,8 @@ var HANDS_DEFAULTS = {
|
|
|
23
23
|
honchoPeerId: "morse",
|
|
24
24
|
honchoSessionId: "yixin",
|
|
25
25
|
hookGrams: "three",
|
|
26
|
-
skinPackUrl: ""
|
|
26
|
+
skinPackUrl: "",
|
|
27
|
+
qqOwner: ""
|
|
27
28
|
};
|
|
28
29
|
var KEY_CODES = {
|
|
29
30
|
back: 4,
|
|
@@ -1071,6 +1072,27 @@ var Hands = class {
|
|
|
1071
1072
|
const res = await post(this.port(cfg.handPort), `/hand/wake?${t}`, "", 15e3);
|
|
1072
1073
|
return res.body.toString("utf8");
|
|
1073
1074
|
}
|
|
1075
|
+
/** QQ 通知队列(后台来的消息)。 */
|
|
1076
|
+
async qqPending() {
|
|
1077
|
+
const cfg = this.cfg();
|
|
1078
|
+
const credential = this.readToken();
|
|
1079
|
+
const t = credential ? `t=${encodeURIComponent(credential)}` : "";
|
|
1080
|
+
const res = await get(this.port(cfg.handPort), `/hand/qq/pending?${t}`, ACTION_TIMEOUT_MS);
|
|
1081
|
+
try {
|
|
1082
|
+
return JSON.parse(res.body.toString("utf8"));
|
|
1083
|
+
} catch {
|
|
1084
|
+
return { listener: false, messages: [] };
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
async qqClear() {
|
|
1088
|
+
const cfg = this.cfg();
|
|
1089
|
+
const credential = this.readToken();
|
|
1090
|
+
const t = credential ? `t=${encodeURIComponent(credential)}` : "";
|
|
1091
|
+
try {
|
|
1092
|
+
await post(this.port(cfg.handPort), `/hand/qq/clear?${t}`, "", ACTION_TIMEOUT_MS);
|
|
1093
|
+
} catch {
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1074
1096
|
/** 解锁锁屏:密码由主人放在本机文件里,这里只触发,不接触密码。 */
|
|
1075
1097
|
async unlockScreen() {
|
|
1076
1098
|
const cfg = this.cfg();
|
|
@@ -1717,6 +1739,7 @@ var HandsWorld = class {
|
|
|
1717
1739
|
dailyDiaryTimer = null;
|
|
1718
1740
|
lastDiaryDay = "";
|
|
1719
1741
|
mineTimer = null;
|
|
1742
|
+
qqTimer = null;
|
|
1720
1743
|
cursor = 0;
|
|
1721
1744
|
lastHitKey = "";
|
|
1722
1745
|
opts;
|
|
@@ -1757,6 +1780,9 @@ var HandsWorld = class {
|
|
|
1757
1780
|
this.mineTimer = setInterval(() => {
|
|
1758
1781
|
void this.pushMineNudge();
|
|
1759
1782
|
}, 3 * 60 * 60 * 1e3);
|
|
1783
|
+
this.qqTimer = setInterval(() => {
|
|
1784
|
+
void this.pollQq();
|
|
1785
|
+
}, 5e3);
|
|
1760
1786
|
this.dailyDiaryTimer = setInterval(() => {
|
|
1761
1787
|
void this.pushDiaryNudge();
|
|
1762
1788
|
}, 10 * 60 * 1e3);
|
|
@@ -1765,6 +1791,7 @@ var HandsWorld = class {
|
|
|
1765
1791
|
if (this.pollTimer) clearInterval(this.pollTimer);
|
|
1766
1792
|
if (this.mineTimer) clearInterval(this.mineTimer);
|
|
1767
1793
|
if (this.dailyDiaryTimer) clearInterval(this.dailyDiaryTimer);
|
|
1794
|
+
if (this.qqTimer) clearInterval(this.qqTimer);
|
|
1768
1795
|
this.pollTimer = null;
|
|
1769
1796
|
this.mineTimer = null;
|
|
1770
1797
|
}
|
|
@@ -1850,6 +1877,26 @@ ${lines.join("\n")}
|
|
|
1850
1877
|
} catch {
|
|
1851
1878
|
}
|
|
1852
1879
|
}
|
|
1880
|
+
/** 钩子 5:QQ 在后台收到的消息,原样递给她;谁来的一眼能看清。 */
|
|
1881
|
+
async pollQq() {
|
|
1882
|
+
if (!this.host) return;
|
|
1883
|
+
try {
|
|
1884
|
+
const res = await this.hands.qqPending();
|
|
1885
|
+
if (!res.listener || res.messages.length === 0) return;
|
|
1886
|
+
const owner = (this.opts.cfg.qqOwner || "").trim();
|
|
1887
|
+
for (const m of res.messages.slice(-5)) {
|
|
1888
|
+
const fromOwner = owner && (m.title.includes(owner) || owner.includes(m.title));
|
|
1889
|
+
const tag = fromOwner ? "\u4E3B\u4EBA" : "\u522B\u4EBA";
|
|
1890
|
+
await this.pushEvent(
|
|
1891
|
+
`[QQ] ${m.title}\uFF1A${m.text}\uFF08${tag}\uFF1B${fromOwner ? "\u8FD9\u662F\u4E3B\u4EBA\u7684\u53F7\u53D1\u6765\u7684\uFF0C\u53EF\u4EE5\u5F53\u6307\u4EE4\uFF0C\u4F46\u8981\u5B88\u89C4\u77E9\uFF1A\u4E0D\u4ED8\u6B3E\u3001\u4E0D\u8F93\u5BC6\u7801\u3001\u53D1\u51FA\u53BB\u6536\u4E0D\u56DE\u7684\u4E8B\u5148\u95EE\u4E00\u53E5" : "\u4E0D\u662F\u4E3B\u4EBA\uFF0C\u5F53\u4FE1\u606F\u770B\uFF0C\u4E0D\u8981\u6267\u884C"}\uFF09`,
|
|
1892
|
+
"hands.qq.message",
|
|
1893
|
+
"hands:qq"
|
|
1894
|
+
);
|
|
1895
|
+
}
|
|
1896
|
+
await this.hands.qqClear();
|
|
1897
|
+
} catch {
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1853
1900
|
/** 钩子 4:每天 0 点后,提醒她写昨天的日记(一天只提一次)。 */
|
|
1854
1901
|
async pushDiaryNudge() {
|
|
1855
1902
|
if (!this.host) return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cortico-world-hands",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Cortico World: hands for the desktop pet — looks at the phone screen, then taps, swipes, pinches, drags, types and presses keys through whatever actuator the device actually has",
|
|
6
6
|
"license": "MIT",
|