chatboty 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/LICENSE +162 -0
- package/README.md +119 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/src/chatboty.d.ts +93 -0
- package/dist/cjs/src/chatboty.d.ts.map +1 -0
- package/dist/cjs/src/chatboty.js +204 -0
- package/dist/cjs/src/chatboty.js.map +1 -0
- package/dist/cjs/src/client.d.ts +84 -0
- package/dist/cjs/src/client.d.ts.map +1 -0
- package/dist/cjs/src/client.js +298 -0
- package/dist/cjs/src/client.js.map +1 -0
- package/dist/cjs/src/entity/contact.d.ts +25 -0
- package/dist/cjs/src/entity/contact.d.ts.map +1 -0
- package/dist/cjs/src/entity/contact.js +34 -0
- package/dist/cjs/src/entity/contact.js.map +1 -0
- package/dist/cjs/src/entity/friendship.d.ts +13 -0
- package/dist/cjs/src/entity/friendship.d.ts.map +1 -0
- package/dist/cjs/src/entity/friendship.js +19 -0
- package/dist/cjs/src/entity/friendship.js.map +1 -0
- package/dist/cjs/src/entity/message.d.ts +61 -0
- package/dist/cjs/src/entity/message.d.ts.map +1 -0
- package/dist/cjs/src/entity/message.js +150 -0
- package/dist/cjs/src/entity/message.js.map +1 -0
- package/dist/cjs/src/entity/room.d.ts +21 -0
- package/dist/cjs/src/entity/room.d.ts.map +1 -0
- package/dist/cjs/src/entity/room.js +43 -0
- package/dist/cjs/src/entity/room.js.map +1 -0
- package/dist/cjs/src/mod.d.ts +17 -0
- package/dist/cjs/src/mod.d.ts.map +1 -0
- package/dist/cjs/src/mod.js +41 -0
- package/dist/cjs/src/mod.js.map +1 -0
- package/dist/cjs/src/types.d.ts +122 -0
- package/dist/cjs/src/types.d.ts.map +1 -0
- package/dist/cjs/src/types.js +55 -0
- package/dist/cjs/src/types.js.map +1 -0
- package/dist/esm/src/chatboty.d.ts +93 -0
- package/dist/esm/src/chatboty.d.ts.map +1 -0
- package/dist/esm/src/chatboty.js +200 -0
- package/dist/esm/src/chatboty.js.map +1 -0
- package/dist/esm/src/client.d.ts +84 -0
- package/dist/esm/src/client.d.ts.map +1 -0
- package/dist/esm/src/client.js +291 -0
- package/dist/esm/src/client.js.map +1 -0
- package/dist/esm/src/entity/contact.d.ts +25 -0
- package/dist/esm/src/entity/contact.d.ts.map +1 -0
- package/dist/esm/src/entity/contact.js +30 -0
- package/dist/esm/src/entity/contact.js.map +1 -0
- package/dist/esm/src/entity/friendship.d.ts +13 -0
- package/dist/esm/src/entity/friendship.d.ts.map +1 -0
- package/dist/esm/src/entity/friendship.js +15 -0
- package/dist/esm/src/entity/friendship.js.map +1 -0
- package/dist/esm/src/entity/message.d.ts +61 -0
- package/dist/esm/src/entity/message.d.ts.map +1 -0
- package/dist/esm/src/entity/message.js +146 -0
- package/dist/esm/src/entity/message.js.map +1 -0
- package/dist/esm/src/entity/room.d.ts +21 -0
- package/dist/esm/src/entity/room.d.ts.map +1 -0
- package/dist/esm/src/entity/room.js +39 -0
- package/dist/esm/src/entity/room.js.map +1 -0
- package/dist/esm/src/mod.d.ts +17 -0
- package/dist/esm/src/mod.d.ts.map +1 -0
- package/dist/esm/src/mod.js +17 -0
- package/dist/esm/src/mod.js.map +1 -0
- package/dist/esm/src/types.d.ts +122 -0
- package/dist/esm/src/types.d.ts.map +1 -0
- package/dist/esm/src/types.js +50 -0
- package/dist/esm/src/types.js.map +1 -0
- package/package.json +52 -0
- package/src/chatboty.ts +228 -0
- package/src/client.ts +310 -0
- package/src/entity/contact.ts +32 -0
- package/src/entity/friendship.ts +16 -0
- package/src/entity/message.ts +147 -0
- package/src/entity/room.ts +42 -0
- package/src/mod.ts +19 -0
- package/src/types.ts +142 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ContactType } from '../types.js';
|
|
2
|
+
/** 联系人实体(含外部客户)。 */
|
|
3
|
+
export class Contact {
|
|
4
|
+
constructor(bot, payload) {
|
|
5
|
+
this.bot = bot;
|
|
6
|
+
this.payload = payload;
|
|
7
|
+
}
|
|
8
|
+
id() { return this.payload.id; }
|
|
9
|
+
name() { return this.payload.name ?? ''; }
|
|
10
|
+
alias() { return this.payload.alias; }
|
|
11
|
+
avatar() { return this.payload.avatar; }
|
|
12
|
+
phone() { return this.payload.phone; }
|
|
13
|
+
title() { return this.payload.title; }
|
|
14
|
+
/**
|
|
15
|
+
* 联系人类别。企微通讯录成员/外部客户都是真人 → 默认 {@link ContactType.Individual}。
|
|
16
|
+
* (企微不存在微信式"公众号/服务号", 且探针未采集"应用号/机器人"标志, 故不臆造 Official。)
|
|
17
|
+
*/
|
|
18
|
+
type() { return this.payload.type ?? ContactType.Individual; }
|
|
19
|
+
/** 单聊会话 id(发消息目标)。 */
|
|
20
|
+
conversationId() { return this.payload.conversationId; }
|
|
21
|
+
/** 给该联系人发消息(单聊)。 */
|
|
22
|
+
async say(sayable) {
|
|
23
|
+
const conv = this.payload.conversationId;
|
|
24
|
+
if (!conv)
|
|
25
|
+
throw new Error(`Contact ${this.id()} 无单聊会话 id, 无法发送`);
|
|
26
|
+
return this.bot.sayTo(conv, sayable);
|
|
27
|
+
}
|
|
28
|
+
toString() { return `Contact<${this.name() || this.id()}>`; }
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=contact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact.js","sourceRoot":"","sources":["../../../../src/entity/contact.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,oBAAoB;AACpB,MAAM,OAAO,OAAO;IAClB,YAA8B,GAAW,EAAW,OAAuB;QAA7C,QAAG,GAAH,GAAG,CAAQ;QAAW,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/E,EAAE,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAC,CAAC;IACxC,IAAI,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA,CAAC,CAAC;IAClD,KAAK,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,CAAC,CAAC;IAC1D,MAAM,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,CAAC,CAAC;IAC5D,KAAK,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,CAAC,CAAC;IAC1D,KAAK,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,CAAC,CAAC;IAE1D;;;OAGG;IACH,IAAI,KAAmB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,UAAU,CAAA,CAAC,CAAC;IAE3E,sBAAsB;IACtB,cAAc,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA,CAAC,CAAC;IAE5E,oBAAoB;IACpB,KAAK,CAAC,GAAG,CAAE,OAAgB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAA;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAA;QACjE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ,KAAc,OAAO,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,CAAA,CAAC,CAAC;CACtE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BotApi, FriendshipPayload, FriendshipKind } from '../types.js';
|
|
2
|
+
import { Contact } from './contact.js';
|
|
3
|
+
/** 好友关系事件实体。 */
|
|
4
|
+
export declare class Friendship {
|
|
5
|
+
private readonly bot;
|
|
6
|
+
readonly payload: FriendshipPayload;
|
|
7
|
+
constructor(bot: BotApi, payload: FriendshipPayload);
|
|
8
|
+
kind(): FriendshipKind;
|
|
9
|
+
hello(): string | undefined;
|
|
10
|
+
contact(): Contact;
|
|
11
|
+
toString(): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=friendship.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friendship.d.ts","sourceRoot":"","sources":["../../../../src/entity/friendship.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,gBAAgB;AAChB,qBAAa,UAAU;IACR,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,QAAQ,CAAC,OAAO,EAAE,iBAAiB;gBAAhD,GAAG,EAAE,MAAM,EAAW,OAAO,EAAE,iBAAiB;IAE9E,IAAI,IAAK,cAAc;IACvB,KAAK,IAAK,MAAM,GAAG,SAAS;IAE5B,OAAO,IAAK,OAAO;IAInB,QAAQ,IAAK,MAAM;CACpB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Contact } from './contact.js';
|
|
2
|
+
/** 好友关系事件实体。 */
|
|
3
|
+
export class Friendship {
|
|
4
|
+
constructor(bot, payload) {
|
|
5
|
+
this.bot = bot;
|
|
6
|
+
this.payload = payload;
|
|
7
|
+
}
|
|
8
|
+
kind() { return this.payload.kind; }
|
|
9
|
+
hello() { return this.payload.hello; }
|
|
10
|
+
contact() {
|
|
11
|
+
return new Contact(this.bot, this.payload.contact ?? { id: this.payload.contactId });
|
|
12
|
+
}
|
|
13
|
+
toString() { return `Friendship<${this.kind()}:${this.payload.contactId}>`; }
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=friendship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"friendship.js","sourceRoot":"","sources":["../../../../src/entity/friendship.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,gBAAgB;AAChB,MAAM,OAAO,UAAU;IACrB,YAA8B,GAAW,EAAW,OAA0B;QAAhD,QAAG,GAAH,GAAG,CAAQ;QAAW,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAElF,IAAI,KAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA,CAAC,CAAC;IACpD,KAAK,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,CAAC,CAAC;IAE1D,OAAO;QACL,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,QAAQ,KAAc,OAAO,cAAc,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAA,CAAC,CAAC;CACtF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { BotApi, MessagePayload, Sayable, FileBox } from '../types.js';
|
|
2
|
+
import { MessageType } from '../types.js';
|
|
3
|
+
import { Contact } from './contact.js';
|
|
4
|
+
import { Room } from './room.js';
|
|
5
|
+
/** 消息实体。 */
|
|
6
|
+
export declare class Message {
|
|
7
|
+
private readonly bot;
|
|
8
|
+
readonly payload: MessagePayload;
|
|
9
|
+
constructor(bot: BotApi, payload: MessagePayload);
|
|
10
|
+
id(): string | undefined;
|
|
11
|
+
type(): MessageType;
|
|
12
|
+
text(): string;
|
|
13
|
+
self(): boolean;
|
|
14
|
+
timestamp(): number | undefined;
|
|
15
|
+
file(): FileBox | null | undefined;
|
|
16
|
+
miniProgram(): Record<string, any> | null | undefined;
|
|
17
|
+
urlLink(): Record<string, any> | null | undefined;
|
|
18
|
+
/** 发送者(完整 Contact; 群消息识别客户用)。 */
|
|
19
|
+
talker(): Contact | undefined;
|
|
20
|
+
/** 所在群(单聊为 undefined)。 */
|
|
21
|
+
room(): Room | undefined;
|
|
22
|
+
/** 回复到原会话(群消息回群, 单聊回该人)。 */
|
|
23
|
+
say(sayable: Sayable): Promise<any>;
|
|
24
|
+
/**
|
|
25
|
+
* 从消息正文解析出的 @ 提及显示名(不含 "@所有人"/"@all")。
|
|
26
|
+
* 说明: 企微群 @ 消息正文形如 `@张三 内容`, 名字后接普通空格或 U+2005(four-per-em space)分隔。
|
|
27
|
+
* 这是"从消息 payload 解析"的诚实实现——只用真实的正文文本; 结构化的被@ vid 需进一步逆向(见 RE 计划)。
|
|
28
|
+
*/
|
|
29
|
+
private mentionNames;
|
|
30
|
+
/**
|
|
31
|
+
* 消息中被 @ 的联系人列表(best-effort)。
|
|
32
|
+
* 先从正文解析出 @显示名, 再用一次 contactList 拉全量通讯录按 name/alias 就近解析成完整 Contact;
|
|
33
|
+
* 未在已加载通讯录中的成员回退为仅含名字的 Contact(其 id() 为空串)。
|
|
34
|
+
* @returns 被 @ 的 Contact 数组(无 @ 时为空数组)。
|
|
35
|
+
*/
|
|
36
|
+
mentionList(): Promise<Contact[]>;
|
|
37
|
+
/**
|
|
38
|
+
* 本条消息是否 @ 了当前登录者(self)或 @所有人。
|
|
39
|
+
* 判定: 正文含 `@所有人`/`@all`(全体含自己) → true; 或含 `@{self 显示名}` → true。
|
|
40
|
+
* (纯本机文本判定, 不发起网络请求; 依赖 bot 已知 self 名。)
|
|
41
|
+
*/
|
|
42
|
+
mentionSelf(): boolean;
|
|
43
|
+
private toFileBoxFromResult;
|
|
44
|
+
/**
|
|
45
|
+
* 取本条消息的媒体/文件字节(图片/文件/音视频), 返回 {@link FileBox}(含 base64 data URL)。
|
|
46
|
+
* - 收到的图片/文件事件通常已附带 file(探针后台已下载解密) → 直接返回。
|
|
47
|
+
* - 否则按类型冷调探针下载: 图片走 downloadImage, 文件/音视频走 downloadFile(按 msgid+会话+文件名定位缓存)。
|
|
48
|
+
* @returns FileBox(dataUrl/mime/name/size); 非媒体消息或下载失败返回 null。
|
|
49
|
+
*/
|
|
50
|
+
toFileBox(): Promise<FileBox | null>;
|
|
51
|
+
/** {@link toFileBox} 的别名(下载本条消息的媒体字节)。 */
|
|
52
|
+
download(): Promise<FileBox | null>;
|
|
53
|
+
/**
|
|
54
|
+
* 转发本条消息到另一会话(群/单聊 conversationId, 或 Room/Contact)。
|
|
55
|
+
* ⚠️ 未实现: 企微转发需逆向定位并冷调"转发消息"服务(见 puppet-wework 交付说明的 RE 计划)。
|
|
56
|
+
* 当前会抛错, 以免静默失败。
|
|
57
|
+
*/
|
|
58
|
+
forward(_to: string | Room | Contact): Promise<never>;
|
|
59
|
+
toString(): string;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/entity/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,YAAY;AACZ,qBAAa,OAAO;IACL,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,QAAQ,CAAC,OAAO,EAAE,cAAc;gBAA7C,GAAG,EAAE,MAAM,EAAW,OAAO,EAAE,cAAc;IAE3E,EAAE,IAAK,MAAM,GAAG,SAAS;IACzB,IAAI,IAAK,WAAW;IACpB,IAAI,IAAK,MAAM;IACf,IAAI,IAAK,OAAO;IAChB,SAAS,IAAK,MAAM,GAAG,SAAS;IAChC,IAAI,IAAK,OAAO,GAAG,IAAI,GAAG,SAAS;IACnC,WAAW,IAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS;IACtD,OAAO,IAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS;IAElD,iCAAiC;IACjC,MAAM,IAAK,OAAO,GAAG,SAAS;IAM9B,0BAA0B;IAC1B,IAAI,IAAK,IAAI,GAAG,SAAS;IAIzB,4BAA4B;IACtB,GAAG,CAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAO1C;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;OAKG;IACG,WAAW,IAAK,OAAO,CAAC,OAAO,EAAE,CAAC;IAoBxC;;;;OAIG;IACH,WAAW,IAAK,OAAO;IAUvB,OAAO,CAAC,mBAAmB;IAO3B;;;;;OAKG;IACG,SAAS,IAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAqB3C,0CAA0C;IACpC,QAAQ,IAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI1C;;;;OAIG;IACG,OAAO,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,QAAQ,IAAK,MAAM;CACpB"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { MessageType } from '../types.js';
|
|
2
|
+
import { Contact } from './contact.js';
|
|
3
|
+
import { Room } from './room.js';
|
|
4
|
+
/** 消息实体。 */
|
|
5
|
+
export class Message {
|
|
6
|
+
constructor(bot, payload) {
|
|
7
|
+
this.bot = bot;
|
|
8
|
+
this.payload = payload;
|
|
9
|
+
}
|
|
10
|
+
id() { return this.payload.id; }
|
|
11
|
+
type() { return this.payload.type; }
|
|
12
|
+
text() { return this.payload.text ?? ''; }
|
|
13
|
+
self() { return !!this.payload.self; }
|
|
14
|
+
timestamp() { return this.payload.timestamp; }
|
|
15
|
+
file() { return this.payload.file; }
|
|
16
|
+
miniProgram() { return this.payload.miniProgram; }
|
|
17
|
+
urlLink() { return this.payload.urlLink; }
|
|
18
|
+
/** 发送者(完整 Contact; 群消息识别客户用)。 */
|
|
19
|
+
talker() {
|
|
20
|
+
if (this.payload.talker)
|
|
21
|
+
return new Contact(this.bot, this.payload.talker);
|
|
22
|
+
if (this.payload.talkerId)
|
|
23
|
+
return new Contact(this.bot, { id: this.payload.talkerId });
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
/** 所在群(单聊为 undefined)。 */
|
|
27
|
+
room() {
|
|
28
|
+
return this.payload.roomId ? new Room(this.bot, { id: this.payload.roomId }) : undefined;
|
|
29
|
+
}
|
|
30
|
+
/** 回复到原会话(群消息回群, 单聊回该人)。 */
|
|
31
|
+
async say(sayable) {
|
|
32
|
+
const target = this.payload.roomId || this.payload.conversationId;
|
|
33
|
+
return this.bot.sayTo(target, sayable);
|
|
34
|
+
}
|
|
35
|
+
/* ---------------- @ 提及 ---------------- */
|
|
36
|
+
/**
|
|
37
|
+
* 从消息正文解析出的 @ 提及显示名(不含 "@所有人"/"@all")。
|
|
38
|
+
* 说明: 企微群 @ 消息正文形如 `@张三 内容`, 名字后接普通空格或 U+2005(four-per-em space)分隔。
|
|
39
|
+
* 这是"从消息 payload 解析"的诚实实现——只用真实的正文文本; 结构化的被@ vid 需进一步逆向(见 RE 计划)。
|
|
40
|
+
*/
|
|
41
|
+
mentionNames() {
|
|
42
|
+
const text = this.payload.text ?? '';
|
|
43
|
+
if (!text.includes('@'))
|
|
44
|
+
return [];
|
|
45
|
+
const out = [];
|
|
46
|
+
const re = /@([^\s @]+)/g;
|
|
47
|
+
let m;
|
|
48
|
+
while ((m = re.exec(text)) !== null) {
|
|
49
|
+
const n = m[1];
|
|
50
|
+
if (n && n !== '所有人' && n.toLowerCase() !== 'all')
|
|
51
|
+
out.push(n);
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 消息中被 @ 的联系人列表(best-effort)。
|
|
57
|
+
* 先从正文解析出 @显示名, 再用一次 contactList 拉全量通讯录按 name/alias 就近解析成完整 Contact;
|
|
58
|
+
* 未在已加载通讯录中的成员回退为仅含名字的 Contact(其 id() 为空串)。
|
|
59
|
+
* @returns 被 @ 的 Contact 数组(无 @ 时为空数组)。
|
|
60
|
+
*/
|
|
61
|
+
async mentionList() {
|
|
62
|
+
const names = this.mentionNames();
|
|
63
|
+
if (names.length === 0)
|
|
64
|
+
return [];
|
|
65
|
+
let pool = [];
|
|
66
|
+
try {
|
|
67
|
+
const r = await this.bot.command('contactList');
|
|
68
|
+
pool = (r && (r.contacts || r.list || (Array.isArray(r) ? r : []))) || [];
|
|
69
|
+
}
|
|
70
|
+
catch { /* 解析失败不致命: 退回仅名字的 Contact */ }
|
|
71
|
+
return names.map((nm) => {
|
|
72
|
+
const u = pool.find((x) => x && (x.name === nm || x.alias === nm || x.realName === nm));
|
|
73
|
+
if (u) {
|
|
74
|
+
return new Contact(this.bot, {
|
|
75
|
+
id: u.userId ?? u.id ?? '', name: u.name ?? u.realName, alias: u.alias, avatar: u.avatar,
|
|
76
|
+
phone: u.phone, title: u.title, corpId: u.corpId, unionId: u.unionId, conversationId: u.conversationId,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return new Contact(this.bot, { id: '', name: nm });
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 本条消息是否 @ 了当前登录者(self)或 @所有人。
|
|
84
|
+
* 判定: 正文含 `@所有人`/`@all`(全体含自己) → true; 或含 `@{self 显示名}` → true。
|
|
85
|
+
* (纯本机文本判定, 不发起网络请求; 依赖 bot 已知 self 名。)
|
|
86
|
+
*/
|
|
87
|
+
mentionSelf() {
|
|
88
|
+
const text = this.payload.text ?? '';
|
|
89
|
+
if (!text.includes('@'))
|
|
90
|
+
return false;
|
|
91
|
+
if (/@所有人|@all\b/i.test(text))
|
|
92
|
+
return true;
|
|
93
|
+
const selfName = this.bot.selfContact?.()?.name;
|
|
94
|
+
return !!selfName && this.mentionNames().includes(selfName);
|
|
95
|
+
}
|
|
96
|
+
/* ---------------- 媒体下载 ---------------- */
|
|
97
|
+
toFileBoxFromResult(r) {
|
|
98
|
+
if (!r)
|
|
99
|
+
return null;
|
|
100
|
+
const dataUrl = r.dataUrl || r.base64;
|
|
101
|
+
if (!dataUrl)
|
|
102
|
+
return null;
|
|
103
|
+
return { dataUrl, mime: r.mime, name: r.name, size: r.size };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 取本条消息的媒体/文件字节(图片/文件/音视频), 返回 {@link FileBox}(含 base64 data URL)。
|
|
107
|
+
* - 收到的图片/文件事件通常已附带 file(探针后台已下载解密) → 直接返回。
|
|
108
|
+
* - 否则按类型冷调探针下载: 图片走 downloadImage, 文件/音视频走 downloadFile(按 msgid+会话+文件名定位缓存)。
|
|
109
|
+
* @returns FileBox(dataUrl/mime/name/size); 非媒体消息或下载失败返回 null。
|
|
110
|
+
*/
|
|
111
|
+
async toFileBox() {
|
|
112
|
+
if (this.payload.file)
|
|
113
|
+
return this.payload.file;
|
|
114
|
+
const msgid = this.payload.id;
|
|
115
|
+
if (!msgid)
|
|
116
|
+
return null;
|
|
117
|
+
const t = this.payload.type;
|
|
118
|
+
if (t === MessageType.Image) {
|
|
119
|
+
const r = await this.bot.command('downloadImage', { msgid });
|
|
120
|
+
return this.toFileBoxFromResult(r);
|
|
121
|
+
}
|
|
122
|
+
if (t === MessageType.File || t === MessageType.Video || t === MessageType.Audio) {
|
|
123
|
+
const r = await this.bot.command('downloadFile', {
|
|
124
|
+
msgid,
|
|
125
|
+
conversationId: this.payload.conversationId,
|
|
126
|
+
timestamp: this.payload.timestamp,
|
|
127
|
+
name: this.payload.text,
|
|
128
|
+
});
|
|
129
|
+
return this.toFileBoxFromResult(r);
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/** {@link toFileBox} 的别名(下载本条消息的媒体字节)。 */
|
|
134
|
+
async download() { return this.toFileBox(); }
|
|
135
|
+
/* ---------------- 转发(RE 待定) ---------------- */
|
|
136
|
+
/**
|
|
137
|
+
* 转发本条消息到另一会话(群/单聊 conversationId, 或 Room/Contact)。
|
|
138
|
+
* ⚠️ 未实现: 企微转发需逆向定位并冷调"转发消息"服务(见 puppet-wework 交付说明的 RE 计划)。
|
|
139
|
+
* 当前会抛错, 以免静默失败。
|
|
140
|
+
*/
|
|
141
|
+
async forward(_to) {
|
|
142
|
+
throw new Error('Message.forward 未实现: 需逆向定位企微转发消息服务(ForwardMessage), 见 RE 计划');
|
|
143
|
+
}
|
|
144
|
+
toString() { return `Message<${MessageType[this.type()]}:${this.text().slice(0, 30)}>`; }
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../src/entity/message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BotApi, RoomPayload, Sayable } from '../types.js';
|
|
2
|
+
import { Contact } from './contact.js';
|
|
3
|
+
/** 群实体。 */
|
|
4
|
+
export declare class Room {
|
|
5
|
+
private readonly bot;
|
|
6
|
+
readonly payload: RoomPayload;
|
|
7
|
+
constructor(bot: BotApi, payload: RoomPayload);
|
|
8
|
+
id(): string;
|
|
9
|
+
topic(): string | undefined;
|
|
10
|
+
ownerId(): string | undefined;
|
|
11
|
+
/** 群发消息。 */
|
|
12
|
+
say(sayable: Sayable): Promise<any>;
|
|
13
|
+
/** 改群名(冷改, 内外群通用)。 */
|
|
14
|
+
rename(topic: string): Promise<any>;
|
|
15
|
+
/** 群成员(完整 Contact 对象; 受探针成员枚举局限)。 */
|
|
16
|
+
memberAll(): Promise<Contact[]>;
|
|
17
|
+
/** 群主(若可解析)。 */
|
|
18
|
+
owner(): Promise<Contact | undefined>;
|
|
19
|
+
toString(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room.d.ts","sourceRoot":"","sources":["../../../../src/entity/room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,WAAW;AACX,qBAAa,IAAI;IACF,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,QAAQ,CAAC,OAAO,EAAE,WAAW;gBAA1C,GAAG,EAAE,MAAM,EAAW,OAAO,EAAE,WAAW;IAExE,EAAE,IAAK,MAAM;IACb,KAAK,IAAK,MAAM,GAAG,SAAS;IAC5B,OAAO,IAAK,MAAM,GAAG,SAAS;IAE9B,YAAY;IACN,GAAG,CAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C,sBAAsB;IAChB,MAAM,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAI1C,qCAAqC;IAC/B,SAAS,IAAK,OAAO,CAAC,OAAO,EAAE,CAAC;IAUtC,gBAAgB;IACV,KAAK,IAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAO5C,QAAQ,IAAK,MAAM;CACpB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Contact } from './contact.js';
|
|
2
|
+
/** 群实体。 */
|
|
3
|
+
export class Room {
|
|
4
|
+
constructor(bot, payload) {
|
|
5
|
+
this.bot = bot;
|
|
6
|
+
this.payload = payload;
|
|
7
|
+
}
|
|
8
|
+
id() { return this.payload.id; }
|
|
9
|
+
topic() { return this.payload.topic; }
|
|
10
|
+
ownerId() { return this.payload.ownerId; }
|
|
11
|
+
/** 群发消息。 */
|
|
12
|
+
async say(sayable) {
|
|
13
|
+
return this.bot.sayTo(this.payload.id, sayable);
|
|
14
|
+
}
|
|
15
|
+
/** 改群名(冷改, 内外群通用)。 */
|
|
16
|
+
async rename(topic) {
|
|
17
|
+
return this.bot.command('roomTopic', { conversationId: this.payload.id, topic });
|
|
18
|
+
}
|
|
19
|
+
/** 群成员(完整 Contact 对象; 受探针成员枚举局限)。 */
|
|
20
|
+
async memberAll() {
|
|
21
|
+
const r = await this.bot.command('roomMembers', { conversationId: this.payload.id });
|
|
22
|
+
const list = (r && (r.memberList || []));
|
|
23
|
+
return list.map((u) => new Contact(this.bot, {
|
|
24
|
+
id: u.userId, name: u.name, alias: u.alias, avatar: u.avatar,
|
|
25
|
+
phone: u.phone, title: u.title, corpId: u.corpId, unionId: u.unionId,
|
|
26
|
+
conversationId: u.conversationId,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
/** 群主(若可解析)。 */
|
|
30
|
+
async owner() {
|
|
31
|
+
const r = await this.bot.command('roomMembers', { conversationId: this.payload.id });
|
|
32
|
+
const u = r && r.ownerUser;
|
|
33
|
+
if (!u || !u.userId)
|
|
34
|
+
return undefined;
|
|
35
|
+
return new Contact(this.bot, { id: u.userId, name: u.name, alias: u.alias, avatar: u.avatar, conversationId: u.conversationId });
|
|
36
|
+
}
|
|
37
|
+
toString() { return `Room<${this.topic() || this.id()}>`; }
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=room.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room.js","sourceRoot":"","sources":["../../../../src/entity/room.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,WAAW;AACX,MAAM,OAAO,IAAI;IACf,YAA8B,GAAW,EAAW,OAAoB;QAA1C,QAAG,GAAH,GAAG,CAAQ;QAAW,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAE5E,EAAE,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA,CAAC,CAAC;IACxC,KAAK,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,CAAC,CAAC;IAC1D,OAAO,KAA0B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA,CAAC,CAAC;IAE9D,YAAY;IACZ,KAAK,CAAC,GAAG,CAAE,OAAgB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,MAAM,CAAE,KAAa;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,SAAS;QACb,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QACpF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAU,CAAA;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM;YAC5D,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO;YACpE,cAAc,EAAE,CAAC,CAAC,cAAc;SACjC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,KAAK;QACT,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QACpF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAA;QAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAA;IAClI,CAAC;IAED,QAAQ,KAAc,OAAO,QAAQ,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,CAAA,CAAC,CAAC;CACpE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chatboty 公共入口。自研 IM 自动化框架(企业微信), 零外部框架依赖。
|
|
3
|
+
*
|
|
4
|
+
* import { Chatboty } from 'chatboty'
|
|
5
|
+
* const bot = new Chatboty({ token: 'cbt_...' })
|
|
6
|
+
* bot.on('message', m => { if (!m.self()) m.say('收到: ' + m.text()) })
|
|
7
|
+
* await bot.start()
|
|
8
|
+
*/
|
|
9
|
+
export { Chatboty, type ChatbotyOptions } from './chatboty.js';
|
|
10
|
+
export { ChatbotyClient, type ChatbotyClientOptions, type EventHandler } from './client.js';
|
|
11
|
+
export { Message } from './entity/message.js';
|
|
12
|
+
export { Contact } from './entity/contact.js';
|
|
13
|
+
export { Room } from './entity/room.js';
|
|
14
|
+
export { Friendship } from './entity/friendship.js';
|
|
15
|
+
export * from './types.js';
|
|
16
|
+
export { Chatboty as default } from './chatboty.js';
|
|
17
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chatboty 公共入口。自研 IM 自动化框架(企业微信), 零外部框架依赖。
|
|
3
|
+
*
|
|
4
|
+
* import { Chatboty } from 'chatboty'
|
|
5
|
+
* const bot = new Chatboty({ token: 'cbt_...' })
|
|
6
|
+
* bot.on('message', m => { if (!m.self()) m.say('收到: ' + m.text()) })
|
|
7
|
+
* await bot.start()
|
|
8
|
+
*/
|
|
9
|
+
export { Chatboty } from './chatboty.js';
|
|
10
|
+
export { ChatbotyClient } from './client.js';
|
|
11
|
+
export { Message } from './entity/message.js';
|
|
12
|
+
export { Contact } from './entity/contact.js';
|
|
13
|
+
export { Room } from './entity/room.js';
|
|
14
|
+
export { Friendship } from './entity/friendship.js';
|
|
15
|
+
export * from './types.js';
|
|
16
|
+
export { Chatboty as default } from './chatboty.js';
|
|
17
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAiD,MAAM,aAAa,CAAA;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,cAAc,YAAY,CAAA;AAE1B,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chatboty 自研类型(零外部框架依赖)。这些 payload 是实体类的数据底座,
|
|
3
|
+
* 由网关下发的 wire 事件/命令结果映射而来。
|
|
4
|
+
*/
|
|
5
|
+
/** 消息类型。 */
|
|
6
|
+
export declare enum MessageType {
|
|
7
|
+
Unknown = 0,
|
|
8
|
+
Text = 1,
|
|
9
|
+
Image = 2,
|
|
10
|
+
Audio = 3,
|
|
11
|
+
Video = 4,
|
|
12
|
+
File = 5,
|
|
13
|
+
Url = 6,// 链接卡片
|
|
14
|
+
MiniProgram = 7,
|
|
15
|
+
System = 8
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 联系人类别。企微现实: 通讯录里都是"真人"(个人/同事/外部客户), 没有微信那种"公众号/服务号"构造,
|
|
19
|
+
* 故探针默认给 Individual。Official/Corporation 预留给未来能可靠区分"应用/机器人/企业主体"时使用。
|
|
20
|
+
*/
|
|
21
|
+
export declare enum ContactType {
|
|
22
|
+
Unknown = 0,
|
|
23
|
+
Individual = 1,// 真人(默认; 企微通讯录成员/外部客户)
|
|
24
|
+
Official = 2,// 应用/机器人号(企微暂无可靠信号, 预留)
|
|
25
|
+
Corporation = 3
|
|
26
|
+
}
|
|
27
|
+
/** 联系人(含外部客户)。 */
|
|
28
|
+
export interface ContactPayload {
|
|
29
|
+
id: string;
|
|
30
|
+
name?: string;
|
|
31
|
+
alias?: string;
|
|
32
|
+
avatar?: string;
|
|
33
|
+
phone?: string;
|
|
34
|
+
title?: string;
|
|
35
|
+
corpId?: string;
|
|
36
|
+
unionId?: string;
|
|
37
|
+
conversationId?: string;
|
|
38
|
+
type?: ContactType;
|
|
39
|
+
}
|
|
40
|
+
/** Contact.find/findAll 查询条件: 关键词字符串, 或按字段精确匹配。 */
|
|
41
|
+
export type ContactQueryFilter = string | {
|
|
42
|
+
name?: string;
|
|
43
|
+
alias?: string;
|
|
44
|
+
id?: string;
|
|
45
|
+
};
|
|
46
|
+
/** 群。 */
|
|
47
|
+
export interface RoomPayload {
|
|
48
|
+
id: string;
|
|
49
|
+
topic?: string;
|
|
50
|
+
ownerId?: string;
|
|
51
|
+
memberIdList?: string[];
|
|
52
|
+
}
|
|
53
|
+
/** 媒体附件(图片/文件)。 */
|
|
54
|
+
export interface FileBox {
|
|
55
|
+
dataUrl?: string;
|
|
56
|
+
mime?: string;
|
|
57
|
+
name?: string;
|
|
58
|
+
size?: number;
|
|
59
|
+
}
|
|
60
|
+
/** 消息。 */
|
|
61
|
+
export interface MessagePayload {
|
|
62
|
+
id?: string;
|
|
63
|
+
type: MessageType;
|
|
64
|
+
text?: string;
|
|
65
|
+
talkerId?: string;
|
|
66
|
+
roomId?: string;
|
|
67
|
+
conversationId: string;
|
|
68
|
+
timestamp?: number;
|
|
69
|
+
self?: boolean;
|
|
70
|
+
talker?: ContactPayload;
|
|
71
|
+
file?: FileBox | null;
|
|
72
|
+
miniProgram?: Record<string, any> | null;
|
|
73
|
+
urlLink?: Record<string, any> | null;
|
|
74
|
+
}
|
|
75
|
+
/** 好友关系事件。 */
|
|
76
|
+
export type FriendshipKind = 'receive' | 'confirm' | 'add' | 'delete';
|
|
77
|
+
export interface FriendshipPayload {
|
|
78
|
+
contactId: string;
|
|
79
|
+
contact?: ContactPayload;
|
|
80
|
+
kind: FriendshipKind;
|
|
81
|
+
hello?: string;
|
|
82
|
+
}
|
|
83
|
+
/** 群事件(成员变动/改名) payload。 */
|
|
84
|
+
export interface RoomMemberEventPayload {
|
|
85
|
+
roomId: string;
|
|
86
|
+
idList: string[];
|
|
87
|
+
contactList?: ContactPayload[];
|
|
88
|
+
operatorId?: string | null;
|
|
89
|
+
timestamp?: number;
|
|
90
|
+
}
|
|
91
|
+
export interface RoomTopicEventPayload {
|
|
92
|
+
roomId: string;
|
|
93
|
+
topic?: string;
|
|
94
|
+
oldTopic?: string;
|
|
95
|
+
changerId?: string | null;
|
|
96
|
+
timestamp?: number;
|
|
97
|
+
}
|
|
98
|
+
/** 可发送内容。文本=字符串; 媒体=带类型的对象(路径/URL/base64 由探针侧解析)。 */
|
|
99
|
+
export type Sayable = string | {
|
|
100
|
+
image: string;
|
|
101
|
+
} | {
|
|
102
|
+
file: string;
|
|
103
|
+
} | {
|
|
104
|
+
url: string;
|
|
105
|
+
title?: string;
|
|
106
|
+
description?: string;
|
|
107
|
+
thumbUrl?: string;
|
|
108
|
+
} | {
|
|
109
|
+
miniProgram: Record<string, any>;
|
|
110
|
+
};
|
|
111
|
+
/** 实体类回引 bot 的最小接口(避免循环依赖)。Chatboty 主类实现之。 */
|
|
112
|
+
export interface BotApi {
|
|
113
|
+
command(cmd: string, args?: Record<string, any>): Promise<any>;
|
|
114
|
+
sayTo(conversationId: string, sayable: Sayable): Promise<any>;
|
|
115
|
+
/** 当前登录者(self)payload(供 Message.mentionSelf 等做本机判定); 未就绪时 undefined。 */
|
|
116
|
+
selfContact?(): ContactPayload | undefined;
|
|
117
|
+
}
|
|
118
|
+
/** 会话 id 类型判定(R: 群 / S: 单聊 / 其它)。 */
|
|
119
|
+
export declare function isRoomId(conversationId?: string): boolean;
|
|
120
|
+
/** wire 事件里的字符串/数字消息类型 → MessageType。 */
|
|
121
|
+
export declare function toMessageType(typeStr?: string, typeRaw?: number): MessageType;
|
|
122
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* chatboty 自研类型(零外部框架依赖)。这些 payload 是实体类的数据底座,
|
|
3
|
+
* 由网关下发的 wire 事件/命令结果映射而来。
|
|
4
|
+
*/
|
|
5
|
+
/** 消息类型。 */
|
|
6
|
+
export var MessageType;
|
|
7
|
+
(function (MessageType) {
|
|
8
|
+
MessageType[MessageType["Unknown"] = 0] = "Unknown";
|
|
9
|
+
MessageType[MessageType["Text"] = 1] = "Text";
|
|
10
|
+
MessageType[MessageType["Image"] = 2] = "Image";
|
|
11
|
+
MessageType[MessageType["Audio"] = 3] = "Audio";
|
|
12
|
+
MessageType[MessageType["Video"] = 4] = "Video";
|
|
13
|
+
MessageType[MessageType["File"] = 5] = "File";
|
|
14
|
+
MessageType[MessageType["Url"] = 6] = "Url";
|
|
15
|
+
MessageType[MessageType["MiniProgram"] = 7] = "MiniProgram";
|
|
16
|
+
MessageType[MessageType["System"] = 8] = "System";
|
|
17
|
+
})(MessageType || (MessageType = {}));
|
|
18
|
+
/**
|
|
19
|
+
* 联系人类别。企微现实: 通讯录里都是"真人"(个人/同事/外部客户), 没有微信那种"公众号/服务号"构造,
|
|
20
|
+
* 故探针默认给 Individual。Official/Corporation 预留给未来能可靠区分"应用/机器人/企业主体"时使用。
|
|
21
|
+
*/
|
|
22
|
+
export var ContactType;
|
|
23
|
+
(function (ContactType) {
|
|
24
|
+
ContactType[ContactType["Unknown"] = 0] = "Unknown";
|
|
25
|
+
ContactType[ContactType["Individual"] = 1] = "Individual";
|
|
26
|
+
ContactType[ContactType["Official"] = 2] = "Official";
|
|
27
|
+
ContactType[ContactType["Corporation"] = 3] = "Corporation";
|
|
28
|
+
})(ContactType || (ContactType = {}));
|
|
29
|
+
/** 会话 id 类型判定(R: 群 / S: 单聊 / 其它)。 */
|
|
30
|
+
export function isRoomId(conversationId) {
|
|
31
|
+
return !!conversationId && conversationId.startsWith('R:');
|
|
32
|
+
}
|
|
33
|
+
/** wire 事件里的字符串/数字消息类型 → MessageType。 */
|
|
34
|
+
export function toMessageType(typeStr, typeRaw) {
|
|
35
|
+
switch ((typeStr || '').toLowerCase()) {
|
|
36
|
+
case 'text': return MessageType.Text;
|
|
37
|
+
case 'image': return MessageType.Image;
|
|
38
|
+
case 'image/file': return MessageType.Image;
|
|
39
|
+
case 'voice':
|
|
40
|
+
case 'audio': return MessageType.Audio;
|
|
41
|
+
case 'video': return MessageType.Video;
|
|
42
|
+
case 'file': return MessageType.File;
|
|
43
|
+
case 'url': return MessageType.Url;
|
|
44
|
+
case 'miniprogram': return MessageType.MiniProgram;
|
|
45
|
+
case 'sys':
|
|
46
|
+
case 'system': return MessageType.System;
|
|
47
|
+
default: return typeRaw ? MessageType.Unknown : MessageType.Unknown;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY;AACZ,MAAM,CAAN,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,6CAAI,CAAA;IACJ,+CAAK,CAAA;IACL,+CAAK,CAAA;IACL,+CAAK,CAAA;IACL,6CAAI,CAAA;IACJ,2CAAG,CAAA;IACH,2DAAW,CAAA;IACX,iDAAM,CAAA;AACR,CAAC,EAVW,WAAW,KAAX,WAAW,QAUtB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,mDAAW,CAAA;IACX,yDAAU,CAAA;IACV,qDAAQ,CAAA;IACR,2DAAW,CAAA;AACb,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AA+FD,qCAAqC;AACrC,MAAM,UAAU,QAAQ,CAAE,cAAuB;IAC/C,OAAO,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;AAC5D,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,aAAa,CAAE,OAAgB,EAAE,OAAgB;IAC/D,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAA;QACpC,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAA;QACtC,KAAK,YAAY,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAA;QAC3C,KAAK,OAAO,CAAC;QAAC,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAA;QACpD,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAA;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,CAAA;QACpC,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC,GAAG,CAAA;QAClC,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC,WAAW,CAAA;QAClD,KAAK,KAAK,CAAC;QAAC,KAAK,QAAQ,CAAC,CAAC,OAAO,WAAW,CAAC,MAAM,CAAA;QACpD,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAA;IACrE,CAAC;AACH,CAAC"}
|