@paperkite/plugin-messages-watch 0.1.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/README.md +57 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +233 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# @paperkite/plugin-messages-watch
|
|
2
|
+
|
|
3
|
+
会话消息监听插件,提供 `messages.watch` 与 `messages.poll` 两种触发器能力。两者都需要 `session`。
|
|
4
|
+
|
|
5
|
+
## 配置
|
|
6
|
+
|
|
7
|
+
| 键 | 说明 |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `chat` / `chats` | 监听的会话(用户名或 ID),两者至少其一 |
|
|
10
|
+
| `fromUsers` | 只看来自这些用户的消息 |
|
|
11
|
+
| `keywords` | 消息文本包含任一关键词即触发 |
|
|
12
|
+
| `match` / `matchFlags` | 正则匹配消息文本 |
|
|
13
|
+
| `incoming` / `outgoing` | 是否包含收到的消息 / 发出的消息 |
|
|
14
|
+
| `forwards` | 是否包含转发消息 |
|
|
15
|
+
| `intervalSeconds` | `messages.poll` 轮询间隔,默认 30 |
|
|
16
|
+
| `maxMessages` | `messages.poll` 每轮拉取条数,默认 100 |
|
|
17
|
+
| `afterMessageId` | `messages.poll` 从该消息之后开始拉取 |
|
|
18
|
+
|
|
19
|
+
## messages.watch
|
|
20
|
+
|
|
21
|
+
实时监听,消息到达即触发。
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
triggers:
|
|
25
|
+
- id: important-message
|
|
26
|
+
capability: messages.watch
|
|
27
|
+
session: primary
|
|
28
|
+
config:
|
|
29
|
+
chats: ["@example"]
|
|
30
|
+
keywords: ["提醒"]
|
|
31
|
+
actions:
|
|
32
|
+
- capability: notify.bark
|
|
33
|
+
config:
|
|
34
|
+
key: replace-with-your-bark-key
|
|
35
|
+
title: 新消息
|
|
36
|
+
body: "{{event.text}}"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## messages.poll
|
|
40
|
+
|
|
41
|
+
按间隔轮询拉取新消息。
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
triggers:
|
|
45
|
+
- id: poll-messages
|
|
46
|
+
capability: messages.poll
|
|
47
|
+
session: primary
|
|
48
|
+
config:
|
|
49
|
+
chats: ["@example"]
|
|
50
|
+
intervalSeconds: 60
|
|
51
|
+
actions:
|
|
52
|
+
- capability: notify.bark
|
|
53
|
+
config:
|
|
54
|
+
key: replace-with-your-bark-key
|
|
55
|
+
title: 新消息
|
|
56
|
+
body: "{{event.text}}"
|
|
57
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Trigger } from "@paperkite/sdk";
|
|
2
|
+
interface WatchConfig {
|
|
3
|
+
readonly chat?: string | number;
|
|
4
|
+
readonly chats?: readonly (string | number)[];
|
|
5
|
+
readonly fromUsers?: readonly (string | number)[];
|
|
6
|
+
readonly keywords?: readonly string[];
|
|
7
|
+
readonly match?: string;
|
|
8
|
+
readonly matchFlags?: string;
|
|
9
|
+
readonly incoming?: boolean;
|
|
10
|
+
readonly outgoing?: boolean;
|
|
11
|
+
readonly forwards?: boolean;
|
|
12
|
+
readonly intervalSeconds?: number;
|
|
13
|
+
readonly maxMessages?: number;
|
|
14
|
+
readonly afterMessageId?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class LiveConversationTrigger extends Trigger<WatchConfig> {
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
private handleEvent;
|
|
19
|
+
private contextError;
|
|
20
|
+
}
|
|
21
|
+
export declare class PollConversationTrigger extends Trigger<WatchConfig> {
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { NewMessage } from "telegram/events/index.js";
|
|
2
|
+
import { Trigger } from "@paperkite/sdk";
|
|
3
|
+
export class LiveConversationTrigger extends Trigger {
|
|
4
|
+
async run() {
|
|
5
|
+
const chats = listChats(this.config);
|
|
6
|
+
if (!this.sessions || !this.session)
|
|
7
|
+
throw new Error("live conversation watcher needs a session");
|
|
8
|
+
const matcher = makePattern(this.config);
|
|
9
|
+
const registrations = [];
|
|
10
|
+
try {
|
|
11
|
+
await this.sessions.run(async (rawClient) => {
|
|
12
|
+
const client = rawClient;
|
|
13
|
+
const builder = new NewMessage({
|
|
14
|
+
chats: chats,
|
|
15
|
+
fromUsers: this.config.fromUsers,
|
|
16
|
+
incoming: this.config.incoming,
|
|
17
|
+
outgoing: this.config.outgoing,
|
|
18
|
+
forwards: this.config.forwards,
|
|
19
|
+
pattern: matcher ? new RegExp(matcher.source, matcher.flags) : undefined
|
|
20
|
+
});
|
|
21
|
+
const handler = (input) => {
|
|
22
|
+
void this.handleEvent(input, matcher).catch((error) => this.contextError(error));
|
|
23
|
+
};
|
|
24
|
+
client.addEventHandler(handler, builder);
|
|
25
|
+
registrations.push({ client, handler, builder });
|
|
26
|
+
});
|
|
27
|
+
await waitForAbort(this.signal);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
for (const { client, handler, builder } of registrations)
|
|
31
|
+
client.removeEventHandler(handler, builder);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async handleEvent(input, matcher) {
|
|
35
|
+
const event = toTriggerEvent(getEventMessage(input));
|
|
36
|
+
if (matches(event, this.config, matcher))
|
|
37
|
+
await this.emit(event);
|
|
38
|
+
}
|
|
39
|
+
contextError(error) {
|
|
40
|
+
this.context.logger.error("live conversation watcher failed", error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class PollConversationTrigger extends Trigger {
|
|
44
|
+
async run() {
|
|
45
|
+
const chats = listChats(this.config);
|
|
46
|
+
if (!this.sessions || !this.session)
|
|
47
|
+
throw new Error("poll conversation watcher needs a session");
|
|
48
|
+
const interval = normalizeSeconds(this.config.intervalSeconds, 30);
|
|
49
|
+
const limit = normalizeLimit(this.config.maxMessages);
|
|
50
|
+
const matcher = makePattern(this.config);
|
|
51
|
+
const cursors = new Map();
|
|
52
|
+
for (const chat of chats)
|
|
53
|
+
cursors.set(cursorKey(chat), this.config.afterMessageId ?? 0);
|
|
54
|
+
while (!this.signal.aborted) {
|
|
55
|
+
for (const chat of chats) {
|
|
56
|
+
if (this.signal.aborted)
|
|
57
|
+
break;
|
|
58
|
+
try {
|
|
59
|
+
await runUntilAborted(this.sessions.run(async (rawClient) => {
|
|
60
|
+
const client = rawClient;
|
|
61
|
+
const messages = await client.getMessages(chat, {
|
|
62
|
+
limit,
|
|
63
|
+
minId: cursors.get(cursorKey(chat)) ?? 0,
|
|
64
|
+
reverse: true
|
|
65
|
+
});
|
|
66
|
+
for (const raw of messages) {
|
|
67
|
+
const event = toTriggerEvent(raw);
|
|
68
|
+
if (event.id && event.id > (cursors.get(cursorKey(chat)) ?? 0)) {
|
|
69
|
+
cursors.set(cursorKey(chat), event.id);
|
|
70
|
+
}
|
|
71
|
+
if (matches(event, this.config, matcher))
|
|
72
|
+
await this.emit(event);
|
|
73
|
+
}
|
|
74
|
+
}), this.signal);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (this.signal.aborted)
|
|
78
|
+
break;
|
|
79
|
+
this.context.logger.warn("conversation polling failed", { chat, error });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
await waitForSeconds(interval, this.signal);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function listChats(config) {
|
|
87
|
+
const values = [...(config.chats ?? [])];
|
|
88
|
+
if (config.chat !== undefined)
|
|
89
|
+
values.unshift(config.chat);
|
|
90
|
+
const result = [...new Map(values.map((value) => [String(value), value])).values()];
|
|
91
|
+
if (!result.length)
|
|
92
|
+
throw new Error("conversation watcher needs chat or chats");
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function makePattern(config) {
|
|
96
|
+
if (!config.match)
|
|
97
|
+
return undefined;
|
|
98
|
+
try {
|
|
99
|
+
return new RegExp(config.match, config.matchFlags);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw new Error("invalid conversation match pattern: " + String(error));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function matches(event, config, matcher) {
|
|
106
|
+
const text = event.text;
|
|
107
|
+
if (config.keywords?.length) {
|
|
108
|
+
const keywords = config.keywords.map((value) => String(value)).filter(Boolean);
|
|
109
|
+
if (!keywords.some((keyword) => text.includes(keyword)))
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (matcher) {
|
|
113
|
+
matcher.lastIndex = 0;
|
|
114
|
+
if (!matcher.test(text))
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (config.fromUsers?.length &&
|
|
118
|
+
!config.fromUsers.some((value) => {
|
|
119
|
+
const expected = String(value).replace(/^@/, "").toLowerCase();
|
|
120
|
+
return expected === event.senderId?.toLowerCase() || expected === event.senderUsername?.toLowerCase();
|
|
121
|
+
})) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
function getEventMessage(input) {
|
|
127
|
+
return isRecord(input) && isRecord(input.message) ? input.message : input;
|
|
128
|
+
}
|
|
129
|
+
function toTriggerEvent(message) {
|
|
130
|
+
const value = isRecord(message) ? message : {};
|
|
131
|
+
const id = positiveNumber(value.id);
|
|
132
|
+
const sender = value.senderId ?? value.fromId;
|
|
133
|
+
const chat = value.chatId ?? value.peerId ?? value.chat;
|
|
134
|
+
const date = value.date instanceof Date ? value.date.toISOString() : toDate(value.date);
|
|
135
|
+
return {
|
|
136
|
+
id,
|
|
137
|
+
text: String(value.message ?? value.text ?? ""),
|
|
138
|
+
senderId: entityId(sender),
|
|
139
|
+
senderUsername: isRecord(value.sender) && value.sender.username ? String(value.sender.username) : undefined,
|
|
140
|
+
senderName: entityName(value.sender),
|
|
141
|
+
chatId: entityId(chat),
|
|
142
|
+
chatTitle: entityName(value.chat),
|
|
143
|
+
date,
|
|
144
|
+
raw: message
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function entityId(value) {
|
|
148
|
+
if (value === undefined || value === null)
|
|
149
|
+
return undefined;
|
|
150
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint")
|
|
151
|
+
return String(value);
|
|
152
|
+
if (isRecord(value)) {
|
|
153
|
+
for (const key of ["channelId", "chatId", "userId", "id"]) {
|
|
154
|
+
if (value[key] !== undefined)
|
|
155
|
+
return String(value[key]);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return String(value);
|
|
159
|
+
}
|
|
160
|
+
function entityName(value) {
|
|
161
|
+
if (!isRecord(value))
|
|
162
|
+
return undefined;
|
|
163
|
+
const parts = [value.firstName, value.lastName].filter(Boolean).map(String);
|
|
164
|
+
return parts.join(" ") || (value.title ? String(value.title) : value.username ? String(value.username) : undefined);
|
|
165
|
+
}
|
|
166
|
+
function positiveNumber(value) {
|
|
167
|
+
const number = Number(value);
|
|
168
|
+
return Number.isInteger(number) && number > 0 ? number : undefined;
|
|
169
|
+
}
|
|
170
|
+
function toDate(value) {
|
|
171
|
+
if (value === undefined || value === null)
|
|
172
|
+
return undefined;
|
|
173
|
+
const date = new Date(typeof value === "number" ? value * 1_000 : String(value));
|
|
174
|
+
return Number.isNaN(date.getTime()) ? undefined : date.toISOString();
|
|
175
|
+
}
|
|
176
|
+
function normalizeSeconds(value, fallback) {
|
|
177
|
+
const number = Number(value ?? fallback);
|
|
178
|
+
if (!Number.isFinite(number) || number <= 0)
|
|
179
|
+
return fallback;
|
|
180
|
+
return Math.min(86_400, number);
|
|
181
|
+
}
|
|
182
|
+
function normalizeLimit(value) {
|
|
183
|
+
const number = Number(value ?? 100);
|
|
184
|
+
if (!Number.isFinite(number) || number <= 0)
|
|
185
|
+
return 100;
|
|
186
|
+
return Math.min(1_000, Math.trunc(number));
|
|
187
|
+
}
|
|
188
|
+
function cursorKey(chat) {
|
|
189
|
+
return String(chat);
|
|
190
|
+
}
|
|
191
|
+
async function waitForSeconds(seconds, signal) {
|
|
192
|
+
await new Promise((resolve) => {
|
|
193
|
+
const timer = setTimeout(() => {
|
|
194
|
+
signal.removeEventListener("abort", abort);
|
|
195
|
+
resolve();
|
|
196
|
+
}, seconds * 1_000);
|
|
197
|
+
const abort = () => {
|
|
198
|
+
clearTimeout(timer);
|
|
199
|
+
signal.removeEventListener("abort", abort);
|
|
200
|
+
resolve();
|
|
201
|
+
};
|
|
202
|
+
if (signal.aborted)
|
|
203
|
+
abort();
|
|
204
|
+
else
|
|
205
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
async function waitForAbort(signal) {
|
|
209
|
+
if (signal.aborted)
|
|
210
|
+
return;
|
|
211
|
+
await new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
|
|
212
|
+
}
|
|
213
|
+
async function runUntilAborted(operation, signal) {
|
|
214
|
+
if (signal.aborted)
|
|
215
|
+
throw new Error("aborted");
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
let settled = false;
|
|
218
|
+
const finish = (action) => {
|
|
219
|
+
if (settled)
|
|
220
|
+
return;
|
|
221
|
+
settled = true;
|
|
222
|
+
signal.removeEventListener("abort", onAbort);
|
|
223
|
+
action();
|
|
224
|
+
};
|
|
225
|
+
const onAbort = () => finish(() => reject(new Error("aborted")));
|
|
226
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
227
|
+
operation.then((value) => finish(() => resolve(value)), (error) => finish(() => reject(error)));
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
function isRecord(value) {
|
|
231
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@paperkite/plugin-messages-watch",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"development": "./src/index.ts",
|
|
8
|
+
"default": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"telegram": "^2.26.22",
|
|
20
|
+
"@paperkite/sdk": "0.1.0"
|
|
21
|
+
},
|
|
22
|
+
"paperkite": {
|
|
23
|
+
"plugin": {
|
|
24
|
+
"entry": "./dist/index.js",
|
|
25
|
+
"capabilities": [
|
|
26
|
+
{
|
|
27
|
+
"kind": "trigger",
|
|
28
|
+
"name": "messages.watch",
|
|
29
|
+
"handler": "LiveConversationTrigger"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"kind": "trigger",
|
|
33
|
+
"name": "messages.poll",
|
|
34
|
+
"handler": "PollConversationTrigger"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc -p tsconfig.json",
|
|
41
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
42
|
+
}
|
|
43
|
+
}
|