wechaty-web-panel 1.6.112 → 1.6.113

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 (109) hide show
  1. package/dist/bot/chatgpt/index.js +235 -0
  2. package/dist/bot/coze/sdk/index.js +110 -0
  3. package/dist/bot/dify/sdk/index.js +461 -0
  4. package/dist/bot/dify/sdk/office.js +319 -0
  5. package/dist/bot/fastgpt/index.js +98 -0
  6. package/dist/bot/qanything/index.js +136 -0
  7. package/dist/botInstance/coze.js +167 -0
  8. package/dist/botInstance/cozev3.js +157 -0
  9. package/dist/botInstance/dify.js +160 -0
  10. package/dist/botInstance/fastgpt.js +130 -0
  11. package/dist/botInstance/gpt4v.js +95 -0
  12. package/dist/botInstance/officialOpenAi.js +186 -0
  13. package/dist/botInstance/qany.js +144 -0
  14. package/dist/botInstance/sdk/chatGPT4V.js +89 -0
  15. package/dist/botInstance/sdk/coze.js +200 -0
  16. package/dist/botInstance/sdk/difyClient.js +354 -0
  17. package/dist/botInstance/sdk/pTimeout.js +97 -0
  18. package/dist/botInstance/sdk/qanything.js +137 -0
  19. package/dist/botInstance/sdk/quick-lru.js +237 -0
  20. package/dist/common/hook.js +66 -0
  21. package/dist/common/index.js +513 -0
  22. package/dist/common/multiReply.js +158 -0
  23. package/dist/common/reply.js +23 -0
  24. package/dist/const/puppet-type.js +71 -0
  25. package/dist/db/aiDb.js +27 -0
  26. package/dist/db/aichatDb.js +84 -0
  27. package/dist/db/chatHistory.js +137 -0
  28. package/dist/db/configDb.js +97 -0
  29. package/dist/db/global.js +62 -0
  30. package/dist/db/gptConfig.js +85 -0
  31. package/dist/db/nedb.js +88 -0
  32. package/dist/db/puppetDb.js +58 -0
  33. package/dist/db/roomDb.js +83 -0
  34. package/dist/db/rssConfig.js +82 -0
  35. package/dist/db/rssHistory.js +88 -0
  36. package/dist/db/userDb.js +27 -0
  37. package/dist/handlers/on-callback-message.js +183 -0
  38. package/dist/handlers/on-error.js +5 -0
  39. package/dist/handlers/on-friend.js +62 -0
  40. package/dist/handlers/on-heartbeat.js +20 -0
  41. package/dist/handlers/on-login.js +58 -0
  42. package/dist/handlers/on-logout.js +17 -0
  43. package/dist/handlers/on-message.js +644 -0
  44. package/dist/handlers/on-ready.js +36 -0
  45. package/dist/handlers/on-record-message.js +56 -0
  46. package/dist/handlers/on-roomjoin.js +42 -0
  47. package/dist/handlers/on-roomleave.js +12 -0
  48. package/dist/handlers/on-roomtopic.js +16 -0
  49. package/dist/handlers/on-scan.js +64 -0
  50. package/dist/handlers/on-verifycode.js +42 -0
  51. package/dist/index.js +81 -69306
  52. package/dist/lib/contentCensor.js +23 -0
  53. package/dist/lib/index.js +562 -0
  54. package/dist/lib/oss.js +43 -0
  55. package/dist/lib/s3oss.js +33 -0
  56. package/dist/mcp/mcp-server.js +26 -0
  57. package/dist/mcp/src/config/database.js +51 -0
  58. package/dist/mcp/src/index.js +238 -0
  59. package/dist/mcp/src/mcp/schemas.js +178 -0
  60. package/dist/mcp/src/mcp/server.js +421 -0
  61. package/dist/mcp/src/mcp/streamable-server.js +690 -0
  62. package/dist/mcp/src/models/ChatMessage.js +151 -0
  63. package/dist/mcp/src/models/Friend.js +64 -0
  64. package/dist/mcp/src/models/Group.js +55 -0
  65. package/dist/mcp/src/models/GroupMember.js +67 -0
  66. package/dist/mcp/src/models/index.js +27 -0
  67. package/dist/mcp/src/scripts/migrate.js +21 -0
  68. package/dist/mcp/src/services/ChatDataService.js +284 -0
  69. package/dist/mcp/src/services/McpService.js +521 -0
  70. package/dist/mcp/src/services/McpTools.js +504 -0
  71. package/dist/mcp/streamable-examples.js +283 -0
  72. package/dist/mcp/streamable-server.js +79 -0
  73. package/dist/mcp/test-mcp.js +64 -0
  74. package/dist/mcp/test-streamable-server.js +86 -0
  75. package/dist/package-json.js +89 -0
  76. package/dist/proxy/aibotk.js +829 -0
  77. package/dist/proxy/api.js +431 -0
  78. package/dist/proxy/apib.js +587 -0
  79. package/dist/proxy/bot/chatgpt.js +38 -0
  80. package/dist/proxy/bot/coze.js +38 -0
  81. package/dist/proxy/bot/cozev3.js +38 -0
  82. package/dist/proxy/bot/dify.js +38 -0
  83. package/dist/proxy/bot/dispatch.js +81 -0
  84. package/dist/proxy/bot/fastgpt.js +27 -0
  85. package/dist/proxy/bot/qany.js +27 -0
  86. package/dist/proxy/config.js +14 -0
  87. package/dist/proxy/cozeAi.js +60 -0
  88. package/dist/proxy/cozeV3Ai.js +60 -0
  89. package/dist/proxy/difyAi.js +58 -0
  90. package/dist/proxy/fastgpt.js +55 -0
  91. package/dist/proxy/mqtt.js +275 -0
  92. package/dist/proxy/multimodal.js +122 -0
  93. package/dist/proxy/openAi.js +63 -0
  94. package/dist/proxy/outapi.js +62 -0
  95. package/dist/proxy/qAnyAi.js +57 -0
  96. package/dist/proxy/superagent.js +200 -0
  97. package/dist/proxy/tencent-open.js +255 -0
  98. package/dist/service/event-dispatch-service.js +309 -0
  99. package/dist/service/gpt4vService.js +45 -0
  100. package/dist/service/msg-filter-service.js +121 -0
  101. package/dist/service/msg-filters.js +645 -0
  102. package/dist/service/room-async-service.js +455 -0
  103. package/dist/task/index.js +535 -0
  104. package/dist/task/rss.js +174 -0
  105. package/package.json +2 -2
  106. package/src/package-json.js +2 -2
  107. package/tsconfig.json +3 -12
  108. package/dist/index.d.ts +0 -9
  109. package/tsconfig.cjs.json +0 -12
@@ -0,0 +1,83 @@
1
+ import nedb from './nedb.js';
2
+ import path from "path";
3
+ import os from "os";
4
+ import globalConfig from "./global.js";
5
+ import fs from "fs";
6
+ let rdb = null;
7
+ function initDb() {
8
+ if (!rdb) {
9
+ const baseDir = path.join(os.homedir(), path.sep, ".wechaty", "wechaty-panel-cache", globalConfig.getApikey(), path.sep);
10
+ const dbpath = baseDir + "room.db";
11
+ if (fs.existsSync(dbpath)) {
12
+ // fs.unlinkSync(dbpath);
13
+ }
14
+ rdb = nedb(dbpath);
15
+ }
16
+ }
17
+ /**
18
+ * 记录群聊天记录 记录格式
19
+ * { roomName: '群名', roomId: '', content: '内容', contact: '用户名', wxid: '', time: '时间' }
20
+ * @param info
21
+ * @returns {Promise<unknown>}
22
+ */
23
+ export async function addRoomRecord(info) {
24
+ try {
25
+ initDb();
26
+ let doc = await rdb.insert(info);
27
+ return doc;
28
+ }
29
+ catch (error) {
30
+ console.log('插入数据错误', error);
31
+ }
32
+ }
33
+ /**
34
+ * 获取指定群的聊天记录
35
+ * @param room
36
+ * @returns {Promise<*>}
37
+ */
38
+ export async function getRoomRecord(roomName) {
39
+ try {
40
+ let search = await rdb.find({ roomName });
41
+ return search;
42
+ }
43
+ catch (error) {
44
+ console.log('查询数据错误', error);
45
+ }
46
+ }
47
+ /**
48
+ * 清楚指定群的聊天记录
49
+ * @param roomName
50
+ * @returns {Promise<void>}
51
+ */
52
+ export async function removeRecord(roomName) {
53
+ try {
54
+ let search = await rdb.remove({ roomName }, { multi: true });
55
+ return search;
56
+ }
57
+ catch (e) {
58
+ console.log("error", e);
59
+ }
60
+ }
61
+ /**
62
+ * 获取指定群聊的所有聊天内容
63
+ * @param rooName
64
+ * @param day 取的天数
65
+ * @returns {Promise<*>}
66
+ */
67
+ export async function getRoomRecordContent(rooName, day) {
68
+ try {
69
+ let list = await getRoomRecord(rooName);
70
+ list = list.filter(item => {
71
+ return item.time >= new Date().getTime() - day * 24 * 60 * 60 * 1000;
72
+ });
73
+ let word = '';
74
+ list.forEach((item) => {
75
+ word = word + item.content;
76
+ });
77
+ return word;
78
+ }
79
+ catch (e) {
80
+ console.log("error", e);
81
+ }
82
+ }
83
+ //# sourceMappingURL=roomDb.js.map
@@ -0,0 +1,82 @@
1
+ import nedb from "./nedb.js";
2
+ import path from "path";
3
+ import os from "os";
4
+ import fs from 'fs';
5
+ import globalConfig from './global.js';
6
+ let rdb = null;
7
+ function initDb() {
8
+ if (!rdb) {
9
+ const baseDir = path.join(os.homedir(), path.sep, ".wechaty", "wechaty-panel-cache", globalConfig.getApikey(), path.sep);
10
+ const dbpath = baseDir + "rssconfig.db";
11
+ if (fs.existsSync(dbpath)) {
12
+ fs.unlinkSync(dbpath);
13
+ }
14
+ rdb = nedb(dbpath);
15
+ }
16
+ }
17
+ /**
18
+ * 存储rss配置
19
+ * { contactName: '', contactId: '', roomName: '', roomId: '', input: '输入的问题', output: '输出内容', time: '时间' }
20
+ * @param info
21
+ * @returns {Promise<unknown>}
22
+ */
23
+ export async function addRssConfig(info) {
24
+ try {
25
+ let doc = await rdb.insert(info);
26
+ return doc;
27
+ }
28
+ catch (error) {
29
+ console.log("插入数据错误", error);
30
+ }
31
+ }
32
+ /**
33
+ * 获取指定群的聊天记录
34
+ * @param room
35
+ * @returns {Promise<*>}
36
+ */
37
+ export async function getAllRssConfig() {
38
+ try {
39
+ let search = await rdb.find({});
40
+ return search;
41
+ }
42
+ catch (error) {
43
+ console.log("查询数据错误", error);
44
+ }
45
+ }
46
+ export async function getRssConfigById(id) {
47
+ try {
48
+ let search = await rdb.find({ id });
49
+ return search[0];
50
+ }
51
+ catch (error) {
52
+ console.log("查询数据错误", error);
53
+ }
54
+ }
55
+ export async function updateAllRssConfig(infos) {
56
+ try {
57
+ initDb();
58
+ for (const item of infos) {
59
+ await rdb.update({ _id: item._id }, item, { upsert: true });
60
+ }
61
+ }
62
+ catch (error) {
63
+ console.log('更新失败', error);
64
+ }
65
+ }
66
+ export async function updateOneRssConfig(id, info) {
67
+ try {
68
+ let search = await rdb.update({ id }, { ...info });
69
+ return search;
70
+ }
71
+ catch (error) {
72
+ console.log("查询数据错误", error);
73
+ }
74
+ }
75
+ export function resetRssData() {
76
+ const baseDir = path.join(os.homedir(), path.sep, ".wechaty", "wechaty-panel-cache", globalConfig.getApikey(), path.sep);
77
+ const dbpath = baseDir + "rssconfig.db";
78
+ if (fs.existsSync(dbpath)) {
79
+ fs.unlinkSync(dbpath);
80
+ }
81
+ }
82
+ //# sourceMappingURL=rssConfig.js.map
@@ -0,0 +1,88 @@
1
+ import nedb from './nedb.js';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import globalConfig from './global.js';
5
+ let rdb = null;
6
+ function initDb() {
7
+ if (!rdb) {
8
+ const baseDir = path.join(os.homedir(), path.sep, ".wechaty", "wechaty-panel-cache", globalConfig.getApikey(), path.sep);
9
+ const dbpath = baseDir + "rssHistory.db";
10
+ console.log('rss历史推送路径', dbpath);
11
+ // if (fs.existsSync(dbpath)) {
12
+ // fs.unlinkSync(dbpath);
13
+ // }
14
+ rdb = nedb(dbpath);
15
+ }
16
+ }
17
+ /**
18
+ * 记录rss 最后一条历史记录
19
+ * { id: '', lastContent: '', lastTime: '' }
20
+ * @param info
21
+ * @returns {Promise<unknown>}
22
+ */
23
+ export async function addRssHistory(info) {
24
+ try {
25
+ initDb();
26
+ const hasExit = await rdb.find({ _id: info.id });
27
+ if (hasExit) {
28
+ return await rdb.update({ _id: info.id }, info, { upsert: true });
29
+ }
30
+ else {
31
+ return await rdb.insert(info);
32
+ }
33
+ }
34
+ catch (error) {
35
+ console.log("插入数据错误", error);
36
+ }
37
+ }
38
+ /**
39
+ * 获取指定群的聊天记录
40
+ * @param room
41
+ * @returns {Promise<*>}
42
+ */
43
+ export async function getRssHistory(query) {
44
+ try {
45
+ initDb();
46
+ let search = await rdb.find(query);
47
+ return search;
48
+ }
49
+ catch (error) {
50
+ console.log("查询数据错误", error);
51
+ }
52
+ }
53
+ export async function getRssHistoryById(id) {
54
+ try {
55
+ initDb();
56
+ let search = await rdb.find({ id });
57
+ return search[0];
58
+ }
59
+ catch (error) {
60
+ console.log("查询数据错误", error);
61
+ }
62
+ }
63
+ export async function updateRssHistory(id, info) {
64
+ try {
65
+ initDb();
66
+ let search = await rdb.update({ id }, { ...info });
67
+ return search;
68
+ }
69
+ catch (error) {
70
+ console.log("更新数据错误", error);
71
+ }
72
+ }
73
+ /**
74
+ * 清楚指定群的聊天记录
75
+ * @param roomName
76
+ * @returns {Promise<void>}
77
+ */
78
+ export async function removeRssRecord(query) {
79
+ try {
80
+ initDb();
81
+ let search = await rdb.remove(query, { multi: true });
82
+ return search;
83
+ }
84
+ catch (e) {
85
+ console.log("error", e);
86
+ }
87
+ }
88
+ //# sourceMappingURL=rssHistory.js.map
@@ -0,0 +1,27 @@
1
+ import nedb from './nedb.js';
2
+ const db = nedb();
3
+ async function addUser(info) {
4
+ try {
5
+ let doc = await db.insert(info);
6
+ return doc;
7
+ }
8
+ catch (error) {
9
+ console.log('插入数据错误', error);
10
+ }
11
+ }
12
+ async function getUser() {
13
+ try {
14
+ let search = await db.find({});
15
+ return search[0];
16
+ }
17
+ catch (error) {
18
+ console.log('查询数据错误', error);
19
+ }
20
+ }
21
+ export { addUser };
22
+ export { getUser };
23
+ export default {
24
+ addUser,
25
+ getUser,
26
+ };
27
+ //# sourceMappingURL=userDb.js.map
@@ -0,0 +1,183 @@
1
+ import { allConfig } from '../db/configDb.js';
2
+ import { uploadOssFile } from "../lib/oss.js";
3
+ import dayjs from "dayjs";
4
+ import { getPuppetInfo } from "../db/puppetDb.js";
5
+ import path from "path";
6
+ import axios from "axios";
7
+ async function onRecordMessage(msg) {
8
+ try {
9
+ const puppetInfo = await getPuppetInfo();
10
+ const config = await allConfig();
11
+ const conversationRecord = config?.conversationRecord || {};
12
+ const { role } = config && config.userInfo || { role: 'default' };
13
+ if (role !== 'vip' || !conversationRecord?.open)
14
+ return;
15
+ const contact = msg.talker(); // 发消息人
16
+ const contactName = contact && contact.name() || ''; // 发消息人昵称
17
+ const contactAlias = contact && await contact.alias();
18
+ const room = msg.room(); // 是否为群消息
19
+ const roomName = room ? await room.topic() : '';
20
+ const msgSelf = msg.self(); // 是否自己发给自己的消息
21
+ const type = msg.type();
22
+ const timestamp = msg.timestamp || dayjs().unix();
23
+ const robotInfo = this.currentUser;
24
+ let isOfficial = null;
25
+ try {
26
+ isOfficial = contact && contact.type() === this.Contact.Type.Official;
27
+ }
28
+ catch (e) {
29
+ console.log('check isOfficial error, don`t worry, no effect :', e);
30
+ isOfficial = false;
31
+ }
32
+ const userWeixin = contact && contact.weixin() || '';
33
+ if (isOfficial)
34
+ return;
35
+ console.log('msg', msg);
36
+ const baseMsg = {
37
+ conversionId: room ? room.id : contact.id,
38
+ conversionName: room ? roomName : contactName,
39
+ isRoom: !!room,
40
+ chatName: contactName,
41
+ chatId: contact.id,
42
+ chatAlias: contactAlias,
43
+ chatUserWeixin: userWeixin,
44
+ isMyself: !!msgSelf,
45
+ time: timestamp.length > 10 ? parseInt(timestamp / 1000) : timestamp
46
+ };
47
+ switch (type) {
48
+ case this.Message.Type.Channel:
49
+ baseMsg.type = '视频号';
50
+ const channelInfo = await msg.toChannel();
51
+ baseMsg.mediaInfo = {
52
+ nickname: channelInfo.nickname(),
53
+ coverUrl: channelInfo.coverUrl(),
54
+ avatar: channelInfo.avatar(),
55
+ desc: channelInfo.desc(),
56
+ url: channelInfo.url(),
57
+ objectId: channelInfo.objectId(),
58
+ objectNonceId: channelInfo.objectNonceId()
59
+ };
60
+ break;
61
+ case this.Message.Type.Contact:
62
+ baseMsg.type = '名片';
63
+ const contactInfo = await msg.toContact();
64
+ baseMsg.mediaInfo = {
65
+ name: contactInfo.name(),
66
+ avatar: contactInfo.payload.avatar || '',
67
+ wxid: contactInfo.id,
68
+ };
69
+ break;
70
+ case this.Message.Type.RedEnvelope:
71
+ baseMsg.type = '红包';
72
+ baseMsg.content = "收到红包";
73
+ break;
74
+ case this.Message.Type.Emoticon:
75
+ baseMsg.type = '自定义表情';
76
+ const emoticonFileBox = await msg.toFileBox();
77
+ const emoticonBuffer = await emoticonFileBox.toBuffer();
78
+ const emoticonUrl = await uploadOssFile(`${conversationRecord?.ossConfig?.custom_path || ''}${dayjs().valueOf()}_${emoticonFileBox.name}`, emoticonBuffer);
79
+ baseMsg.url = emoticonUrl;
80
+ break;
81
+ case this.Message.Type.Text:
82
+ baseMsg.type = '文字';
83
+ baseMsg.content = msg.text().trim();
84
+ break;
85
+ case this.Message.Type.Url:
86
+ const urlLink = await msg.toUrlLink();
87
+ baseMsg.type = 'h5链接';
88
+ baseMsg.mediaInfo = {
89
+ url: urlLink.url(),
90
+ description: urlLink.description(),
91
+ imageUrl: urlLink.thumbnailUrl(),
92
+ title: urlLink.title(),
93
+ };
94
+ break;
95
+ case this.Message.Type.MiniProgram:
96
+ const miniProgram = await msg.toMiniProgram();
97
+ const appid = puppetInfo.puppetType === 'PuppetService' ? miniProgram.username() : miniProgram.appid().replaceAll('@app', '');
98
+ const username = puppetInfo.puppetType === 'PuppetService' ? miniProgram.appid().replaceAll('@app', '') : miniProgram.username();
99
+ baseMsg.type = '小程序';
100
+ baseMsg.mediaInfo = {
101
+ url: decodeURIComponent(miniProgram.pagePath()),
102
+ appid,
103
+ username,
104
+ description: miniProgram.description(),
105
+ imageUrl: miniProgram.thumbnailUrl(),
106
+ title: miniProgram.title(),
107
+ };
108
+ break;
109
+ case this.Message.Type.Attachment:
110
+ case this.Message.Type.Image:
111
+ case this.Message.Type.Video:
112
+ const attachFileBox = await msg.toFileBox();
113
+ const fileExtname = path.extname(attachFileBox.name);
114
+ const isImage = fileExtname.includes('.png') || fileExtname.includes('.jpg') || fileExtname.includes('.jpeg') || fileExtname.includes('.gif');
115
+ baseMsg.type = isImage ? '图片' : '文件';
116
+ const buffer = await attachFileBox.toBuffer();
117
+ const url = await uploadOssFile(`${conversationRecord?.ossConfig?.custom_path || ''}${dayjs().valueOf()}_${attachFileBox.name}`, buffer);
118
+ baseMsg.url = url;
119
+ break;
120
+ case this.Message.Type.Audio:
121
+ baseMsg.type = '语音';
122
+ const audioFileBox = await msg.toFileBox();
123
+ const audioBuffer = await audioFileBox.toBuffer();
124
+ const audioUrl = await uploadOssFile(`${conversationRecord?.ossConfig?.custom_path || ''}${dayjs().valueOf()}_${audioFileBox.name}`, audioBuffer);
125
+ baseMsg.url = audioUrl;
126
+ break;
127
+ default:
128
+ break;
129
+ }
130
+ console.log('baseMsg', baseMsg);
131
+ sendMessage(baseMsg, conversationRecord, robotInfo);
132
+ }
133
+ catch (e) {
134
+ console.log('记录消息失败', e);
135
+ }
136
+ }
137
+ function sendMessage(msgInfo, recordConfig, robotInfo) {
138
+ const blackKey = ['conversationId', 'conversionName', 'isRoom', 'isRobot', 'chatName', 'chatId', 'chatAlias', 'time', 'type', 'url', 'mediaInfo', 'content', 'isMyself'];
139
+ const baseData = {
140
+ ...msgInfo
141
+ };
142
+ recordConfig.moreData &&
143
+ recordConfig.moreData.length &&
144
+ recordConfig.moreData.forEach((mItem) => {
145
+ if (!blackKey.includes(mItem.key) && mItem.key && mItem.value) {
146
+ baseData[mItem.key] = mItem.value;
147
+ }
148
+ });
149
+ const timeout = recordConfig.timeout || 180;
150
+ const header = {
151
+ 'Content-Type': 'application/json'
152
+ };
153
+ recordConfig.header &&
154
+ recordConfig.header.length &&
155
+ recordConfig.header.forEach((mItem) => {
156
+ if (mItem.key && mItem.value) {
157
+ header[mItem.key] = mItem.value;
158
+ }
159
+ });
160
+ const config = {
161
+ url: recordConfig.customUrl,
162
+ method: 'POST',
163
+ timeout: timeout * 1000,
164
+ headers: header,
165
+ data: {
166
+ robotInfo: {
167
+ wxid: robotInfo.id,
168
+ name: robotInfo.name(),
169
+ },
170
+ message: baseData
171
+ }
172
+ };
173
+ if (recordConfig?.debug) {
174
+ console.log('消息回调请求参数', config);
175
+ }
176
+ axios.request(config).then((res) => {
177
+ console.log('消息发送成功', res.data);
178
+ }).catch((err) => {
179
+ console.log('消息发送失败', err);
180
+ });
181
+ }
182
+ export default onRecordMessage;
183
+ //# sourceMappingURL=on-callback-message.js.map
@@ -0,0 +1,5 @@
1
+ async function onError(error) {
2
+ console.log('捕捉到🐛,如果还能正常运行,可以忽略', error);
3
+ }
4
+ export default onError;
5
+ //# sourceMappingURL=on-error.js.map
@@ -0,0 +1,62 @@
1
+ import { delay } from '../lib/index.js';
2
+ import { allConfig } from '../db/configDb.js';
3
+ import { contactSay } from "../common/index.js";
4
+ /**
5
+ * 好友添加
6
+ */
7
+ async function onFriend(friendship) {
8
+ try {
9
+ const config = await allConfig();
10
+ let logMsg, hello;
11
+ let name = friendship.contact().name();
12
+ hello = friendship.hello();
13
+ logMsg = name + ',发送了好友请求';
14
+ console.log(logMsg);
15
+ if (config && config.autoAcceptFriend) {
16
+ console.log('friendship', friendship);
17
+ switch (friendship.type()) {
18
+ case 2:
19
+ if (config.acceptFriendKeyWords.length === 0) {
20
+ console.log('无认证关键词,10秒后将会自动通过好友请求');
21
+ await delay(10000);
22
+ await friendship.accept();
23
+ }
24
+ else if (config.acceptFriendKeyWords.length > 0 && config.acceptFriendKeyWords.find(item => hello.includes(item))) {
25
+ console.log(`触发关键词${hello},10秒后自动通过好友请求`);
26
+ await delay(10000);
27
+ await friendship.accept();
28
+ }
29
+ else {
30
+ console.log('未触发任何关键词,好友自动添加失败');
31
+ }
32
+ break;
33
+ case 1:
34
+ logMsg = '已确认添加好友:' + name;
35
+ console.log(`新添加好友事件:${name},默认回复`);
36
+ if (config.newFriendReplys && config.newFriendReplys.length) {
37
+ for (let reply of config.newFriendReplys) {
38
+ await delay(1000);
39
+ await contactSay.call(this, friendship.contact(), reply);
40
+ }
41
+ }
42
+ break;
43
+ case 0:
44
+ logMsg = '未知错误' + name;
45
+ console.log(logMsg);
46
+ break;
47
+ case 3:
48
+ logMsg = '开启了验证' + name;
49
+ console.log(logMsg);
50
+ break;
51
+ }
52
+ }
53
+ else {
54
+ console.log('未开启自动添加好友功能,忽略好友添加');
55
+ }
56
+ }
57
+ catch (e) {
58
+ console.log('添加好友出错:', e);
59
+ }
60
+ }
61
+ export default onFriend;
62
+ //# sourceMappingURL=on-friend.js.map
@@ -0,0 +1,20 @@
1
+ import { sendHeartBeat } from "../proxy/aibotk.js";
2
+ import { throttle } from '../lib/index.js';
3
+ async function onHeartBeat(str) {
4
+ try {
5
+ if (!str) {
6
+ await sendHeartBeat('dead');
7
+ }
8
+ else if (str.type === 'scan') {
9
+ await sendHeartBeat('scan');
10
+ }
11
+ else if (str.includes('heartbeat')) {
12
+ throttle(sendHeartBeat('live'), 30000);
13
+ }
14
+ }
15
+ catch (e) {
16
+ console.log('心跳更新失败', e);
17
+ }
18
+ }
19
+ export default onHeartBeat;
20
+ //# sourceMappingURL=on-heartbeat.js.map
@@ -0,0 +1,58 @@
1
+ import { getConfig, sendRobotInfo, putqn, setQrCode, updatePanelVersion, getPanelVersion, clearVerifyCode, clearVerifyInfo } from '../proxy/aibotk.js';
2
+ import { addUser } from '../db/userDb.js';
3
+ import { initMqtt } from '../proxy/mqtt.js';
4
+ import { allConfig } from '../db/configDb.js';
5
+ import { updatePuppetConfig } from "../db/puppetDb.js";
6
+ import { PUPPET_MAP } from '../const/puppet-type.js';
7
+ import { packageJson } from '../package-json.js';
8
+ /**
9
+ * 登录成功监听事件
10
+ * @param {*} user 登录用户
11
+ */
12
+ async function onLogin(user) {
13
+ try {
14
+ const lastVersion = await getPanelVersion();
15
+ console.log(`
16
+ ==========================================================
17
+ 贴心AI助理${user}登录了
18
+ 你正在使用的是: ${PUPPET_MAP[this.puppet.constructor.name]}!
19
+ 最新插件版本: ${lastVersion}
20
+ 你的插件版本: ${packageJson.version}
21
+ ${lastVersion !== packageJson.version ? '请及时更新插件,才能体验最新功能' : ''}
22
+ ==========================================================
23
+ `);
24
+ await updatePuppetConfig({ puppetType: this.puppet.constructor.name });
25
+ await updatePanelVersion();
26
+ await setQrCode('', 4);
27
+ await getConfig(); // 获取配置文件
28
+ void clearVerifyCode();
29
+ void clearVerifyInfo();
30
+ const config = await allConfig();
31
+ const { userId } = config && config.userInfo;
32
+ const payload = user.payload || user._payload;
33
+ const userInfo = {
34
+ ...payload,
35
+ robotId: payload.wxid || payload.id || user.id,
36
+ };
37
+ await addUser(userInfo); // 全局存储登录用户信息
38
+ let file = '';
39
+ let avatarUrl = '';
40
+ if (payload.avatar) {
41
+ file = await user.avatar();
42
+ if (file) {
43
+ const base = await file.toBase64();
44
+ avatarUrl = base ? await putqn(base, userInfo.robotId) : '';
45
+ }
46
+ else {
47
+ console.log('头像未获取到,不影响项目正常使用');
48
+ }
49
+ }
50
+ await sendRobotInfo(avatarUrl, user.name(), userInfo.robotId); // 更新用户头像
51
+ await initMqtt(this); // 初始化mqtt任务
52
+ }
53
+ catch (e) {
54
+ console.log('登录后初始化失败', e);
55
+ }
56
+ }
57
+ export default onLogin;
58
+ //# sourceMappingURL=on-login.js.map
@@ -0,0 +1,17 @@
1
+ import { setQrCode } from '../proxy/aibotk.js';
2
+ import { closeMqtt } from '../proxy/mqtt.js';
3
+ /**
4
+ * 登出事件
5
+ */
6
+ async function onLogout(user) {
7
+ try {
8
+ await setQrCode('qrcode', '6');
9
+ console.log(`用户${user}已登出`);
10
+ closeMqtt();
11
+ }
12
+ catch (e) {
13
+ console.log('登出报错', e);
14
+ }
15
+ }
16
+ export default onLogout;
17
+ //# sourceMappingURL=on-logout.js.map