@leemour/cli-messaging 0.96.0 → 0.98.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/README.md +11 -3
- package/dist/cli/bot/admins.d.ts +10 -0
- package/dist/cli/bot/admins.d.ts.map +1 -0
- package/dist/cli/bot/admins.js +114 -0
- package/dist/cli/bot/admins.js.map +1 -0
- package/dist/cli/bot/command.d.ts +1 -1
- package/dist/cli/bot/command.d.ts.map +1 -1
- package/dist/cli/bot/command.js +60 -23
- package/dist/cli/bot/command.js.map +1 -1
- package/dist/cli/bot/context.d.ts +19 -1
- package/dist/cli/bot/context.d.ts.map +1 -1
- package/dist/cli/bot/context.js +44 -3
- package/dist/cli/bot/context.js.map +1 -1
- package/dist/cli/bot/copy.d.ts +19 -0
- package/dist/cli/bot/copy.d.ts.map +1 -0
- package/dist/cli/bot/copy.js +85 -0
- package/dist/cli/bot/copy.js.map +1 -0
- package/dist/cli/bot/messages.d.ts +10 -0
- package/dist/cli/bot/messages.d.ts.map +1 -0
- package/dist/cli/bot/messages.js +252 -0
- package/dist/cli/bot/messages.js.map +1 -0
- package/dist/cli/bot/port.d.ts +83 -5
- package/dist/cli/bot/port.d.ts.map +1 -1
- package/dist/cli/bot/port.js +2 -1
- package/dist/cli/bot/port.js.map +1 -1
- package/dist/cli/config-command.js +1 -1
- package/dist/cli/config-command.js.map +1 -1
- package/dist/cli/deadline.d.ts.map +1 -1
- package/dist/cli/deadline.js +11 -2
- package/dist/cli/deadline.js.map +1 -1
- package/dist/cli/index.d.ts +6 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/admin-moderation-command.js +2 -2
- package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
- package/dist/cli/messenger/ask.d.ts.map +1 -1
- package/dist/cli/messenger/ask.js +1 -1
- package/dist/cli/messenger/ask.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +18 -2
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +30 -8
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/download-command.d.ts.map +1 -1
- package/dist/cli/messenger/download-command.js +97 -30
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/guard-commands.js +3 -3
- package/dist/cli/messenger/guard-commands.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +12 -1
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts +3 -2
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +34 -4
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/cli/messenger/watch-command.d.ts +2 -1
- package/dist/cli/messenger/watch-command.d.ts.map +1 -1
- package/dist/cli/messenger/watch-command.js +11 -2
- package/dist/cli/messenger/watch-command.js.map +1 -1
- package/dist/domain/capabilities.d.ts +3 -0
- package/dist/domain/capabilities.d.ts.map +1 -1
- package/dist/kit/contract.d.ts +37 -0
- package/dist/kit/contract.d.ts.map +1 -0
- package/dist/kit/contract.js +408 -0
- package/dist/kit/contract.js.map +1 -0
- package/dist/kit/fake.d.ts +16 -0
- package/dist/kit/fake.d.ts.map +1 -0
- package/dist/kit/fake.js +457 -0
- package/dist/kit/fake.js.map +1 -0
- package/dist/kit/index.d.ts +4 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +4 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/seed.d.ts +38 -0
- package/dist/kit/seed.d.ts.map +1 -0
- package/dist/kit/seed.js +83 -0
- package/dist/kit/seed.js.map +1 -0
- package/dist/mcp/resources.d.ts +6 -1
- package/dist/mcp/resources.d.ts.map +1 -1
- package/dist/mcp/resources.js +14 -5
- package/dist/mcp/resources.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool.d.ts +12 -2
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +15 -8
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/chats.js +3 -3
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/contacts.js +3 -3
- package/dist/mcp/tools/contacts.js.map +1 -1
- package/dist/mcp/tools/inbox.d.ts.map +1 -1
- package/dist/mcp/tools/inbox.js +3 -4
- package/dist/mcp/tools/inbox.js.map +1 -1
- package/dist/mcp/tools/messages.d.ts.map +1 -1
- package/dist/mcp/tools/messages.js +5 -8
- package/dist/mcp/tools/messages.js.map +1 -1
- package/dist/mcp/tools/review.d.ts.map +1 -1
- package/dist/mcp/tools/review.js +3 -4
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/moderation/check.d.ts +3 -1
- package/dist/moderation/check.d.ts.map +1 -1
- package/dist/moderation/check.js +3 -2
- package/dist/moderation/check.js.map +1 -1
- package/dist/parity/audit.d.ts +11 -9
- package/dist/parity/audit.d.ts.map +1 -1
- package/dist/parity/audit.js +63 -46
- package/dist/parity/audit.js.map +1 -1
- package/dist/parity/bin.js +17 -8
- package/dist/parity/bin.js.map +1 -1
- package/dist/parity/catalogue.d.ts.map +1 -1
- package/dist/parity/catalogue.js +7 -1
- package/dist/parity/catalogue.js.map +1 -1
- package/dist/parity/manifest.d.ts +19 -12
- package/dist/parity/manifest.d.ts.map +1 -1
- package/dist/parity/manifest.js +60 -37
- package/dist/parity/manifest.js.map +1 -1
- package/dist/parity/pages.d.ts +3 -3
- package/dist/parity/pages.d.ts.map +1 -1
- package/dist/parity/pages.js +4 -5
- package/dist/parity/pages.js.map +1 -1
- package/dist/parity/seed.d.ts +11 -0
- package/dist/parity/seed.d.ts.map +1 -0
- package/dist/parity/seed.js +99 -0
- package/dist/parity/seed.js.map +1 -0
- package/dist/parity/wording.d.ts +4 -3
- package/dist/parity/wording.d.ts.map +1 -1
- package/dist/parity/wording.js +21 -10
- package/dist/parity/wording.js.map +1 -1
- package/dist/search/correct.d.ts +25 -0
- package/dist/search/correct.d.ts.map +1 -0
- package/dist/search/correct.js +65 -0
- package/dist/search/correct.js.map +1 -0
- package/dist/search/query.d.ts +5 -2
- package/dist/search/query.d.ts.map +1 -1
- package/dist/search/query.js +5 -4
- package/dist/search/query.js.map +1 -1
- package/dist/search/search.d.ts +27 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +65 -0
- package/dist/search/search.js.map +1 -0
- package/dist/sends/guarded.d.ts +12 -0
- package/dist/sends/guarded.d.ts.map +1 -1
- package/dist/sends/guarded.js +24 -2
- package/dist/sends/guarded.js.map +1 -1
- package/dist/services/archive.d.ts +8 -3
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +21 -2
- package/dist/services/archive.js.map +1 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +11 -7
- package/dist/services/chats.js.map +1 -1
- package/dist/services/deps.d.ts +13 -0
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/deps.js +12 -0
- package/dist/services/deps.js.map +1 -1
- package/dist/services/inbox.d.ts +13 -3
- package/dist/services/inbox.d.ts.map +1 -1
- package/dist/services/inbox.js +45 -15
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/messages.d.ts +9 -2
- package/dist/services/messages.d.ts.map +1 -1
- package/dist/services/messages.js +27 -4
- package/dist/services/messages.js.map +1 -1
- package/dist/services/moderation.d.ts.map +1 -1
- package/dist/services/moderation.js +7 -1
- package/dist/services/moderation.js.map +1 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +5 -4
- package/dist/services/people.js.map +1 -1
- package/dist/speech/hearing.d.ts +1 -1
- package/dist/speech/hearing.d.ts.map +1 -1
- package/dist/speech/hearing.js +2 -2
- package/dist/speech/hearing.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite/completeness.d.ts +17 -0
- package/dist/store/sqlite/completeness.d.ts.map +1 -0
- package/dist/store/sqlite/completeness.js +30 -0
- package/dist/store/sqlite/completeness.js.map +1 -0
- package/dist/store/sqlite/messages.d.ts +2 -2
- package/dist/store/sqlite/messages.d.ts.map +1 -1
- package/dist/store/sqlite/messages.js +14 -2
- package/dist/store/sqlite/messages.js.map +1 -1
- package/dist/store/sqlite/search-index.d.ts.map +1 -1
- package/dist/store/sqlite/search-index.js +45 -9
- package/dist/store/sqlite/search-index.js.map +1 -1
- package/dist/store/sqlite/search.d.ts +2 -0
- package/dist/store/sqlite/search.d.ts.map +1 -1
- package/dist/store/sqlite/search.js +27 -17
- package/dist/store/sqlite/search.js.map +1 -1
- package/dist/store/sqlite/words.d.ts +78 -0
- package/dist/store/sqlite/words.d.ts.map +1 -0
- package/dist/store/sqlite/words.js +237 -0
- package/dist/store/sqlite/words.js.map +1 -0
- package/dist/store/store.d.ts +35 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +14 -2
- package/dist/store/store.js.map +1 -1
- package/package.json +8 -3
- package/parity.json +533 -440
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
export { guardedClose, guardedCreatePoll, guardedVote } from "../sends/polls.js";
|
|
2
|
+
export type { InboxReader } from "../services/inbox.js";
|
|
2
3
|
export { INBOX_CHATS, newIn, REVIEW_CHATS, reviewIn, unanswered, unreadIn } from "../services/inbox.js";
|
|
3
4
|
export { momentOf } from "../services/moment.js";
|
|
4
5
|
export { maskedAccount } from "../services/people.js";
|
|
5
6
|
export { type AppIdentity, envName } from "./app.js";
|
|
7
|
+
export { botAdminsCommand, botMembersCommand } from "./bot/admins.js";
|
|
6
8
|
export { botCommand } from "./bot/command.js";
|
|
7
9
|
export { type BotContext, botContext, botWords } from "./bot/context.js";
|
|
8
|
-
export
|
|
10
|
+
export { type BotCopy, botCopy } from "./bot/copy.js";
|
|
11
|
+
export { botCan, botIdOf, botMessagesCommand } from "./bot/messages.js";
|
|
12
|
+
export { BOT_ACTIONS, type BotAction, type BotAdapter, type BotChatAdmin, type BotChatAdmins, type BotChatMembers, type BotChatRef, type BotChatTools, type BotConnectOptions, type BotHistory, type BotMessaging, type BotMessenger, type BotPeople, type BotSendOptions, } from "./bot/port.js";
|
|
9
13
|
export { botFiles, botsDirectory, ChatRegistry, registryProfiles, type SeenChat } from "./bot/registry.js";
|
|
10
14
|
export { BotTokenStore, type BotTokenStoreOptions } from "./bot/token.js";
|
|
11
15
|
export { CONTRACT, commandsCommand } from "./commands-command.js";
|
|
@@ -33,7 +37,7 @@ export { forwardCommand } from "./messenger/messages-forward-command.js";
|
|
|
33
37
|
export { pinCommand, unpinCommand } from "./messenger/messages-pin-command.js";
|
|
34
38
|
export { modelsCommand } from "./messenger/models-command.js";
|
|
35
39
|
export { pollsCommand } from "./messenger/polls-command.js";
|
|
36
|
-
export type { AccountTools, After, ChatReading, Download, GroupModeration, LiveUpdates, MessageEditing, MessageMedia, MessagePins, MessagePolls, MessageReactions, MessengerAdapter, MessengerCore, NewPoll, ReadState, RemoteFile, ScheduledMessages, SendOptions, Sent, Transcript, } from "./messenger/port.js";
|
|
40
|
+
export type { AccountTools, After, ChatReading, Download, GroupModeration, HistoryBatch, LiveUpdates, MessageEditing, MessageMedia, MessagePins, MessagePolls, MessageReactions, MessengerAdapter, MessengerCore, NewPoll, PushedHistory, ReadState, RemoteFile, ScheduledMessages, SendOptions, Sent, Transcript, } from "./messenger/port.js";
|
|
37
41
|
export { reactionsCommand } from "./messenger/reactions-command.js";
|
|
38
42
|
export { reviewCommand } from "./messenger/review.js";
|
|
39
43
|
export { serveCommand, servingProfiles } from "./messenger/serve-command.js";
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,KAAK,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACxE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -3,8 +3,12 @@ export { INBOX_CHATS, newIn, REVIEW_CHATS, reviewIn, unanswered, unreadIn } from
|
|
|
3
3
|
export { momentOf } from "../services/moment.js";
|
|
4
4
|
export { maskedAccount } from "../services/people.js";
|
|
5
5
|
export { envName } from "./app.js";
|
|
6
|
+
export { botAdminsCommand, botMembersCommand } from "./bot/admins.js";
|
|
6
7
|
export { botCommand } from "./bot/command.js";
|
|
7
8
|
export { botContext, botWords } from "./bot/context.js";
|
|
9
|
+
export { botCopy } from "./bot/copy.js";
|
|
10
|
+
export { botCan, botIdOf, botMessagesCommand } from "./bot/messages.js";
|
|
11
|
+
export { BOT_ACTIONS, } from "./bot/port.js";
|
|
8
12
|
export { botFiles, botsDirectory, ChatRegistry, registryProfiles } from "./bot/registry.js";
|
|
9
13
|
export { BotTokenStore } from "./bot/token.js";
|
|
10
14
|
export { CONTRACT, commandsCommand } from "./commands-command.js";
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export const rulesCommand = (messenger) => {
|
|
|
17
17
|
const context = messengerContext(this, messenger);
|
|
18
18
|
context.renderer.result(await context.withServices((services) => services.moderation.rules(chat)));
|
|
19
19
|
});
|
|
20
|
-
rules.addCommand(annotate(new Command("set"), { mutates: true })
|
|
20
|
+
rules.addCommand(annotate(new Command("set"), { mutates: true, local: true })
|
|
21
21
|
.description("change one rule; the group's first change writes every rule with its default")
|
|
22
22
|
.argument("<chat>", messenger.chatArgument)
|
|
23
23
|
.argument("<key>", `one of: ${RULE_KEYS.join(", ")}`)
|
|
@@ -26,7 +26,7 @@ export const rulesCommand = (messenger) => {
|
|
|
26
26
|
const context = messengerContext(this, messenger);
|
|
27
27
|
context.renderer.result(await context.withServices((services) => services.moderation.set(chat, key, value)));
|
|
28
28
|
}));
|
|
29
|
-
rules.addCommand(annotate(new Command("unset"), { mutates: true })
|
|
29
|
+
rules.addCommand(annotate(new Command("unset"), { mutates: true, local: true })
|
|
30
30
|
.description("put one rule back to its default")
|
|
31
31
|
.argument("<chat>", messenger.chatArgument)
|
|
32
32
|
.argument("<key>", `one of: ${RULE_KEYS.join(", ")}`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-moderation-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAkB,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/D,gIAAgI;AAChI,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAoB,EAAW,EAAE;IAC5D,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAC5C,yEAAyE,CAC1E,CAAA;IACD,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uEAAuE,CAAC;SACpF,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC;SAC1C,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpG,CAAC,CAAC,CAAA;IACJ,KAAK,CAAC,UAAU,CACd,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"admin-moderation-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/admin-moderation-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/ask.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAGjD,4GAA4G;AAC5G,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/ask.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAGjD,4GAA4G;AAC5G,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,mBAAmB,GAAG,OAC4B,CAAA;AAuC5F,wGAAwG;AACxG,eAAO,MAAM,QAAQ,YAAmB,OAAO,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAIxF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,YACd,OAAO,KAAG,KAsBnB,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { ReadStream } from "node:tty";
|
|
|
4
4
|
import { CliError } from "@leemour/cli-core";
|
|
5
5
|
import { environmentOf } from "../context.js";
|
|
6
6
|
/** Deleting has its own word for "yes": the flag a person has to mean, not a habit (max-cli `NEED-238`). */
|
|
7
|
-
export const skipFlagFor = (key) => key === "messages.delete" ? "--allow-dangerous" : "--yes";
|
|
7
|
+
export const skipFlagFor = (key) => key === "messages.delete" || key === "bot.messages.delete" ? "--allow-dangerous" : "--yes";
|
|
8
8
|
/**
|
|
9
9
|
* One line from the terminal itself, not stdin — stdin may be the text being sent. `null` when no
|
|
10
10
|
* person is there. Ctrl-C and a closed terminal cancel, as `readSecret` does.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../src/cli/messenger/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,4GAA4G;AAC5G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAiC,EAAE,CACxE,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../src/cli/messenger/ask.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { AdminRight, Chat, GroupSettings, Id, Provider } from "../../domain
|
|
|
3
3
|
import { type SendGuard } from "../../sends/guard.js";
|
|
4
4
|
import { type Override, type Services } from "../../services/index.js";
|
|
5
5
|
import type { OpenRecognizer } from "../../speech/transcribe.js";
|
|
6
|
-
import { type AccountKey, type MessageStore } from "../../store/store.js";
|
|
6
|
+
import { type AccountKey, type DeletionScope, type MessageStore } from "../../store/store.js";
|
|
7
7
|
import type { AppIdentity } from "../app.js";
|
|
8
8
|
import { type BaseContext } from "../context.js";
|
|
9
9
|
import type { EventSink } from "../runs/events.js";
|
|
@@ -50,6 +50,11 @@ export interface Messenger {
|
|
|
50
50
|
groupSettings?: readonly (keyof GroupSettings)[];
|
|
51
51
|
/** Whether the messenger says when an account was made — the moderation rule `newAccount`; yes when unset. */
|
|
52
52
|
knowsAccountAge?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* This messenger's invite links, which `chats moderate` judges under `invites`. Telegram's and MAX's
|
|
55
|
+
* are built in for now.
|
|
56
|
+
*/
|
|
57
|
+
inviteLinks?: RegExp;
|
|
53
58
|
/** Whether people added can be shown the messages from before they came — `members add --history`; yes when unset. */
|
|
54
59
|
addsWithHistory?: boolean;
|
|
55
60
|
/** The admin rights this messenger has, as `admins add --can` offers them; every one when unset. */
|
|
@@ -58,8 +63,19 @@ export interface Messenger {
|
|
|
58
63
|
savedChatId?: (account: AccountKey) => Id;
|
|
59
64
|
/** The other person in a one-to-one chat, when the chat says who — a recipient list matches on it. */
|
|
60
65
|
partnerOf?: (chat: Chat) => Id | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Whether a stored chat may hold a message the messenger deleted without naming its chat. When
|
|
68
|
+
* unset, the store applies Telegram's rule.
|
|
69
|
+
*/
|
|
70
|
+
deletedWithoutChat?: DeletionScope;
|
|
61
71
|
/** How `store fetch` reads this messenger's history, where Telegram's defaults do not fit it. */
|
|
62
72
|
fetching?: Fetching;
|
|
73
|
+
/**
|
|
74
|
+
* Where `chats`, `messages list|context` and `contacts` read from. `store` is for a messenger that
|
|
75
|
+
* pushes its history instead of answering for it: those reads answer from the local store, which
|
|
76
|
+
* `serve` keeps filled, and never connect; writes still do. `server` when unset.
|
|
77
|
+
*/
|
|
78
|
+
history?: "server" | "store";
|
|
63
79
|
/** Speech model ids, most suitable first, for `messages transcribe --local`; the first is the default. */
|
|
64
80
|
speechModels?: readonly string[];
|
|
65
81
|
/** Replaces shared use cases for this messenger; its commands and MCP tools both get the replacement. */
|
|
@@ -102,7 +118,7 @@ export interface MessengerContext extends BaseContext {
|
|
|
102
118
|
* the reads answer saved to the store. `close` closes the connection and the store it opened. One
|
|
103
119
|
* function, so a command and an MCP tool call save and record exactly alike.
|
|
104
120
|
*/
|
|
105
|
-
export declare const connected: (connection: MessengerAdapter, { app, provider }: Pick<Messenger, "app" | "provider">, { settings, env, renderer }: Pick<BaseContext, "settings" | "env" | "renderer">, events: EventSink) => {
|
|
121
|
+
export declare const connected: (connection: MessengerAdapter, { app, provider, deletedWithoutChat }: Pick<Messenger, "app" | "provider" | "deletedWithoutChat">, { settings, env, renderer }: Pick<BaseContext, "settings" | "env" | "renderer">, events: EventSink) => {
|
|
106
122
|
adapter: MessengerAdapter;
|
|
107
123
|
close: () => Promise<void>;
|
|
108
124
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
import { servingProfiles } from "../../background/lock.js";
|
|
2
3
|
import { guardFor } from "../../sends/guard.js";
|
|
3
4
|
import { keyForCommand, levelFor } from "../../sends/permissions.js";
|
|
4
5
|
import { OFFLINE, servicesFor } from "../../services/index.js";
|
|
@@ -30,7 +31,7 @@ const settled = async (pending, ms) => {
|
|
|
30
31
|
* the reads answer saved to the store. `close` closes the connection and the store it opened. One
|
|
31
32
|
* function, so a command and an MCP tool call save and record exactly alike.
|
|
32
33
|
*/
|
|
33
|
-
export const connected = (connection, { app, provider }, { settings, env, renderer }, events) => {
|
|
34
|
+
export const connected = (connection, { app, provider, deletedWithoutChat }, { settings, env, renderer }, events) => {
|
|
34
35
|
const self = connection.self();
|
|
35
36
|
if (self !== null)
|
|
36
37
|
rememberAccount(app, settings.profile, self, env);
|
|
@@ -49,6 +50,7 @@ export const connected = (connection, { app, provider }, { settings, env, render
|
|
|
49
50
|
warn: renderer.warn,
|
|
50
51
|
events,
|
|
51
52
|
pending,
|
|
53
|
+
...(deletedWithoutChat ? { deletedWithoutChat } : {}),
|
|
52
54
|
}),
|
|
53
55
|
close: async () => {
|
|
54
56
|
await connection.close();
|
|
@@ -61,6 +63,23 @@ export const connected = (connection, { app, provider }, { settings, env, render
|
|
|
61
63
|
},
|
|
62
64
|
};
|
|
63
65
|
};
|
|
66
|
+
const unrecorded = (messenger, profile) => new CliError("not_found", messenger.history === "store"
|
|
67
|
+
? `nothing recorded for profile "${profile}" yet — run \`${messenger.app.command} serve\` or ` +
|
|
68
|
+
`\`${messenger.app.command} watch\` once to fill the local store`
|
|
69
|
+
: `nothing recorded for profile "${profile}" yet — run the command once without --offline`);
|
|
70
|
+
/** NEED-506 A: without it, an agent cannot tell a quiet chat from a store nothing keeps up to date. */
|
|
71
|
+
const warnUnserved = async (messenger, profile, { env, renderer }, store) => {
|
|
72
|
+
if (servingProfiles(messenger.app, env).includes(profile))
|
|
73
|
+
return;
|
|
74
|
+
const account = recalledAccount(messenger.app, messenger.provider, profile, env);
|
|
75
|
+
if (!account)
|
|
76
|
+
return;
|
|
77
|
+
const newest = (await store.chatStats(account))
|
|
78
|
+
.map((one) => one.newestAt)
|
|
79
|
+
.reduce((latest, at) => (at !== null && (latest === null || at > latest) ? at : latest), null);
|
|
80
|
+
renderer.warn(`no \`${messenger.app.command} serve\` keeps profile "${profile}" up to date — ` +
|
|
81
|
+
(newest === null ? "the local store holds no messages yet" : `the newest stored message is from ${newest}`));
|
|
82
|
+
};
|
|
64
83
|
/** The words of a command below the program, `["messages", "list"]` — the profile word is not one of them. */
|
|
65
84
|
const pathOf = (command) => {
|
|
66
85
|
const words = [];
|
|
@@ -107,9 +126,8 @@ export const messengerContext = (command, messenger) => {
|
|
|
107
126
|
}, { unbounded: options.listen === true }),
|
|
108
127
|
withStore: (work, { name } = {}) => base.run(async () => {
|
|
109
128
|
const account = recalledAccount(app, provider, profile, base.env);
|
|
110
|
-
if (!account)
|
|
111
|
-
throw
|
|
112
|
-
}
|
|
129
|
+
if (!account)
|
|
130
|
+
throw unrecorded(messenger, profile);
|
|
113
131
|
const store = await openStore({ env: base.env });
|
|
114
132
|
try {
|
|
115
133
|
return await work(store, account);
|
|
@@ -126,6 +144,7 @@ export const messengerContext = (command, messenger) => {
|
|
|
126
144
|
profile,
|
|
127
145
|
env: base.env,
|
|
128
146
|
offline: base.settings.offline,
|
|
147
|
+
reads: messenger.history ?? "server",
|
|
129
148
|
guard,
|
|
130
149
|
connection: async () => {
|
|
131
150
|
if (base.settings.offline)
|
|
@@ -139,13 +158,16 @@ export const messengerContext = (command, messenger) => {
|
|
|
139
158
|
},
|
|
140
159
|
account: async () => {
|
|
141
160
|
const account = recalledAccount(app, provider, profile, base.env);
|
|
142
|
-
if (!account)
|
|
143
|
-
throw
|
|
144
|
-
}
|
|
161
|
+
if (!account)
|
|
162
|
+
throw unrecorded(messenger, profile);
|
|
145
163
|
return account;
|
|
146
164
|
},
|
|
147
165
|
store: () => {
|
|
148
|
-
store ??= openStore({ env: base.env })
|
|
166
|
+
store ??= openStore({ env: base.env }).then(async (opened) => {
|
|
167
|
+
if (messenger.history === "store")
|
|
168
|
+
await warnUnserved(messenger, profile, base, opened);
|
|
169
|
+
return opened;
|
|
170
|
+
});
|
|
149
171
|
return store;
|
|
150
172
|
},
|
|
151
173
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/messenger/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/download-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"download-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/download-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOxC,OAAO,EAAiB,KAAK,SAAS,EAA2C,MAAM,cAAc,CAAA;AAErG,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,WAAW,CAAA;AAEvD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,iGAAiG;IACjG,QAAQ,CAAC,EAAE,IAAI,CAAA;CAChB;AAED,wHAAwH;AACxH,eAAO,MAAM,kBAAkB,aAAc,OAAO,aAAa,SAAS,KAAG,OAiCvE,CAAA;AA+ON;;;GAGG;AACH,eAAO,MAAM,QAAQ,SAAU,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAQ5D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,SACT,UAAU,aACL,MAAM,gBACH,MAAM,eACA;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACvC,OAAO,CAAC,KAAK,CAgCf,CAAA"}
|
|
@@ -5,6 +5,8 @@ import { Readable, Transform } from "node:stream";
|
|
|
5
5
|
import { pipeline } from "node:stream/promises";
|
|
6
6
|
import { setTimeout as sleep } from "node:timers/promises";
|
|
7
7
|
import { CliError } from "@leemour/cli-core";
|
|
8
|
+
import { FETCHING, keyOf } from "../../services/archive.js";
|
|
9
|
+
import { OFFLINE } from "../../services/deps.js";
|
|
8
10
|
import { patiently } from "../../services/patience.js";
|
|
9
11
|
import { parseDuration } from "../settings.js";
|
|
10
12
|
import { messengerContext } from "./context.js";
|
|
@@ -26,7 +28,7 @@ export const downloadSubcommand = (messages, messenger) => messages
|
|
|
26
28
|
throw new CliError("validation_error", "--all saves the whole chat; leave out the message id");
|
|
27
29
|
}
|
|
28
30
|
if (all) {
|
|
29
|
-
await downloadChat(this, context, chat, output, parseDuration(pause, "--pause"));
|
|
31
|
+
await downloadChat(this, context, messenger, chat, output, parseDuration(pause, "--pause"));
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
34
|
if (messageId === undefined)
|
|
@@ -56,22 +58,29 @@ const PAGE = 100;
|
|
|
56
58
|
/** Attachments that are never a file, so their messages cost no download request. */
|
|
57
59
|
const NOT_FILES = new Set(["webpage", "share", "poll", "location", "contact"]);
|
|
58
60
|
/**
|
|
59
|
-
* Stretches of message
|
|
60
|
-
* this would need a migration for. Written after every message with a file, so a run cut
|
|
61
|
-
* `--timeout` or Ctrl-C repeats at most the file it was in the middle of.
|
|
61
|
+
* Stretches of message keys already walked (`keyOf`), in a dot file beside the files — not in the
|
|
62
|
+
* store, which this would need a migration for. Written after every message with a file, so a run cut
|
|
63
|
+
* short by `--timeout` or Ctrl-C repeats at most the file it was in the middle of.
|
|
62
64
|
*/
|
|
63
65
|
const progressFile = (output, chatId) => join(output, `.download-${chatId.replace(/[^\w-]/g, "_")}.json`);
|
|
64
|
-
|
|
66
|
+
/** A file from before `by` was written is keyed by id. One keyed the other way is set aside, not misread. */
|
|
67
|
+
const readProgress = (path, by, note) => {
|
|
65
68
|
if (!existsSync(path))
|
|
66
69
|
return [];
|
|
67
|
-
const { done } = JSON.parse(readFileSync(path, "utf8"));
|
|
70
|
+
const { done, by: was = "id" } = JSON.parse(readFileSync(path, "utf8"));
|
|
71
|
+
if (was !== by) {
|
|
72
|
+
note(`${path} counts messages by ${was}, this messenger by ${by} — starting from the newest again`);
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
68
75
|
return Array.isArray(done) ? done : [];
|
|
69
76
|
};
|
|
70
|
-
const writeProgress = (path, chatId,
|
|
71
|
-
writeFileSync(`${path}.tmp`, `${JSON.stringify({ chat: chatId,
|
|
77
|
+
const writeProgress = (path, chatId, progress) => {
|
|
78
|
+
writeFileSync(`${path}.tmp`, `${JSON.stringify({ chat: chatId, ...progress })}\n`, { mode: 0o600 });
|
|
72
79
|
renameSync(`${path}.tmp`, path);
|
|
73
80
|
};
|
|
74
|
-
const downloadChat = async (command, context, chat, output, pauseMs) => {
|
|
81
|
+
const downloadChat = async (command, context, messenger, chat, output, pauseMs) => {
|
|
82
|
+
if (context.settings.offline)
|
|
83
|
+
throw new CliError("validation_error", OFFLINE);
|
|
75
84
|
const items = [];
|
|
76
85
|
const onSaved = (one) => {
|
|
77
86
|
if (context.format === "pretty")
|
|
@@ -84,7 +93,15 @@ const downloadChat = async (command, context, chat, output, pauseMs) => {
|
|
|
84
93
|
const stop = stopOnSignal(command);
|
|
85
94
|
try {
|
|
86
95
|
mkdirSync(output, { recursive: true });
|
|
87
|
-
const result = await context.
|
|
96
|
+
const result = await context.withServices((services) => walkChat(services.messages, chat, {
|
|
97
|
+
output,
|
|
98
|
+
pauseMs,
|
|
99
|
+
fetching: messenger.fetching ?? FETCHING,
|
|
100
|
+
fromStore: messenger.history === "store",
|
|
101
|
+
stop: stop.signal,
|
|
102
|
+
note: context.renderer.note,
|
|
103
|
+
onSaved,
|
|
104
|
+
}));
|
|
88
105
|
if (context.format === "json")
|
|
89
106
|
context.renderer.result({ items, ...result });
|
|
90
107
|
else
|
|
@@ -95,13 +112,40 @@ const downloadChat = async (command, context, chat, output, pauseMs) => {
|
|
|
95
112
|
}
|
|
96
113
|
};
|
|
97
114
|
const summary = ({ saved, existing, complete }) => `${saved} saved${existing > 0 ? `, ${existing} already there` : ""}${complete ? " — the whole chat" : " — run it again to continue"}`;
|
|
115
|
+
/** Both stretches as one, keeping by time the messages walked at its two ends. */
|
|
116
|
+
const joined = (a, b) => {
|
|
117
|
+
const from = Math.min(a.from, b.from);
|
|
118
|
+
const to = Math.max(a.to, b.to);
|
|
119
|
+
if (a.atFrom === undefined && b.atFrom === undefined)
|
|
120
|
+
return { from, to };
|
|
121
|
+
const at = (moment) => [
|
|
122
|
+
...new Set([a, b].flatMap((one) => [
|
|
123
|
+
...(one.from === moment ? (one.atFrom ?? []) : []),
|
|
124
|
+
...(one.to === moment ? (one.atTo ?? []) : []),
|
|
125
|
+
])),
|
|
126
|
+
];
|
|
127
|
+
return { from, to, atFrom: at(from), atTo: at(to) };
|
|
128
|
+
};
|
|
98
129
|
/**
|
|
99
|
-
* Newest to oldest, page by page
|
|
100
|
-
*
|
|
130
|
+
* Newest to oldest, page by page, through the messages service — so a messenger whose history lives
|
|
131
|
+
* in the local store pages the store, and only the files come from the messenger. A stretch an earlier
|
|
132
|
+
* run walked is jumped over, and joins this run's, so the progress file stays a few stretches however
|
|
133
|
+
* often the download is cut and resumed.
|
|
134
|
+
*
|
|
135
|
+
* By time, the messenger pages back from an ISO time (`Fetching.orderBy`), and messages share a moment:
|
|
136
|
+
* a page is asked for up to and including the oldest moment seen, so none sent then is skipped, and
|
|
137
|
+
* what this run already walked is passed over. A stretch's ends hold only the messages it names.
|
|
101
138
|
*/
|
|
102
|
-
const walkChat = async (
|
|
103
|
-
const
|
|
139
|
+
const walkChat = async (messages, chat, { output, pauseMs, fetching, fromStore, stop, note, onSaved }) => {
|
|
140
|
+
const by = fetching.orderBy ?? "id";
|
|
141
|
+
const keyed = keyOf(fetching);
|
|
142
|
+
const pagesByTime = by === "time" && !fromStore;
|
|
143
|
+
const inside = ({ from, to, atFrom, atTo }, key, id) => by === "time"
|
|
144
|
+
? (from < key && key < to) || (key === from && !!atFrom?.includes(id)) || (key === to && !!atTo?.includes(id))
|
|
145
|
+
: from <= key && key <= to;
|
|
146
|
+
const point = (key, id) => by === "time" ? { from: key, to: key, atFrom: [id], atTo: [id] } : { from: key, to: key };
|
|
104
147
|
let before;
|
|
148
|
+
let beforeMs = Number.POSITIVE_INFINITY;
|
|
105
149
|
let chatId;
|
|
106
150
|
let path = "";
|
|
107
151
|
let done = [];
|
|
@@ -111,10 +155,14 @@ const walkChat = async (connection, chat, { output, pauseMs, stop, note, onSaved
|
|
|
111
155
|
let complete = false;
|
|
112
156
|
const remember = () => {
|
|
113
157
|
if (chatId !== undefined)
|
|
114
|
-
writeProgress(path, chatId, run ? [...done, run] : done);
|
|
158
|
+
writeProgress(path, chatId, { by, done: run ? [...done, run] : done });
|
|
159
|
+
};
|
|
160
|
+
const backTo = (ms) => {
|
|
161
|
+
beforeMs = ms;
|
|
162
|
+
before = new Date(ms).toISOString();
|
|
115
163
|
};
|
|
116
164
|
pages: while (!stop.aborted) {
|
|
117
|
-
const page = await patiently(() =>
|
|
165
|
+
const page = await patiently(() => messages.list(chat, { limit: PAGE, ...(before ? { before } : {}) }), note, stop);
|
|
118
166
|
const first = page.items[0];
|
|
119
167
|
if (!first) {
|
|
120
168
|
complete = true;
|
|
@@ -123,26 +171,36 @@ const walkChat = async (connection, chat, { output, pauseMs, stop, note, onSaved
|
|
|
123
171
|
if (chatId === undefined) {
|
|
124
172
|
chatId = first.chatId;
|
|
125
173
|
path = progressFile(output, chatId);
|
|
126
|
-
done = readProgress(path);
|
|
174
|
+
done = readProgress(path, by, note);
|
|
127
175
|
}
|
|
128
|
-
const newestFirst = page.items.toReversed().map((message) => ({ message, key:
|
|
129
|
-
// The stretches in the progress file compare ids as numbers; the order itself is the adapter's.
|
|
176
|
+
const newestFirst = page.items.toReversed().map((message) => ({ message, key: keyed(message) }));
|
|
130
177
|
if (newestFirst.some(({ key }) => !Number.isSafeInteger(key))) {
|
|
131
|
-
throw new CliError("validation_error",
|
|
178
|
+
throw new CliError("validation_error", by === "id"
|
|
179
|
+
? "this messenger's message ids are not whole numbers, so --all cannot resume"
|
|
180
|
+
: "a message here has no send time, so --all cannot resume");
|
|
132
181
|
}
|
|
182
|
+
let fresh = 0;
|
|
133
183
|
for (const { message, key } of newestFirst) {
|
|
134
184
|
if (stop.aborted)
|
|
135
185
|
break pages;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
186
|
+
if (run && inside(run, key, message.id))
|
|
187
|
+
continue;
|
|
188
|
+
fresh += 1;
|
|
189
|
+
const known = done.find((one) => inside(one, key, message.id));
|
|
190
|
+
if (known) {
|
|
191
|
+
done = done.filter((one) => one !== known);
|
|
192
|
+
run = run ? joined(run, known) : known;
|
|
140
193
|
remember();
|
|
141
|
-
|
|
194
|
+
if (fromStore)
|
|
195
|
+
continue;
|
|
196
|
+
if (pagesByTime)
|
|
197
|
+
backTo(known.from + 1);
|
|
198
|
+
else
|
|
199
|
+
before = String(known.from);
|
|
142
200
|
continue pages;
|
|
143
201
|
}
|
|
144
202
|
if (message.attachments.some(({ kind }) => !NOT_FILES.has(kind))) {
|
|
145
|
-
const { files } = await patiently(() => download(chat, message.id), note, stop);
|
|
203
|
+
const { files } = await patiently(() => messages.download(chat, message.id), note, stop);
|
|
146
204
|
for (const [index, file] of files.entries()) {
|
|
147
205
|
const one = await patiently(() => save(file, output, `${message.id}-${index + 1}`, { unique: true }), note, stop);
|
|
148
206
|
if (one.existing)
|
|
@@ -151,19 +209,28 @@ const walkChat = async (connection, chat, { output, pauseMs, stop, note, onSaved
|
|
|
151
209
|
saved += 1;
|
|
152
210
|
onSaved(one);
|
|
153
211
|
}
|
|
154
|
-
run =
|
|
212
|
+
run = run ? joined(run, point(key, message.id)) : point(key, message.id);
|
|
155
213
|
remember();
|
|
156
214
|
}
|
|
157
215
|
else
|
|
158
|
-
run =
|
|
216
|
+
run = run ? joined(run, point(key, message.id)) : point(key, message.id);
|
|
159
217
|
}
|
|
160
218
|
remember();
|
|
161
219
|
if (!page.hasMore) {
|
|
162
220
|
complete = true;
|
|
163
221
|
break;
|
|
164
222
|
}
|
|
165
|
-
|
|
166
|
-
|
|
223
|
+
const oldest = newestFirst.at(-1);
|
|
224
|
+
if (pagesByTime && oldest) {
|
|
225
|
+
// A page of nothing new means one moment holds more than a page: step past it rather than loop.
|
|
226
|
+
if (fresh > 0)
|
|
227
|
+
backTo(oldest.key + 1);
|
|
228
|
+
else
|
|
229
|
+
backTo(Math.min(beforeMs - 1, oldest.key));
|
|
230
|
+
}
|
|
231
|
+
else
|
|
232
|
+
before = oldest?.message.id;
|
|
233
|
+
note(`${saved} files so far, back to message ${oldest?.message.id}`);
|
|
167
234
|
await sleep(pauseMs, undefined, { signal: stop }).catch(() => { });
|
|
168
235
|
}
|
|
169
236
|
remember();
|