easyoref 2.0.3 → 2.0.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAGlC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAGlC,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA4FpD"}
|
package/dist/handlers/inline.js
CHANGED
|
@@ -12,13 +12,18 @@ export function registerInlineHandler(bot) {
|
|
|
12
12
|
if (session) {
|
|
13
13
|
const phase = session.phase;
|
|
14
14
|
const areas = session.alertAreas.slice(0, 3).join(", ");
|
|
15
|
+
const time = new Date(session.latestAlertTs).toLocaleTimeString("he-IL", {
|
|
16
|
+
hour: "2-digit",
|
|
17
|
+
minute: "2-digit",
|
|
18
|
+
timeZone: "Asia/Jerusalem",
|
|
19
|
+
});
|
|
15
20
|
results.push({
|
|
16
21
|
type: "article",
|
|
17
22
|
id: "current_status",
|
|
18
|
-
title: `\u{1F6A8} Active Alert (${phase})`,
|
|
23
|
+
title: `\u{1F6A8} Active Alert (${phase}) — ${time}`,
|
|
19
24
|
description: areas,
|
|
20
25
|
input_message_content: {
|
|
21
|
-
message_text: `<b>\u{1F6A8} Active Alert</b>\nPhase: ${phase}\nAreas: ${areas}`,
|
|
26
|
+
message_text: `<b>\u{1F6A8} Active Alert</b>\nPhase: ${phase}\nTime: ${time}\nAreas: ${areas}`,
|
|
22
27
|
parse_mode: "HTML",
|
|
23
28
|
},
|
|
24
29
|
});
|
|
@@ -37,7 +42,7 @@ export function registerInlineHandler(bot) {
|
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
44
|
else {
|
|
40
|
-
// Q&A — run the QA graph
|
|
45
|
+
// Q&A — run the same QA graph (no status callback for inline)
|
|
41
46
|
const chatId = String(ctx.from.id);
|
|
42
47
|
const user = await getUser(chatId);
|
|
43
48
|
if (user) {
|
|
@@ -51,6 +56,7 @@ export function registerInlineHandler(bot) {
|
|
|
51
56
|
input_message_content: {
|
|
52
57
|
message_text: answer,
|
|
53
58
|
parse_mode: "HTML",
|
|
59
|
+
link_preview_options: { is_disabled: true },
|
|
54
60
|
},
|
|
55
61
|
});
|
|
56
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAIlD,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,OAAO,GAA+B,EAAE,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,uDAAuD;gBACvD,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBAEzC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;oBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxD,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,SAAS;wBACf,EAAE,EAAE,gBAAgB;wBACpB,KAAK,EAAE,2BAA2B,KAAK,
|
|
1
|
+
{"version":3,"file":"inline.js","sourceRoot":"","sources":["../../src/handlers/inline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAoGhD"}
|
package/dist/handlers/qa.js
CHANGED
|
@@ -3,9 +3,25 @@ import { config, getBotStrings, getRedis, getUser, } from "@easyoref/shared";
|
|
|
3
3
|
import * as logger from "@easyoref/shared/logger";
|
|
4
4
|
export function registerQaHandler(bot) {
|
|
5
5
|
bot.on("message:text", async (ctx) => {
|
|
6
|
-
|
|
6
|
+
// Q&A works in private chats AND group chats (when mentioned or replied to)
|
|
7
|
+
const isPrivate = ctx.chat.type === "private";
|
|
8
|
+
const isGroup = ctx.chat.type === "group" || ctx.chat.type === "supergroup";
|
|
9
|
+
// In groups: only respond to direct replies to the bot or mentions
|
|
10
|
+
if (isGroup) {
|
|
11
|
+
const botInfo = ctx.me;
|
|
12
|
+
const text = ctx.message.text ?? "";
|
|
13
|
+
const isReplyToBot = ctx.message.reply_to_message?.from?.id === botInfo.id;
|
|
14
|
+
const isMentioned = text.includes(`@${botInfo.username}`) ||
|
|
15
|
+
(ctx.message.entities ?? []).some((e) => e.type === "mention" &&
|
|
16
|
+
text.slice(e.offset, e.offset + e.length).toLowerCase() ===
|
|
17
|
+
`@${botInfo.username?.toLowerCase()}`);
|
|
18
|
+
if (!isReplyToBot && !isMentioned)
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!isPrivate && !isGroup)
|
|
7
22
|
return;
|
|
8
23
|
const chatId = String(ctx.chat.id);
|
|
24
|
+
const userId = String(ctx.from?.id ?? ctx.chat.id);
|
|
9
25
|
// Skip /commands — let grammY command handlers handle them
|
|
10
26
|
if (ctx.message.text.startsWith("/"))
|
|
11
27
|
return;
|
|
@@ -16,7 +32,7 @@ export function registerQaHandler(bot) {
|
|
|
16
32
|
});
|
|
17
33
|
if (btnTexts.includes(ctx.message.text))
|
|
18
34
|
return;
|
|
19
|
-
const user = await getUser(chatId);
|
|
35
|
+
const user = await getUser(isPrivate ? chatId : userId);
|
|
20
36
|
const lang = (user?.language ?? "ru");
|
|
21
37
|
const bs = getBotStrings(lang);
|
|
22
38
|
if (!user) {
|
|
@@ -25,7 +41,7 @@ export function registerQaHandler(bot) {
|
|
|
25
41
|
}
|
|
26
42
|
// Rate limit: qaRateLimitPerMin per user (Redis INCR + EXPIRE)
|
|
27
43
|
const redis = getRedis();
|
|
28
|
-
const rateLimitKey = `qa:rate:${
|
|
44
|
+
const rateLimitKey = `qa:rate:${userId}`;
|
|
29
45
|
const count = await redis.incr(rateLimitKey);
|
|
30
46
|
if (count === 1)
|
|
31
47
|
await redis.expire(rateLimitKey, 60);
|
|
@@ -33,12 +49,41 @@ export function registerQaHandler(bot) {
|
|
|
33
49
|
await ctx.reply(bs.qaRateLimit);
|
|
34
50
|
return;
|
|
35
51
|
}
|
|
36
|
-
|
|
52
|
+
// Start periodic typing indicator (every 4s, Telegram typing expires after 5s)
|
|
53
|
+
let typingActive = true;
|
|
54
|
+
const sendTyping = async () => {
|
|
55
|
+
while (typingActive) {
|
|
56
|
+
try {
|
|
57
|
+
await ctx.replyWithChatAction("typing");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// ignore typing errors
|
|
61
|
+
}
|
|
62
|
+
await new Promise((r) => setTimeout(r, 4000));
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const typingPromise = sendTyping();
|
|
37
66
|
try {
|
|
38
|
-
|
|
39
|
-
|
|
67
|
+
// Status callback: sends intermediate "searching..." messages
|
|
68
|
+
const statusCallback = async (message) => {
|
|
69
|
+
try {
|
|
70
|
+
await ctx.reply(message, { parse_mode: "HTML" });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// ignore status message errors
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const answer = await runQa(ctx.message.text, isPrivate ? chatId : userId, statusCallback);
|
|
77
|
+
typingActive = false;
|
|
78
|
+
await typingPromise;
|
|
79
|
+
await ctx.reply(answer, {
|
|
80
|
+
parse_mode: "HTML",
|
|
81
|
+
link_preview_options: { is_disabled: true },
|
|
82
|
+
});
|
|
40
83
|
}
|
|
41
84
|
catch (err) {
|
|
85
|
+
typingActive = false;
|
|
86
|
+
await typingPromise;
|
|
42
87
|
logger.error("Q&A failed", { error: String(err), chatId });
|
|
43
88
|
await ctx.reply(bs.qaError);
|
|
44
89
|
}
|
package/dist/handlers/qa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EACL,MAAM,EACN,aAAa,EACb,QAAQ,EACR,OAAO,GAER,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAGlD,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/handlers/qa.ts"],"names":[],"mappings":"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"}
|