wechaty-web-panel 1.5.7 → 1.6.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/CHANGELOG.md +8 -0
- package/dist/cjs/src/common/command.d.ts +14 -0
- package/dist/cjs/src/common/command.js +58 -0
- package/dist/cjs/src/common/index.d.ts +2 -2
- package/dist/cjs/src/common/index.js +13 -5
- package/dist/cjs/src/common/reply.d.ts +1 -1
- package/dist/cjs/src/common/reply.js +2 -2
- package/dist/cjs/src/db/aichatDb.d.ts +27 -0
- package/dist/cjs/src/db/aichatDb.js +83 -0
- package/dist/cjs/src/db/gptConfig.d.ts +17 -0
- package/dist/cjs/src/db/gptConfig.js +75 -0
- package/dist/cjs/src/handlers/on-error.js +1 -11
- package/dist/cjs/src/handlers/on-login.js +0 -2
- package/dist/cjs/src/handlers/on-message.js +3 -1
- package/dist/cjs/src/handlers/on-ready.js +3 -0
- package/dist/cjs/src/handlers/on-scan.js +11 -1
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/index.js +2 -1
- package/dist/cjs/src/lib/contentCensor.d.ts +8 -0
- package/dist/cjs/src/lib/contentCensor.js +31 -0
- package/dist/cjs/src/lib/officialOpenAi.d.ts +67 -0
- package/dist/cjs/src/lib/officialOpenAi.js +167 -0
- package/dist/cjs/src/lib/unOfficialOpenAi.d.ts +43 -0
- package/dist/cjs/src/lib/unOfficialOpenAi.js +127 -0
- package/dist/cjs/src/package-json.d.ts +4 -4
- package/dist/cjs/src/package-json.js +9 -9
- package/dist/cjs/src/proxy/aibotk.d.ts +18 -7
- package/dist/cjs/src/proxy/aibotk.js +94 -24
- package/dist/cjs/src/proxy/bot/chatgpt-web.d.ts +12 -0
- package/dist/cjs/src/proxy/bot/chatgpt-web.js +36 -0
- package/dist/cjs/src/proxy/bot/chatgpt.d.ts +13 -0
- package/dist/cjs/src/proxy/bot/chatgpt.js +36 -0
- package/dist/cjs/src/proxy/bot/dispatch.d.ts +7 -0
- package/dist/cjs/src/proxy/bot/dispatch.js +46 -0
- package/dist/cjs/src/proxy/mqtt.js +10 -0
- package/dist/cjs/src/proxy/openAi.d.ts +3 -15
- package/dist/cjs/src/proxy/openAi.js +32 -119
- package/dist/cjs/src/proxy/openAiHook.d.ts +2 -13
- package/dist/cjs/src/proxy/openAiHook.js +30 -94
- package/dist/cjs/src/proxy/superagent.js +2 -2
- package/dist/cjs/src/service/event-dispatch-service.d.ts +1 -1
- package/dist/cjs/src/service/event-dispatch-service.js +4 -4
- package/dist/cjs/src/service/msg-filter-service.d.ts +1 -1
- package/dist/cjs/src/service/msg-filter-service.js +9 -4
- package/dist/cjs/src/service/msg-filters.d.ts +12 -1
- package/dist/cjs/src/service/msg-filters.js +66 -8
- package/dist/cjs/src/task/index.js +4 -4
- package/dist/esm/src/common/command.d.ts +14 -0
- package/dist/esm/src/common/command.js +58 -0
- package/dist/esm/src/common/index.d.ts +2 -2
- package/dist/esm/src/common/index.js +13 -5
- package/dist/esm/src/common/reply.d.ts +1 -1
- package/dist/esm/src/common/reply.js +2 -2
- package/dist/esm/src/db/aichatDb.d.ts +27 -0
- package/dist/esm/src/db/aichatDb.js +73 -0
- package/dist/esm/src/db/gptConfig.d.ts +17 -0
- package/dist/esm/src/db/gptConfig.js +64 -0
- package/dist/esm/src/handlers/on-error.js +1 -11
- package/dist/esm/src/handlers/on-login.js +1 -3
- package/dist/esm/src/handlers/on-message.js +3 -1
- package/dist/esm/src/handlers/on-ready.js +3 -0
- package/dist/esm/src/handlers/on-scan.js +11 -1
- package/dist/esm/src/index.d.ts +1 -0
- package/dist/esm/src/index.js +2 -1
- package/dist/esm/src/lib/contentCensor.d.ts +8 -0
- package/dist/esm/src/lib/contentCensor.js +24 -0
- package/dist/esm/src/lib/officialOpenAi.d.ts +67 -0
- package/dist/esm/src/lib/officialOpenAi.js +162 -0
- package/dist/esm/src/lib/unOfficialOpenAi.d.ts +43 -0
- package/dist/esm/src/lib/unOfficialOpenAi.js +122 -0
- package/dist/esm/src/package-json.d.ts +4 -4
- package/dist/esm/src/package-json.js +9 -9
- package/dist/esm/src/proxy/aibotk.d.ts +18 -7
- package/dist/esm/src/proxy/aibotk.js +92 -23
- package/dist/esm/src/proxy/bot/chatgpt-web.d.ts +12 -0
- package/dist/esm/src/proxy/bot/chatgpt-web.js +27 -0
- package/dist/esm/src/proxy/bot/chatgpt.d.ts +13 -0
- package/dist/esm/src/proxy/bot/chatgpt.js +27 -0
- package/dist/esm/src/proxy/bot/dispatch.d.ts +7 -0
- package/dist/esm/src/proxy/bot/dispatch.js +42 -0
- package/dist/esm/src/proxy/mqtt.js +11 -1
- package/dist/esm/src/proxy/openAi.d.ts +3 -15
- package/dist/esm/src/proxy/openAi.js +29 -116
- package/dist/esm/src/proxy/openAiHook.d.ts +2 -13
- package/dist/esm/src/proxy/openAiHook.js +27 -90
- package/dist/esm/src/proxy/superagent.js +2 -2
- package/dist/esm/src/service/event-dispatch-service.d.ts +1 -1
- package/dist/esm/src/service/event-dispatch-service.js +8 -8
- package/dist/esm/src/service/msg-filter-service.d.ts +1 -1
- package/dist/esm/src/service/msg-filter-service.js +9 -4
- package/dist/esm/src/service/msg-filters.d.ts +12 -1
- package/dist/esm/src/service/msg-filters.js +65 -7
- package/dist/esm/src/task/index.js +4 -4
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
## 更新日志
|
|
2
2
|
|
|
3
|
+
### V1.6.0(2023-04-22)
|
|
4
|
+
1、添加chatgpt自定义配置,支持自定义模型,自定义token,自定义代理,不同群组使用不同token,定义不同角色
|
|
5
|
+
2、添加角色预设
|
|
6
|
+
|
|
7
|
+
### V1.5.8(2023-04-07)
|
|
8
|
+
1、去除报错上报,防止无限请求
|
|
9
|
+
2、限制二维码推送次数超过50次后需要重启服务才能在平台扫码
|
|
10
|
+
|
|
3
11
|
### V1.5.7(2023-04-06)
|
|
4
12
|
1、去除only esm的包,解决chatgpt中文回复会中断问题
|
|
5
13
|
2、robotId获取问题修复
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare class Command {
|
|
2
|
+
constructor(name: any, handler: any);
|
|
3
|
+
name: any;
|
|
4
|
+
handler: any;
|
|
5
|
+
}
|
|
6
|
+
declare class CommandManager {
|
|
7
|
+
commands: Map<any, any>;
|
|
8
|
+
register(command: any): void;
|
|
9
|
+
execute(wxid: any, name: any, args: any): Promise<any>;
|
|
10
|
+
getDb(wxid: any): any;
|
|
11
|
+
dbs: Map<any, any> | undefined;
|
|
12
|
+
}
|
|
13
|
+
declare const manager: CommandManager;
|
|
14
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
class Command {
|
|
3
|
+
constructor(name, handler) {
|
|
4
|
+
this.name = name;
|
|
5
|
+
this.handler = handler;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
class CommandManager {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.commands = new Map();
|
|
11
|
+
}
|
|
12
|
+
register(command) {
|
|
13
|
+
this.commands.set(command.name, command);
|
|
14
|
+
}
|
|
15
|
+
async execute(wxid, name, args) {
|
|
16
|
+
const db = this.getDb(wxid);
|
|
17
|
+
const command = this.commands.get(name);
|
|
18
|
+
if (command) {
|
|
19
|
+
return await command.handler(args, db);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(`Unknown command: ${name}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getDb(wxid) {
|
|
26
|
+
if (!this.dbs) {
|
|
27
|
+
this.dbs = new Map();
|
|
28
|
+
}
|
|
29
|
+
if (!this.dbs.has(wxid)) {
|
|
30
|
+
const db = new Nedb({ filename: `path/to/db/${wxid}.db`, autoload: true });
|
|
31
|
+
this.dbs.set(wxid, db);
|
|
32
|
+
}
|
|
33
|
+
return this.dbs.get(wxid);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const manager = new CommandManager();
|
|
37
|
+
manager.register(new Command('/rssadd', async (args, db) => {
|
|
38
|
+
const url = args[0];
|
|
39
|
+
const id = generateUniqueId();
|
|
40
|
+
await db.insert({ id, url });
|
|
41
|
+
return '订阅源已添加';
|
|
42
|
+
}));
|
|
43
|
+
manager.register(new Command('/rsstime', async (args, db) => {
|
|
44
|
+
const interval = args[0];
|
|
45
|
+
await db.update({}, { $set: { interval } }, { multi: true });
|
|
46
|
+
return '更新间隔已设置';
|
|
47
|
+
}));
|
|
48
|
+
manager.register(new Command('/rssls', async (args, db) => {
|
|
49
|
+
const sources = await db.find({});
|
|
50
|
+
const urls = sources.map(source => source.url).join('\n');
|
|
51
|
+
return urls;
|
|
52
|
+
}));
|
|
53
|
+
manager.register(new Command('/rssdel', async (args, db) => {
|
|
54
|
+
const id = args[0];
|
|
55
|
+
await db.remove({ id });
|
|
56
|
+
return '订阅源已删除';
|
|
57
|
+
}));
|
|
58
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -41,11 +41,11 @@ export function getNewsContent(sortId: any, endWord?: any, num?: number): Promis
|
|
|
41
41
|
/**
|
|
42
42
|
* 更新用户信息
|
|
43
43
|
*/
|
|
44
|
-
export function updateContactInfo(that: any): Promise<void>;
|
|
44
|
+
export function updateContactInfo(that: any, noCache?: boolean): Promise<void>;
|
|
45
45
|
/**
|
|
46
46
|
* 更新群列表
|
|
47
47
|
*/
|
|
48
|
-
export function updateRoomInfo(that: any): Promise<void>;
|
|
48
|
+
export function updateRoomInfo(that: any, noCache?: boolean): Promise<void>;
|
|
49
49
|
/**
|
|
50
50
|
* 统一邀请加群
|
|
51
51
|
* @param that
|
|
@@ -62,8 +62,12 @@ exports.getCountDownContent = getCountDownContent;
|
|
|
62
62
|
/**
|
|
63
63
|
* 更新用户信息
|
|
64
64
|
*/
|
|
65
|
-
async function updateContactInfo(that) {
|
|
65
|
+
async function updateContactInfo(that, noCache = false) {
|
|
66
66
|
try {
|
|
67
|
+
if (noCache && that.puppet.syncContact) {
|
|
68
|
+
await that.puppet.syncContact();
|
|
69
|
+
await (0, index_js_1.delay)(5000);
|
|
70
|
+
}
|
|
67
71
|
const contactSelf = await (0, userDb_js_1.getUser)();
|
|
68
72
|
const contactList = await that.Contact.findAll() || [];
|
|
69
73
|
let res = [];
|
|
@@ -111,8 +115,12 @@ async function updateFriendInfo(list, num) {
|
|
|
111
115
|
/**
|
|
112
116
|
* 更新群列表
|
|
113
117
|
*/
|
|
114
|
-
async function updateRoomInfo(that) {
|
|
118
|
+
async function updateRoomInfo(that, noCache = false) {
|
|
115
119
|
try {
|
|
120
|
+
if (noCache && that.puppet.syncContact) {
|
|
121
|
+
await that.puppet.syncContact();
|
|
122
|
+
await (0, index_js_1.delay)(5000);
|
|
123
|
+
}
|
|
116
124
|
const contactSelf = await (0, userDb_js_1.getUser)();
|
|
117
125
|
const roomList = await that.Room.findAll() || [];
|
|
118
126
|
let res = [];
|
|
@@ -328,7 +336,7 @@ async function updateContactAndRoom(that) {
|
|
|
328
336
|
await (0, index_js_1.delay)(3000);
|
|
329
337
|
await (0, aibotk_js_1.asyncData)(contactSelf.robotId, 2);
|
|
330
338
|
await (0, index_js_1.delay)(3000);
|
|
331
|
-
await updateRoomInfo(that);
|
|
339
|
+
await updateRoomInfo(that, true);
|
|
332
340
|
await (0, index_js_1.delay)(3000);
|
|
333
341
|
await updateContactInfo(that);
|
|
334
342
|
}
|
|
@@ -342,7 +350,7 @@ async function updateContactOnly(that) {
|
|
|
342
350
|
const contactSelf = await (0, userDb_js_1.getUser)();
|
|
343
351
|
await (0, aibotk_js_1.asyncData)(contactSelf.robotId, 1);
|
|
344
352
|
await (0, index_js_1.delay)(3000);
|
|
345
|
-
await updateContactInfo(that);
|
|
353
|
+
await updateContactInfo(that, true);
|
|
346
354
|
}
|
|
347
355
|
exports.updateContactOnly = updateContactOnly;
|
|
348
356
|
/**
|
|
@@ -354,7 +362,7 @@ async function updateRoomOnly(that) {
|
|
|
354
362
|
const contactSelf = await (0, userDb_js_1.getUser)();
|
|
355
363
|
await (0, aibotk_js_1.asyncData)(contactSelf.robotId, 2);
|
|
356
364
|
await (0, index_js_1.delay)(3000);
|
|
357
|
-
await updateRoomInfo(that);
|
|
365
|
+
await updateRoomInfo(that, true);
|
|
358
366
|
}
|
|
359
367
|
exports.updateRoomOnly = updateRoomOnly;
|
|
360
368
|
exports.default = {
|
|
@@ -8,7 +8,7 @@ export function getContactTextReply(that: any, contact: any, msg: any): Promise<
|
|
|
8
8
|
* @param {*} name 发消息者昵称
|
|
9
9
|
* @param {*} id 发消息者id
|
|
10
10
|
*/
|
|
11
|
-
export function getRoomTextReply({ that, content, name, id, avatar, room, isMention }: any): Promise<number>;
|
|
11
|
+
export function getRoomTextReply({ that, content, name, id, avatar, room, isMention, roomName, roomId }: any): Promise<number>;
|
|
12
12
|
declare namespace _default {
|
|
13
13
|
export { getContactTextReply };
|
|
14
14
|
export { getRoomTextReply };
|
|
@@ -19,8 +19,8 @@ exports.getContactTextReply = getContactTextReply;
|
|
|
19
19
|
* @param {*} name 发消息者昵称
|
|
20
20
|
* @param {*} id 发消息者id
|
|
21
21
|
*/
|
|
22
|
-
async function getRoomTextReply({ that, content, name, id, avatar, room, isMention }) {
|
|
23
|
-
let result = await msg_filter_service_js_1.default.filterRoomMsg({ that, msg: content, name, id, avatar, room, isMention });
|
|
22
|
+
async function getRoomTextReply({ that, content, name, id, avatar, room, isMention, roomName, roomId }) {
|
|
23
|
+
let result = await msg_filter_service_js_1.default.filterRoomMsg({ that, msg: content, name, id, avatar, room, isMention, roomName, roomId });
|
|
24
24
|
return result;
|
|
25
25
|
}
|
|
26
26
|
exports.getRoomTextReply = getRoomTextReply;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 记录群聊天记录 记录格式
|
|
3
|
+
* { contactName: '', contactId: '', roomName: '', roomId: '', input: '输入的问题', output: '输出内容', time: '时间' }
|
|
4
|
+
* @param info
|
|
5
|
+
* @returns {Promise<unknown>}
|
|
6
|
+
*/
|
|
7
|
+
export function addAichatRecord(info: any): Promise<unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* 获取指定群的聊天记录
|
|
10
|
+
* @param room
|
|
11
|
+
* @returns {Promise<*>}
|
|
12
|
+
*/
|
|
13
|
+
export function getAichatRecord(query: any): Promise<any>;
|
|
14
|
+
/**
|
|
15
|
+
* 清楚指定群的聊天记录
|
|
16
|
+
* @param roomName
|
|
17
|
+
* @returns {Promise<void>}
|
|
18
|
+
*/
|
|
19
|
+
export function removeRecord(query: any): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* 获取指定群聊的所有聊天内容
|
|
22
|
+
* @param rooName
|
|
23
|
+
* @param day 取的天数
|
|
24
|
+
* @returns {Promise<*>}
|
|
25
|
+
*/
|
|
26
|
+
export function getAichatQuestion(query: any, day: any): Promise<any>;
|
|
27
|
+
//# sourceMappingURL=aichatDb.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getAichatQuestion = exports.removeRecord = exports.getAichatRecord = exports.addAichatRecord = void 0;
|
|
7
|
+
const nedb_js_1 = __importDefault(require("./nedb.js"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const baseDir = path_1.default.join(os_1.default.homedir(), path_1.default.sep, ".wechaty", "wechaty-panel-cache", path_1.default.sep);
|
|
11
|
+
const dbpath = baseDir + "aichat.db";
|
|
12
|
+
const rdb = (0, nedb_js_1.default)(dbpath);
|
|
13
|
+
console.log('聊天记录路径:如果开启了记录会存到此处,未开启不会记录,所有记录都是存在本地', dbpath);
|
|
14
|
+
/**
|
|
15
|
+
* 记录群聊天记录 记录格式
|
|
16
|
+
* { contactName: '', contactId: '', roomName: '', roomId: '', input: '输入的问题', output: '输出内容', time: '时间' }
|
|
17
|
+
* @param info
|
|
18
|
+
* @returns {Promise<unknown>}
|
|
19
|
+
*/
|
|
20
|
+
async function addAichatRecord(info) {
|
|
21
|
+
try {
|
|
22
|
+
let doc = await rdb.insert(info);
|
|
23
|
+
return doc;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.log("插入数据错误", error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.addAichatRecord = addAichatRecord;
|
|
30
|
+
/**
|
|
31
|
+
* 获取指定群的聊天记录
|
|
32
|
+
* @param room
|
|
33
|
+
* @returns {Promise<*>}
|
|
34
|
+
*/
|
|
35
|
+
async function getAichatRecord(query) {
|
|
36
|
+
try {
|
|
37
|
+
let search = await rdb.find(query);
|
|
38
|
+
return search;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.log("查询数据错误", error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.getAichatRecord = getAichatRecord;
|
|
45
|
+
/**
|
|
46
|
+
* 清楚指定群的聊天记录
|
|
47
|
+
* @param roomName
|
|
48
|
+
* @returns {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
async function removeRecord(query) {
|
|
51
|
+
try {
|
|
52
|
+
let search = await rdb.remove(query, { multi: true });
|
|
53
|
+
return search;
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
console.log("error", e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.removeRecord = removeRecord;
|
|
60
|
+
/**
|
|
61
|
+
* 获取指定群聊的所有聊天内容
|
|
62
|
+
* @param rooName
|
|
63
|
+
* @param day 取的天数
|
|
64
|
+
* @returns {Promise<*>}
|
|
65
|
+
*/
|
|
66
|
+
async function getAichatQuestion(query, day) {
|
|
67
|
+
try {
|
|
68
|
+
let list = await getAichatRecord(query);
|
|
69
|
+
list = list.filter(item => {
|
|
70
|
+
return item.time >= new Date().getTime() - day * 24 * 60 * 60 * 1000;
|
|
71
|
+
});
|
|
72
|
+
let question = "";
|
|
73
|
+
list.forEach((item) => {
|
|
74
|
+
question = question + "|" + item.input;
|
|
75
|
+
});
|
|
76
|
+
return question;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.log("error", e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.getAichatQuestion = getAichatQuestion;
|
|
83
|
+
//# sourceMappingURL=aichatDb.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 存储gpt配置
|
|
3
|
+
* { contactName: '', contactId: '', roomName: '', roomId: '', input: '输入的问题', output: '输出内容', time: '时间' }
|
|
4
|
+
* @param info
|
|
5
|
+
* @returns {Promise<unknown>}
|
|
6
|
+
*/
|
|
7
|
+
export function addGptConfig(info: any): Promise<unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* 获取指定群的聊天记录
|
|
10
|
+
* @param room
|
|
11
|
+
* @returns {Promise<*>}
|
|
12
|
+
*/
|
|
13
|
+
export function getAllGptConfig(): Promise<any>;
|
|
14
|
+
export function getGptConfigById(id: any): Promise<any>;
|
|
15
|
+
export function updateAllGptConfig(infos: any): Promise<void>;
|
|
16
|
+
export function updateOneGptConfig(id: any, info: any): Promise<any>;
|
|
17
|
+
//# sourceMappingURL=gptConfig.d.ts.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.updateOneGptConfig = exports.updateAllGptConfig = exports.getGptConfigById = exports.getAllGptConfig = exports.addGptConfig = void 0;
|
|
7
|
+
const nedb_js_1 = __importDefault(require("./nedb.js"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const baseDir = path_1.default.join(os_1.default.homedir(), path_1.default.sep, ".wechaty", "wechaty-panel-cache", path_1.default.sep);
|
|
11
|
+
const dbpath = baseDir + "gptconfig.db";
|
|
12
|
+
const rdb = (0, nedb_js_1.default)(dbpath);
|
|
13
|
+
/**
|
|
14
|
+
* 存储gpt配置
|
|
15
|
+
* { contactName: '', contactId: '', roomName: '', roomId: '', input: '输入的问题', output: '输出内容', time: '时间' }
|
|
16
|
+
* @param info
|
|
17
|
+
* @returns {Promise<unknown>}
|
|
18
|
+
*/
|
|
19
|
+
async function addGptConfig(info) {
|
|
20
|
+
try {
|
|
21
|
+
let doc = await rdb.insert(info);
|
|
22
|
+
return doc;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.log("插入数据错误", error);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.addGptConfig = addGptConfig;
|
|
29
|
+
/**
|
|
30
|
+
* 获取指定群的聊天记录
|
|
31
|
+
* @param room
|
|
32
|
+
* @returns {Promise<*>}
|
|
33
|
+
*/
|
|
34
|
+
async function getAllGptConfig() {
|
|
35
|
+
try {
|
|
36
|
+
let search = await rdb.find({});
|
|
37
|
+
return search;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.log("查询数据错误", error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.getAllGptConfig = getAllGptConfig;
|
|
44
|
+
async function getGptConfigById(id) {
|
|
45
|
+
try {
|
|
46
|
+
let search = await rdb.find({ id });
|
|
47
|
+
return search[0];
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.log("查询数据错误", error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.getGptConfigById = getGptConfigById;
|
|
54
|
+
async function updateAllGptConfig(infos) {
|
|
55
|
+
try {
|
|
56
|
+
for (const item of infos) {
|
|
57
|
+
await rdb.update({ _id: item._id }, item, { upsert: true });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.log('更新失败', error);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.updateAllGptConfig = updateAllGptConfig;
|
|
65
|
+
async function updateOneGptConfig(id, info) {
|
|
66
|
+
try {
|
|
67
|
+
let search = await rdb.update({ id }, { ...info });
|
|
68
|
+
return search;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.log("查询数据错误", error);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.updateOneGptConfig = updateOneGptConfig;
|
|
75
|
+
//# sourceMappingURL=gptConfig.js.map
|
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const aibotk_js_1 = require("../proxy/aibotk.js");
|
|
4
3
|
async function onError(error) {
|
|
5
|
-
|
|
6
|
-
console.log('错误', error);
|
|
7
|
-
await (0, aibotk_js_1.sendError)(error.message
|
|
8
|
-
.replace(/\ +/g, '')
|
|
9
|
-
.replace(/[\r\n]/g, '')
|
|
10
|
-
.replace('Error:type(){returnthis._type;}', ''));
|
|
11
|
-
}
|
|
12
|
-
catch (e) {
|
|
13
|
-
console.log('上报错误失败', e);
|
|
14
|
-
}
|
|
4
|
+
console.log('捕捉到🐛,如果还能正常运行,可以忽略', error);
|
|
15
5
|
}
|
|
16
6
|
exports.default = onError;
|
|
17
7
|
//# sourceMappingURL=on-error.js.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const index_js_1 = require("../lib/index.js");
|
|
4
3
|
const aibotk_js_1 = require("../proxy/aibotk.js");
|
|
5
4
|
const userDb_js_1 = require("../db/userDb.js");
|
|
6
5
|
const mqtt_js_1 = require("../proxy/mqtt.js");
|
|
@@ -14,7 +13,6 @@ async function onLogin(user) {
|
|
|
14
13
|
console.log(`贴心助理${user}登录了`);
|
|
15
14
|
await (0, aibotk_js_1.updatePanelVersion)();
|
|
16
15
|
await (0, aibotk_js_1.setQrCode)('', 4);
|
|
17
|
-
await (0, aibotk_js_1.sendError)('');
|
|
18
16
|
await (0, aibotk_js_1.getConfig)(); // 获取配置文件
|
|
19
17
|
const config = await (0, configDb_js_1.allConfig)();
|
|
20
18
|
const { userId } = config && config.userInfo;
|
|
@@ -146,8 +146,10 @@ async function dispatchRoomFilterByMsgType(that, room, msg) {
|
|
|
146
146
|
content,
|
|
147
147
|
name: contactName,
|
|
148
148
|
id: contactId,
|
|
149
|
+
roomId: room.id,
|
|
149
150
|
avatar: contactAvatar,
|
|
150
151
|
room,
|
|
152
|
+
roomName,
|
|
151
153
|
isMention: mentionSelf
|
|
152
154
|
});
|
|
153
155
|
for (let reply of replys) {
|
|
@@ -158,7 +160,7 @@ async function dispatchRoomFilterByMsgType(that, room, msg) {
|
|
|
158
160
|
if (role === "vip" && cloudRoom.includes(roomName) && !checkIgnore(content, ignoreRecord)) {
|
|
159
161
|
const regex = /(<([^>]+)>)/ig;
|
|
160
162
|
content = content.replace(regex, "");
|
|
161
|
-
(0, roomDb_js_1.addRoomRecord)({
|
|
163
|
+
void (0, roomDb_js_1.addRoomRecord)({
|
|
162
164
|
roomName,
|
|
163
165
|
roomId: room.id,
|
|
164
166
|
content,
|
|
@@ -18,6 +18,9 @@ async function onReady() {
|
|
|
18
18
|
await (0, userDb_js_1.getUser)();
|
|
19
19
|
console.log(`所有数据准备完毕`);
|
|
20
20
|
(0, aibotk_js_1.sendHeartBeat)('live');
|
|
21
|
+
if (this.puppet.syncContact) {
|
|
22
|
+
await this.puppet.syncContact();
|
|
23
|
+
}
|
|
21
24
|
await (0, index_js_2.delay)(5000);
|
|
22
25
|
index_js_1.default.updateContactInfo(this);
|
|
23
26
|
await (0, index_js_2.delay)(5000);
|
|
@@ -6,13 +6,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const qrcode_terminal_1 = __importDefault(require("qrcode-terminal"));
|
|
7
7
|
const index_js_1 = require("../lib/index.js");
|
|
8
8
|
const aibotk_js_1 = require("../proxy/aibotk.js");
|
|
9
|
+
const aiDb_js_1 = require("../db/aiDb.js");
|
|
10
|
+
// 限制推送二维码的次数,防止掉线后,无限推送二维码到服务器
|
|
11
|
+
let scanTime = 0;
|
|
9
12
|
/**
|
|
10
13
|
* 扫描登录,显示二维码
|
|
11
14
|
*/
|
|
12
15
|
async function onScan(qrcode, status) {
|
|
16
|
+
const aibotConfig = await (0, aiDb_js_1.getAibotConfig)();
|
|
13
17
|
qrcode_terminal_1.default.generate(qrcode);
|
|
14
18
|
console.log('扫描状态', status);
|
|
15
|
-
|
|
19
|
+
if (scanTime >= aibotConfig.scanTimes) {
|
|
20
|
+
console.log('长时间推送登录状态,平台二维码不再更新,请重启服务,或直接在终端扫码登录');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
scanTime++;
|
|
24
|
+
(0, index_js_1.throttle)((0, aibotk_js_1.setQrCode)(qrcode, status), 30000);
|
|
25
|
+
}
|
|
16
26
|
const qrImgUrl = ['https://api.qrserver.com/v1/create-qr-code/?data=', encodeURIComponent(qrcode)].join('');
|
|
17
27
|
console.log(qrImgUrl);
|
|
18
28
|
}
|
package/dist/cjs/src/index.d.ts
CHANGED
package/dist/cjs/src/index.js
CHANGED
|
@@ -35,7 +35,7 @@ if (process.env['AIBOTK_SECRET']) {
|
|
|
35
35
|
console.log('使用环境变量中的 aibotkSecret');
|
|
36
36
|
envSecret = process.env['AIBOTK_SECRET'];
|
|
37
37
|
}
|
|
38
|
-
function WechatyWebPanelPlugin(config = { apiKey, apiSecret }) {
|
|
38
|
+
function WechatyWebPanelPlugin(config = { apiKey, apiSecret, scanTimes }) {
|
|
39
39
|
const initConfig = {
|
|
40
40
|
apiKey: envKey || config.apiKey,
|
|
41
41
|
apiSecret: envSecret || config.apiSecret,
|
|
@@ -43,6 +43,7 @@ function WechatyWebPanelPlugin(config = { apiKey, apiSecret }) {
|
|
|
43
43
|
ignoreMessages: config.ignoreMessages || [],
|
|
44
44
|
// 需要忽略的事件 ['scan', 'login', 'logout', 'friendship', 'room-join', 'room-topic', 'room-leave', 'message', 'ready', 'heartbeat', 'error']
|
|
45
45
|
ignoreEvents: config.ignoreEvents || [],
|
|
46
|
+
scanTimes: config.scanTimes || 50
|
|
46
47
|
};
|
|
47
48
|
(0, aiDb_js_1.addAibotConfig)(initConfig);
|
|
48
49
|
return function (bot) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ContentCensor = void 0;
|
|
7
|
+
const baidu_aip_sdk_1 = __importDefault(require("baidu-aip-sdk"));
|
|
8
|
+
const wechaty_1 = require("wechaty");
|
|
9
|
+
class ContentCensor {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.client = null;
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
init() {
|
|
15
|
+
if (this.config.type === 1) {
|
|
16
|
+
this.client = new baidu_aip_sdk_1.default.contentCensor(this.config.appId, this.config.apiKey, this.config.secretKey);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async checkText(text) {
|
|
20
|
+
if (!this.client) {
|
|
21
|
+
this.init();
|
|
22
|
+
}
|
|
23
|
+
if (this.config.type === 1) {
|
|
24
|
+
const result = await this.client.textCensorUserDefined(text);
|
|
25
|
+
console.log('result', result);
|
|
26
|
+
return result.conclusionType ? result.conclusionType === 1 : true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.ContentCensor = ContentCensor;
|
|
31
|
+
//# sourceMappingURL=contentCensor.js.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export default OfficialOpenAi;
|
|
2
|
+
declare class OfficialOpenAi {
|
|
3
|
+
constructor(config?: {
|
|
4
|
+
token: string;
|
|
5
|
+
debug: number;
|
|
6
|
+
proxyPass: string;
|
|
7
|
+
proxyUrl: string;
|
|
8
|
+
showQuestion: boolean;
|
|
9
|
+
timeoutMs: number;
|
|
10
|
+
model: string;
|
|
11
|
+
promotId: string;
|
|
12
|
+
systemMessage: string;
|
|
13
|
+
});
|
|
14
|
+
chatGPT: {
|
|
15
|
+
_apiKey: any;
|
|
16
|
+
_apiOrg: any;
|
|
17
|
+
_apiBaseUrl: any;
|
|
18
|
+
_debug: boolean;
|
|
19
|
+
_fetch: any;
|
|
20
|
+
_completionParams: any;
|
|
21
|
+
_systemMessage: any;
|
|
22
|
+
_maxModelTokens: any;
|
|
23
|
+
_maxResponseTokens: any;
|
|
24
|
+
_getMessageById: any;
|
|
25
|
+
_upsertMessage: any;
|
|
26
|
+
_messageStore: any;
|
|
27
|
+
sendMessage(text: any, opts?: {}): Promise<any>;
|
|
28
|
+
apiKey: any;
|
|
29
|
+
apiOrg: any;
|
|
30
|
+
_buildMessages(text: any, opts: any): Promise<{
|
|
31
|
+
messages: {
|
|
32
|
+
role: string;
|
|
33
|
+
content: any;
|
|
34
|
+
}[];
|
|
35
|
+
maxTokens: number;
|
|
36
|
+
numTokens: number;
|
|
37
|
+
}>;
|
|
38
|
+
_getTokenCount(text: any): Promise<number>;
|
|
39
|
+
_defaultGetMessageById(id: any): Promise<any>;
|
|
40
|
+
_defaultUpsertMessage(message: any): Promise<void>;
|
|
41
|
+
} | null;
|
|
42
|
+
config: {
|
|
43
|
+
token: string;
|
|
44
|
+
debug: number;
|
|
45
|
+
proxyPass: string;
|
|
46
|
+
proxyUrl: string;
|
|
47
|
+
showQuestion: boolean;
|
|
48
|
+
timeoutMs: number;
|
|
49
|
+
model: string;
|
|
50
|
+
promotId: string;
|
|
51
|
+
systemMessage: string;
|
|
52
|
+
};
|
|
53
|
+
contentCensor: ContentCensor | null;
|
|
54
|
+
chatOption: {};
|
|
55
|
+
init(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* 重置apikey
|
|
58
|
+
* @return {Promise<void>}
|
|
59
|
+
*/
|
|
60
|
+
reset(): Promise<void>;
|
|
61
|
+
getReply(content: any, uid: any, adminId?: string): Promise<{
|
|
62
|
+
type: number;
|
|
63
|
+
content: any;
|
|
64
|
+
}[]>;
|
|
65
|
+
}
|
|
66
|
+
import { ContentCensor } from "./contentCensor.js";
|
|
67
|
+
//# sourceMappingURL=officialOpenAi.d.ts.map
|