halbot 1989.6.29 → 1989.6.31
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/package.json +2 -2
- package/skills/ai.mjs +56 -66
- package/skills/cmd.mjs +19 -21
- package/skills/translate.mjs +23 -25
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "halbot",
|
|
3
3
|
"description": "Just another ChatGPT/Bing Telegram bob.",
|
|
4
|
-
"version": "1989.6.
|
|
4
|
+
"version": "1989.6.31",
|
|
5
5
|
"private": false,
|
|
6
6
|
"homepage": "https://github.com/Leask/halbot",
|
|
7
7
|
"type": "module",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"@google-cloud/text-to-speech": "^4.2.1",
|
|
34
34
|
"@waylaidwanderer/chatgpt-api": "^1.32.10",
|
|
35
35
|
"telegraf": "^4.12.2",
|
|
36
|
-
"utilitas": "^1992.4.
|
|
36
|
+
"utilitas": "^1992.4.40"
|
|
37
37
|
}
|
|
38
38
|
}
|
package/skills/ai.mjs
CHANGED
|
@@ -3,75 +3,65 @@ import { utilitas } from 'utilitas';
|
|
|
3
3
|
const onProgress = { onProgress: true };
|
|
4
4
|
const [YOU, BOT, LN2] = ['😸 You:', '🤖️ ', '\n\n'];
|
|
5
5
|
const [joinL1, joinL2] = [a => a.join('${LN2}---${LN2}'), a => a.join(LN2)];
|
|
6
|
+
const enrich = name => name === 'Bing' ? `${name} (Sydney)` : name;
|
|
6
7
|
|
|
7
|
-
const action = async (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
const source = options?.tts ? tts : msgs;
|
|
16
|
-
for (let name of ctx.session.ai.size ? ctx.session.ai : [ctx.firstAi]) {
|
|
17
|
-
const defaultAi = name === ctx.firstAi;
|
|
18
|
-
packed.push(joinL2([
|
|
19
|
-
...multiAi || !defaultAi || ctx.stt ? [`${BOT}${name}:`] : [],
|
|
20
|
-
options?.onProgress ? (
|
|
21
|
-
source[name] ? `${source[name].trim()} |` : '...'
|
|
22
|
-
) : (source[name] || ''),
|
|
23
|
-
]));
|
|
24
|
-
}
|
|
25
|
-
return joinL1(packed);
|
|
26
|
-
};
|
|
27
|
-
const ok = async (options) => {
|
|
28
|
-
const [curTime, curMsg] = [Date.now(), packMsg(options)];
|
|
29
|
-
if (options?.onProgress && (
|
|
30
|
-
curTime - lastSent < ctx.limit || lastMsg === curMsg
|
|
31
|
-
)) { return; }
|
|
32
|
-
[lastSent, lastMsg] = [curTime, curMsg];
|
|
33
|
-
return await ctx.ok(curMsg, { ...options || {}, ...extra });
|
|
34
|
-
};
|
|
35
|
-
await ok(onProgress);
|
|
8
|
+
const action = async (ctx, next) => {
|
|
9
|
+
if (ctx.end || !ctx.text) { return await next(); }
|
|
10
|
+
const [multiAi, msgs, tts, pms, extra]
|
|
11
|
+
= [ctx.session.ai.size > 1, {}, {}, [], {}];
|
|
12
|
+
let [lastMsg, lastSent] = ['', 0];
|
|
13
|
+
const packMsg = (options) => {
|
|
14
|
+
const packed = [...ctx.stt ? joinL2([YOU, ctx.stt]) : []];
|
|
15
|
+
const source = options?.tts ? tts : msgs;
|
|
36
16
|
for (let name of ctx.session.ai.size ? ctx.session.ai : [ctx.firstAi]) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
ctx.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
ctx.text, { session: ctx.chatId },
|
|
45
|
-
tkn => {
|
|
46
|
-
msgs[name] = `${(msgs[name] || '')}${tkn}`;
|
|
47
|
-
ok(onProgress);
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
msgs[name] = ctx.session.raw ? resp.response : resp.responseRendered;
|
|
51
|
-
tts[name] = resp.spokenText;
|
|
52
|
-
if (resp.suggestedResponses) {
|
|
53
|
-
extra.reply_markup = {
|
|
54
|
-
inline_keyboard: resp.suggestedResponses.map(
|
|
55
|
-
text => [{
|
|
56
|
-
text, callback_data: JSON.stringify({ text: `/bing ${text}` })
|
|
57
|
-
}]
|
|
58
|
-
)
|
|
59
|
-
};
|
|
60
|
-
// button debug
|
|
61
|
-
// console.log(JSON.stringify(extra.reply_markup, null, 2));
|
|
62
|
-
}
|
|
63
|
-
} catch (err) {
|
|
64
|
-
msgs[name] = `[ERROR] ${err?.message || err}`;
|
|
65
|
-
tts[name] = msgs[name];
|
|
66
|
-
utilitas.log(err);
|
|
67
|
-
}
|
|
68
|
-
})());
|
|
17
|
+
const defaultAi = name === ctx.firstAi;
|
|
18
|
+
packed.push(joinL2([
|
|
19
|
+
...multiAi || !defaultAi || ctx.stt ? [`${BOT}${enrich(name)}:`] : [],
|
|
20
|
+
options?.onProgress ? (
|
|
21
|
+
source[name] ? `${source[name].trim()} |` : '...'
|
|
22
|
+
) : (source[name] || ''),
|
|
23
|
+
]));
|
|
69
24
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
25
|
+
return joinL1(packed);
|
|
26
|
+
};
|
|
27
|
+
const ok = async (options) => {
|
|
28
|
+
const [curTime, curMsg] = [Date.now(), packMsg(options)];
|
|
29
|
+
if (options?.onProgress && (
|
|
30
|
+
curTime - lastSent < ctx.limit || lastMsg === curMsg
|
|
31
|
+
)) { return; }
|
|
32
|
+
[lastSent, lastMsg] = [curTime, curMsg];
|
|
33
|
+
return await ctx.ok(curMsg, { ...options || {}, ...extra });
|
|
34
|
+
};
|
|
35
|
+
await ok(onProgress);
|
|
36
|
+
for (let name of ctx.session.ai.size ? ctx.session.ai : [ctx.firstAi]) {
|
|
37
|
+
if (utilitas.insensitiveCompare('/clear', ctx.text)) {
|
|
38
|
+
ctx._.ai[name].clear(ctx.chatId);
|
|
39
|
+
ctx.text = ctx._.hello;
|
|
40
|
+
}
|
|
41
|
+
pms.push((async () => {
|
|
42
|
+
try {
|
|
43
|
+
const resp = await ctx._.ai[name].send(
|
|
44
|
+
ctx.text, { session: ctx.chatId }, tkn => {
|
|
45
|
+
msgs[name] = `${(msgs[name] || '')}${tkn}`;
|
|
46
|
+
ok(onProgress);
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
msgs[name] = ctx.session.raw ? resp.response : resp.responseRendered;
|
|
50
|
+
tts[name] = resp.spokenText;
|
|
51
|
+
extra.textButtons = resp?.suggestedResponses?.map?.(text => ({
|
|
52
|
+
text, data: `/bing ${text}`
|
|
53
|
+
}));
|
|
54
|
+
} catch (err) {
|
|
55
|
+
msgs[name] = `[ERROR] ${err?.message || err}`;
|
|
56
|
+
tts[name] = msgs[name];
|
|
57
|
+
utilitas.log(err);
|
|
58
|
+
}
|
|
59
|
+
})());
|
|
60
|
+
}
|
|
61
|
+
await Promise.all(pms);
|
|
62
|
+
await ok();
|
|
63
|
+
ctx.tts = packMsg({ tts: true });
|
|
64
|
+
await next();
|
|
75
65
|
};
|
|
76
66
|
|
|
77
67
|
export const { run, priority, func } = {
|
package/skills/cmd.mjs
CHANGED
|
@@ -2,28 +2,26 @@ import { utilitas } from 'utilitas';
|
|
|
2
2
|
|
|
3
3
|
const matchReg = /^\/([^\ ]*)(.*)$/ig;
|
|
4
4
|
|
|
5
|
-
const action = async (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
const action = async (ctx, next) => {
|
|
6
|
+
if (ctx.end || !ctx.text) { return await next(); }
|
|
7
|
+
ctx.session.ai || (ctx.session.ai = new Set());
|
|
8
|
+
const curAi = new Set();
|
|
9
|
+
ctx.cmd = ctx.text.split('\n')?.[0]?.replace(matchReg, '$1');
|
|
10
|
+
let catched;
|
|
11
|
+
switch (ctx.cmd) {
|
|
12
|
+
case 'raw': ctx.session.raw = true; catched = true; break;
|
|
13
|
+
case 'render': ctx.session.raw = false; catched = true; break;
|
|
14
|
+
}
|
|
15
|
+
for (let name in ctx._.ai) {
|
|
16
|
+
ctx.firstAi || (ctx.firstAi = name);
|
|
17
|
+
if (utilitas.insensitiveCompare(ctx.cmd, name) || ctx.cmd === '*') {
|
|
18
|
+
curAi.add(name);
|
|
19
|
+
catched = true;
|
|
15
20
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
catched = true;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
curAi.size && (ctx.session.ai = curAi);
|
|
24
|
-
catched && (ctx.text = ctx.text.replace(matchReg, '$2').trim() || bot.hello);
|
|
25
|
-
await next();
|
|
26
|
-
});
|
|
21
|
+
}
|
|
22
|
+
curAi.size && (ctx.session.ai = curAi);
|
|
23
|
+
catched && (ctx.text = ctx.text.replace(matchReg, '$2').trim() || ctx._.hello);
|
|
24
|
+
await next();
|
|
27
25
|
};
|
|
28
26
|
|
|
29
27
|
export const { run, priority, func } = {
|
package/skills/translate.mjs
CHANGED
|
@@ -5,31 +5,29 @@ const getPolishPrompt = () => // https://github.com/yetone/bob-plugin-openai-pol
|
|
|
5
5
|
'Revise the following text to make them more clear, concise, and coherent.'
|
|
6
6
|
+ ' Please note that you need to list the changes and briefly explain why: ';
|
|
7
7
|
|
|
8
|
-
const action = async (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
await next();
|
|
32
|
-
});
|
|
8
|
+
const action = async (ctx, next) => {
|
|
9
|
+
if (ctx.end || !ctx.text) { return await next(); }
|
|
10
|
+
switch (ctx.cmd) {
|
|
11
|
+
case '2en':
|
|
12
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getTranslatePrompt('English'));
|
|
13
|
+
break;
|
|
14
|
+
case '2zh':
|
|
15
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getTranslatePrompt('Traditional Chinese'));
|
|
16
|
+
break;
|
|
17
|
+
case '2zht':
|
|
18
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getTranslatePrompt('Traditional Chinese'));
|
|
19
|
+
break;
|
|
20
|
+
case '2zhs':
|
|
21
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getTranslatePrompt('Simplified Chinese'));
|
|
22
|
+
break;
|
|
23
|
+
case '2fr':
|
|
24
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getTranslatePrompt('French'));
|
|
25
|
+
break;
|
|
26
|
+
case 'p':
|
|
27
|
+
ctx.text = ctx.text.replace(`/${ctx.cmd}`, getPolishPrompt());
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
await next();
|
|
33
31
|
};
|
|
34
32
|
|
|
35
33
|
export const { run, priority, func } = {
|