Skip to content

Commit 0dde2e6

Browse files
committed
Avoid unsolicited group APK analysis
1 parent 96671b4 commit 0dde2e6

3 files changed

Lines changed: 62 additions & 12 deletions

File tree

packages/bot-worker/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
"commands:set": "node scripts/manage-webhook.mjs commands:set",
2020
"commands:info": "node scripts/manage-webhook.mjs commands:info",
2121
"commands:delete": "node scripts/manage-webhook.mjs commands:delete",
22-
"check": "node --check src/index.js && node --check src/apk-url-preview.js && node --check src/i18n.js && node --check src/icons.js && node --check src/observability.js && node --check src/report-viewer.js && node --check src/telegraph.js && node --check src/upload-view.js && node --check scripts/manage-webhook.mjs"
22+
"test": "node --test test/*.test.mjs",
23+
"check": "node --check src/index.js && node --check src/apk-url-preview.js && node --check src/i18n.js && node --check src/icons.js && node --check src/observability.js && node --check src/report-viewer.js && node --check src/telegraph.js && node --check src/upload-view.js && node --check scripts/manage-webhook.mjs && npm test"
2324
},
2425
"devDependencies": {
2526
"wrangler": "^4.103.0"

packages/bot-worker/src/index.js

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -819,13 +819,9 @@ function selectTargetUrl(message, command, isEdited, botMentioned) {
819819
return null;
820820
}
821821

822-
const directApkLink = directLinks.find(isLikelyApkUrl);
823-
if (directApkLink) {
824-
return directApkLink;
825-
}
826-
827822
if (isPrivateChat(message.chat)) {
828-
return directLinks[0] || null;
823+
const directApkLink = directLinks.find(isLikelyApkUrl);
824+
return directApkLink || directLinks[0] || null;
829825
}
830826

831827
return null;
@@ -837,7 +833,7 @@ function shouldAutoAnalyzeMessage(message) {
837833
return false;
838834
}
839835

840-
return isPrivateChat(message.chat) || isGroupOrChannelChat(message.chat) || isForwardedMessage(message);
836+
return isPrivateChat(message.chat);
841837
}
842838

843839
function getApkDocument(message) {
@@ -1679,10 +1675,6 @@ function isPrivateChat(chat) {
16791675
return chat?.type === "private";
16801676
}
16811677

1682-
function isGroupOrChannelChat(chat) {
1683-
return chat?.type === "group" || chat?.type === "supergroup" || chat?.type === "channel";
1684-
}
1685-
16861678
function isForwardedMessage(message) {
16871679
return Boolean(
16881680
message?.forward_origin ||
@@ -2367,3 +2359,8 @@ function getErrorStack(error) {
23672359

23682360
return null;
23692361
}
2362+
2363+
export const __botWorkerTestInternals = {
2364+
selectTargetDocument,
2365+
selectTargetUrl,
2366+
};
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import assert from "node:assert/strict";
2+
import test from "node:test";
3+
4+
import { __botWorkerTestInternals } from "../src/index.js";
5+
6+
const { selectTargetDocument, selectTargetUrl } = __botWorkerTestInternals;
7+
8+
const apkDocument = {
9+
file_id: "apk-file",
10+
file_name: "sample.apk",
11+
mime_type: "application/vnd.android.package-archive",
12+
};
13+
14+
test("private chats auto-analyze direct APK documents", () => {
15+
const message = {
16+
chat: { id: 1, type: "private" },
17+
document: apkDocument,
18+
};
19+
20+
assert.equal(selectTargetDocument(message, null, false, false), apkDocument);
21+
});
22+
23+
test("group chats ignore APK documents unless the bot is explicitly targeted", () => {
24+
const message = {
25+
chat: { id: -1, type: "supergroup" },
26+
document: apkDocument,
27+
};
28+
29+
assert.equal(selectTargetDocument(message, null, false, false), null);
30+
assert.equal(selectTargetDocument(message, null, false, true), apkDocument);
31+
assert.equal(selectTargetDocument(message, "apkinfo", false, false), apkDocument);
32+
});
33+
34+
test("group chats ignore APK links unless the bot is explicitly targeted", () => {
35+
const message = {
36+
chat: { id: -1, type: "group" },
37+
text: "https://example.com/sample.apk",
38+
};
39+
40+
assert.equal(selectTargetUrl(message, null, false, false), null);
41+
assert.equal(selectTargetUrl(message, null, false, true), "https://example.com/sample.apk");
42+
assert.equal(selectTargetUrl(message, "apkinfo", false, false), "https://example.com/sample.apk");
43+
});
44+
45+
test("private chats still auto-analyze direct APK links", () => {
46+
const message = {
47+
chat: { id: 1, type: "private" },
48+
text: "https://example.com/sample.apk",
49+
};
50+
51+
assert.equal(selectTargetUrl(message, null, false, false), "https://example.com/sample.apk");
52+
});

0 commit comments

Comments
 (0)