@wirecat/tg-cli 0.0.0 → 0.43.1
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/LICENSE +204 -0
- package/README.md +527 -0
- package/THIRD_PARTY_NOTICES +55 -0
- package/dist/app.d.ts +11 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +16 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/tg.d.ts +3 -0
- package/dist/bin/tg.d.ts.map +1 -0
- package/dist/bin/tg.js +18 -0
- package/dist/bin/tg.js.map +1 -0
- package/dist/bot/adapter.d.ts +9 -0
- package/dist/bot/adapter.d.ts.map +1 -0
- package/dist/bot/adapter.js +171 -0
- package/dist/bot/adapter.js.map +1 -0
- package/dist/bot/generated/definitions.d.ts +3 -0
- package/dist/bot/generated/definitions.d.ts.map +1 -0
- package/dist/bot/generated/definitions.js +19104 -0
- package/dist/bot/generated/definitions.js.map +1 -0
- package/dist/bot/generated/manifest.d.ts +3 -0
- package/dist/bot/generated/manifest.d.ts.map +1 -0
- package/dist/bot/generated/manifest.js +15354 -0
- package/dist/bot/generated/manifest.js.map +1 -0
- package/dist/bot/generated/schemas.d.ts +1407 -0
- package/dist/bot/generated/schemas.d.ts.map +1 -0
- package/dist/bot/generated/schemas.js +5118 -0
- package/dist/bot/generated/schemas.js.map +1 -0
- package/dist/bot/generated/types.d.ts +6884 -0
- package/dist/bot/generated/types.d.ts.map +1 -0
- package/dist/bot/generated/types.js +5 -0
- package/dist/bot/generated/types.js.map +1 -0
- package/dist/bot/map.d.ts +122 -0
- package/dist/bot/map.d.ts.map +1 -0
- package/dist/bot/map.js +193 -0
- package/dist/bot/map.js.map +1 -0
- package/dist/bot/proxy.d.ts +15 -0
- package/dist/bot/proxy.d.ts.map +1 -0
- package/dist/bot/proxy.js +64 -0
- package/dist/bot/proxy.js.map +1 -0
- package/dist/bot/transport.d.ts +42 -0
- package/dist/bot/transport.d.ts.map +1 -0
- package/dist/bot/transport.js +158 -0
- package/dist/bot/transport.js.map +1 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +18 -0
- package/dist/browser.js.map +1 -0
- package/dist/commands/bot-api.d.ts +3 -0
- package/dist/commands/bot-api.d.ts.map +1 -0
- package/dist/commands/bot-api.js +112 -0
- package/dist/commands/bot-api.js.map +1 -0
- package/dist/commands/bot.d.ts +7 -0
- package/dist/commands/bot.d.ts.map +1 -0
- package/dist/commands/bot.js +99 -0
- package/dist/commands/bot.js.map +1 -0
- package/dist/commands/context.d.ts +59 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +176 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/proxy-config.d.ts +9 -0
- package/dist/commands/proxy-config.d.ts.map +1 -0
- package/dist/commands/proxy-config.js +63 -0
- package/dist/commands/proxy-config.js.map +1 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +191 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +203 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +35 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/install/postinstall.d.ts +8 -0
- package/dist/install/postinstall.d.ts.map +1 -0
- package/dist/install/postinstall.js +62 -0
- package/dist/install/postinstall.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +11 -0
- package/dist/paths.js.map +1 -0
- package/dist/program.d.ts +8 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +138 -0
- package/dist/program.js.map +1 -0
- package/dist/proxy.d.ts +31 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +99 -0
- package/dist/proxy.js.map +1 -0
- package/dist/telegram/adapter.d.ts +432 -0
- package/dist/telegram/adapter.d.ts.map +1 -0
- package/dist/telegram/adapter.js +1898 -0
- package/dist/telegram/adapter.js.map +1 -0
- package/dist/telegram/bot-history.d.ts +18 -0
- package/dist/telegram/bot-history.d.ts.map +1 -0
- package/dist/telegram/bot-history.js +145 -0
- package/dist/telegram/bot-history.js.map +1 -0
- package/dist/telegram/comments.d.ts +18 -0
- package/dist/telegram/comments.d.ts.map +1 -0
- package/dist/telegram/comments.js +48 -0
- package/dist/telegram/comments.js.map +1 -0
- package/dist/telegram/credentials.d.ts +22 -0
- package/dist/telegram/credentials.d.ts.map +1 -0
- package/dist/telegram/credentials.js +49 -0
- package/dist/telegram/credentials.js.map +1 -0
- package/dist/telegram/errors.d.ts +6 -0
- package/dist/telegram/errors.d.ts.map +1 -0
- package/dist/telegram/errors.js +186 -0
- package/dist/telegram/errors.js.map +1 -0
- package/dist/telegram/folder-rules.d.ts +14 -0
- package/dist/telegram/folder-rules.d.ts.map +1 -0
- package/dist/telegram/folder-rules.js +23 -0
- package/dist/telegram/folder-rules.js.map +1 -0
- package/dist/telegram/format-html.d.ts +4 -0
- package/dist/telegram/format-html.d.ts.map +1 -0
- package/dist/telegram/format-html.js +29 -0
- package/dist/telegram/format-html.js.map +1 -0
- package/dist/telegram/format-markdown.d.ts +3 -0
- package/dist/telegram/format-markdown.d.ts.map +1 -0
- package/dist/telegram/format-markdown.js +160 -0
- package/dist/telegram/format-markdown.js.map +1 -0
- package/dist/telegram/join-requests.d.ts +15 -0
- package/dist/telegram/join-requests.d.ts.map +1 -0
- package/dist/telegram/join-requests.js +35 -0
- package/dist/telegram/join-requests.js.map +1 -0
- package/dist/telegram/map.d.ts +92 -0
- package/dist/telegram/map.d.ts.map +1 -0
- package/dist/telegram/map.js +471 -0
- package/dist/telegram/map.js.map +1 -0
- package/dist/telegram/poll-voters.d.ts +15 -0
- package/dist/telegram/poll-voters.d.ts.map +1 -0
- package/dist/telegram/poll-voters.js +31 -0
- package/dist/telegram/poll-voters.js.map +1 -0
- package/dist/telegram/polls.d.ts +5 -0
- package/dist/telegram/polls.d.ts.map +1 -0
- package/dist/telegram/polls.js +20 -0
- package/dist/telegram/polls.js.map +1 -0
- package/dist/telegram/profile.d.ts +9 -0
- package/dist/telegram/profile.d.ts.map +1 -0
- package/dist/telegram/profile.js +175 -0
- package/dist/telegram/profile.js.map +1 -0
- package/dist/telegram/proxy.d.ts +48 -0
- package/dist/telegram/proxy.d.ts.map +1 -0
- package/dist/telegram/proxy.js +108 -0
- package/dist/telegram/proxy.js.map +1 -0
- package/dist/telegram/registration.d.ts +31 -0
- package/dist/telegram/registration.d.ts.map +1 -0
- package/dist/telegram/registration.js +95 -0
- package/dist/telegram/registration.js.map +1 -0
- package/dist/telegram/send-as.d.ts +17 -0
- package/dist/telegram/send-as.d.ts.map +1 -0
- package/dist/telegram/send-as.js +67 -0
- package/dist/telegram/send-as.js.map +1 -0
- package/dist/telegram/stats.d.ts +13 -0
- package/dist/telegram/stats.d.ts.map +1 -0
- package/dist/telegram/stats.js +135 -0
- package/dist/telegram/stats.js.map +1 -0
- package/dist/telegram/storage.d.ts +4 -0
- package/dist/telegram/storage.d.ts.map +1 -0
- package/dist/telegram/storage.js +68 -0
- package/dist/telegram/storage.js.map +1 -0
- package/dist/telegram/upload.d.ts +9 -0
- package/dist/telegram/upload.d.ts.map +1 -0
- package/dist/telegram/upload.js +29 -0
- package/dist/telegram/upload.js.map +1 -0
- package/dist/update.d.ts +28 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +56 -0
- package/dist/update.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/install/postinstall.mjs +3 -0
- package/install/windows.ps1 +161 -0
- package/package.json +72 -3
- package/skills/tg-cli/SKILL.md +489 -0
- package/spec/bot/LICENSE +21 -0
- package/spec/bot/README.md +16 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type ChatInviteLink, type ChatMember, type ChatPreview, type DeleteMessageUpdate, type Dialog, type ForumTopic, type FullChat, type InputMediaLike, type MessageMedia, type Peer, type RawUpdateInfo, type TextWithEntities, Message as TgMessage, type Poll as TgPoll, type tl, type UploadedFile } from "@mtcute/node";
|
|
2
|
+
import type { AccountSession, Attachment, Chat, Folder, GroupCard, GroupMember, InviteLink, LinkTarget, Markup, Member, Message, MessageChange, MessageHit, Poll, TextSpan, Topic } from "@wirecat/cli-messaging";
|
|
3
|
+
import type { NewPoll } from "@wirecat/cli-messaging/cli";
|
|
4
|
+
import type { Upload } from "@wirecat/cli-messaging/sends";
|
|
5
|
+
/** The only file that knows mtcute's shapes. Every id leaves it as a string: Telegram ids are 64-bit. */
|
|
6
|
+
export interface Account {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string | null;
|
|
9
|
+
username: string | null;
|
|
10
|
+
}
|
|
11
|
+
export declare const toAccountSession: (session: tl.RawAuthorization) => AccountSession;
|
|
12
|
+
export declare const toTopic: (topic: ForumTopic) => Topic;
|
|
13
|
+
/** A private invite as its preview describes it: no id until the owner joins. */
|
|
14
|
+
export declare const toInvitePreview: (preview: ChatPreview) => LinkTarget;
|
|
15
|
+
export declare const toLinkChat: (chat: FullChat) => LinkTarget;
|
|
16
|
+
/** Telegram gives a last-seen time only to someone offline whose privacy shows it. */
|
|
17
|
+
export declare const toGroupMember: (member: ChatMember) => GroupMember;
|
|
18
|
+
export declare const toMember: (user: Peer) => Member;
|
|
19
|
+
export declare const toAccount: (user: Peer) => Account;
|
|
20
|
+
/**
|
|
21
|
+
* A group's own member count, `null` when unknown. mtcute's `FullChat` answers 0 for a basic group, whose
|
|
22
|
+
* count is on the chat itself, and a supergroup's chat object usually has none: only its full info does.
|
|
23
|
+
*/
|
|
24
|
+
export declare const groupMembersCount: (peer: Peer) => number | null;
|
|
25
|
+
/** A chat as a peer alone describes it — no unread count or last message, which only a dialog carries. */
|
|
26
|
+
export declare const peerToChat: (peer: Peer, extra?: Record<string, unknown>) => Chat;
|
|
27
|
+
/** `isMuted` is `null` when the chat follows the account's default, which the dialog does not carry. */
|
|
28
|
+
export declare const toChat: (dialog: Dialog) => Chat;
|
|
29
|
+
export declare const toMessage: (message: TgMessage) => Message;
|
|
30
|
+
export declare const toHistoryChannel: (chats: tl.TypeChat[], id: number) => tl.TypeInputChannel | undefined;
|
|
31
|
+
export declare const toHistoryMessages: (page: Exclude<tl.messages.TypeMessages, tl.messages.RawMessagesNotModified>) => Message[];
|
|
32
|
+
export declare const attachmentsOf: (media: MessageMedia) => Attachment[];
|
|
33
|
+
export interface EventOf {
|
|
34
|
+
event: string;
|
|
35
|
+
by: number;
|
|
36
|
+
people: number[];
|
|
37
|
+
title?: string;
|
|
38
|
+
}
|
|
39
|
+
/** A service message as a change to who is in the chat, or to the chat itself; `null` for anything else. */
|
|
40
|
+
export declare const eventOf: (message: TgMessage) => EventOf | null;
|
|
41
|
+
export declare const toMessageHit: (message: TgMessage) => MessageHit;
|
|
42
|
+
/** Private chats and basic groups name deleted ids without a chat; only a channel's say which. */
|
|
43
|
+
export declare const toDeletions: (update: DeleteMessageUpdate) => MessageChange[];
|
|
44
|
+
/** A personal account gets reaction changes only as a raw update; mtcute parses them for bots alone. */
|
|
45
|
+
export declare const toReactionChange: ({ update, peers }: RawUpdateInfo) => MessageChange | undefined;
|
|
46
|
+
/** Both count in UTF-16 code units, so a span's place carries over unchanged. */
|
|
47
|
+
export declare const toFormatted: (text: string, markup: readonly (Markup | TextSpan)[]) => TextWithEntities;
|
|
48
|
+
/** What `uploadFile` needs to store the file as `toInputMedia` will send it. */
|
|
49
|
+
export declare const toUploadParams: (upload: Upload) => {
|
|
50
|
+
file: Uint8Array<ArrayBufferLike>;
|
|
51
|
+
fileName: string;
|
|
52
|
+
fileMime?: string | undefined;
|
|
53
|
+
requireFileSize?: boolean | undefined;
|
|
54
|
+
requireExtension?: boolean | undefined;
|
|
55
|
+
};
|
|
56
|
+
/** Checked before the upload, so a refused spoiler never spends one. */
|
|
57
|
+
export declare const checkSpoiler: (upload: Upload) => void;
|
|
58
|
+
/** `file` is the bytes, or the same file already uploaded — then nothing is uploaded again. */
|
|
59
|
+
export declare const toInputMedia: (upload: Upload, caption: string | TextWithEntities, file?: Uint8Array | UploadedFile, { spoiler }?: {
|
|
60
|
+
spoiler?: boolean;
|
|
61
|
+
}) => InputMediaLike;
|
|
62
|
+
/** An answer's id is its option bytes as base64url: Telegram's own, and not a position a person could guess. */
|
|
63
|
+
export declare const answerId: (data: Uint8Array) => string;
|
|
64
|
+
/** Voters are counted only once the owner voted or the poll closed; before that Telegram says nothing. */
|
|
65
|
+
export declare const toPoll: (chatId: string, messageId: string, poll: TgPoll) => Poll;
|
|
66
|
+
export declare const toInputPoll: ({ question, answers, multiple, anonymous, revote, quiz, closeAfter, }: NewPoll) => InputMediaLike;
|
|
67
|
+
/** The two of max's five group switches Telegram has, as default member permissions. */
|
|
68
|
+
export declare const GROUP_SETTINGS: readonly ["allCanPin", "onlyAdminsAdd", "joinApproval"];
|
|
69
|
+
/**
|
|
70
|
+
* max's admin rights in Telegram's words. Telegram has no right to read: an admin always reads, so
|
|
71
|
+
* `read` is not offered.
|
|
72
|
+
*/
|
|
73
|
+
export declare const ADMIN_RIGHT_FIELDS: {
|
|
74
|
+
readonly members: "banUsers";
|
|
75
|
+
readonly admins: "addAdmins";
|
|
76
|
+
readonly info: "changeInfo";
|
|
77
|
+
readonly pin: "pinMessages";
|
|
78
|
+
readonly link: "inviteUsers";
|
|
79
|
+
readonly post: "postMessages";
|
|
80
|
+
readonly edit: "editMessages";
|
|
81
|
+
readonly delete: "deleteMessages";
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* A group as `chats create` and `chats join` answer it. Telegram has two of max's five switches —
|
|
85
|
+
* whether members may pin, and whether they may add people — as default member permissions; the
|
|
86
|
+
* other three are `null`.
|
|
87
|
+
*/
|
|
88
|
+
export declare const toGroupCard: (full: FullChat) => GroupCard;
|
|
89
|
+
/** mtcute reads a link with no use limit as `Infinity`. */
|
|
90
|
+
export declare const toInviteLink: (made: ChatInviteLink) => InviteLink;
|
|
91
|
+
export declare const toFolder: (filter: tl.TypeDialogFilter) => Folder | null;
|
|
92
|
+
//# sourceMappingURL=map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/telegram/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { extname } from "node:path";
|
|
2
|
+
import { getMarkedPeerId, InputMedia, MessageReactions, PeersIndex, Message as TgMessage, } from "@mtcute/node";
|
|
3
|
+
import { CliError } from "@wirecat/cli-core";
|
|
4
|
+
import { rulesOf } from "./folder-rules.js";
|
|
5
|
+
const seconds = (at) => (at > 0 ? new Date(at * 1000).toISOString() : null);
|
|
6
|
+
export const toAccountSession = (session) => ({
|
|
7
|
+
current: session.current === true,
|
|
8
|
+
client: [session.appName, session.appVersion].filter(Boolean).join(" ") || null,
|
|
9
|
+
device: [session.deviceModel, session.platform, session.systemVersion].filter(Boolean).join(", ") || null,
|
|
10
|
+
location: [session.region, session.country].filter(Boolean).join(", ") || null,
|
|
11
|
+
lastActiveAt: seconds(session.dateActive),
|
|
12
|
+
createdAt: seconds(session.dateCreated),
|
|
13
|
+
});
|
|
14
|
+
export const toTopic = (topic) => ({
|
|
15
|
+
id: String(topic.id),
|
|
16
|
+
title: topic.title,
|
|
17
|
+
closed: topic.isClosed,
|
|
18
|
+
pinned: topic.isPinned,
|
|
19
|
+
unreadCount: topic.unreadCount,
|
|
20
|
+
lastMessageAt: topic.lastMessage?.date.toISOString() ?? null,
|
|
21
|
+
createdAt: topic.date.toISOString(),
|
|
22
|
+
});
|
|
23
|
+
/** A private invite as its preview describes it: no id until the owner joins. */
|
|
24
|
+
export const toInvitePreview = (preview) => ({
|
|
25
|
+
kind: preview.type === "channel" ? "channel" : "group",
|
|
26
|
+
title: preview.title,
|
|
27
|
+
id: null,
|
|
28
|
+
username: null,
|
|
29
|
+
participantsCount: preview.memberCount,
|
|
30
|
+
description: null,
|
|
31
|
+
member: false,
|
|
32
|
+
approvalNeeded: preview.withApproval,
|
|
33
|
+
});
|
|
34
|
+
export const toLinkChat = (chat) => ({
|
|
35
|
+
kind: chat.chatType === "channel" ? "channel" : "group",
|
|
36
|
+
title: chat.title,
|
|
37
|
+
id: String(chat.id),
|
|
38
|
+
username: chat.username,
|
|
39
|
+
participantsCount: groupMembersCount(chat),
|
|
40
|
+
description: chat.bio || null,
|
|
41
|
+
member: chat.isMember,
|
|
42
|
+
});
|
|
43
|
+
/** Telegram gives a last-seen time only to someone offline whose privacy shows it. */
|
|
44
|
+
export const toGroupMember = (member) => ({
|
|
45
|
+
...toMember(member.user),
|
|
46
|
+
role: member.status === "creator" ? "owner" : member.status === "admin" ? "admin" : "member",
|
|
47
|
+
lastSeenAt: member.user.lastOnline?.toISOString() ?? null,
|
|
48
|
+
joinedAt: member.joinedDate?.toISOString() ?? null,
|
|
49
|
+
invitedBy: member.invitedBy ? String(member.invitedBy.id) : null,
|
|
50
|
+
isBot: member.user.isBot,
|
|
51
|
+
deleted: member.user.isDeleted,
|
|
52
|
+
...(member.user.isScam ? { flagged: "scam" } : member.user.isFake ? { flagged: "fake" } : {}),
|
|
53
|
+
hasPhoto: member.user.photo !== null,
|
|
54
|
+
});
|
|
55
|
+
export const toMember = (user) => ({
|
|
56
|
+
id: String(user.id),
|
|
57
|
+
name: user.displayName || null,
|
|
58
|
+
username: user.username,
|
|
59
|
+
});
|
|
60
|
+
export const toAccount = (user) => ({
|
|
61
|
+
id: String(user.id),
|
|
62
|
+
name: user.displayName || null,
|
|
63
|
+
username: user.username,
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* A group's own member count, `null` when unknown. mtcute's `FullChat` answers 0 for a basic group, whose
|
|
67
|
+
* count is on the chat itself, and a supergroup's chat object usually has none: only its full info does.
|
|
68
|
+
*/
|
|
69
|
+
export const groupMembersCount = (peer) => {
|
|
70
|
+
if (peer.type !== "chat")
|
|
71
|
+
return null;
|
|
72
|
+
return peer.membersCount || (peer.raw?._ === "chat" ? peer.raw.participantsCount : 0) || null;
|
|
73
|
+
};
|
|
74
|
+
const kindOf = (peer) => {
|
|
75
|
+
if (peer.type === "user")
|
|
76
|
+
return peer.isSelf ? "saved" : "dialog";
|
|
77
|
+
if (peer.chatType === "channel")
|
|
78
|
+
return "channel";
|
|
79
|
+
return "group";
|
|
80
|
+
};
|
|
81
|
+
/** A chat as a peer alone describes it — no unread count or last message, which only a dialog carries. */
|
|
82
|
+
export const peerToChat = (peer, extra = {}) => {
|
|
83
|
+
const metadata = compact({
|
|
84
|
+
isBot: peer.type === "user" && peer.isBot ? true : undefined,
|
|
85
|
+
isForum: peer.type === "chat" && peer.isForum ? true : undefined,
|
|
86
|
+
chatType: peer.type === "chat" ? peer.chatType : undefined,
|
|
87
|
+
username: peer.username ?? undefined,
|
|
88
|
+
...extra,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
id: String(peer.id),
|
|
92
|
+
title: peer.type === "user" && peer.isSelf ? "Saved Messages" : peer.displayName || null,
|
|
93
|
+
kind: kindOf(peer),
|
|
94
|
+
unreadCount: null,
|
|
95
|
+
lastMessageAt: null,
|
|
96
|
+
participantsCount: groupMembersCount(peer),
|
|
97
|
+
...(metadata ? { providerMetadata: metadata } : {}),
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
/** `isMuted` is `null` when the chat follows the account's default, which the dialog does not carry. */
|
|
101
|
+
export const toChat = (dialog) => ({
|
|
102
|
+
...peerToChat(dialog.peer, { pinned: dialog.isPinned || undefined }),
|
|
103
|
+
unreadCount: dialog.unreadCount,
|
|
104
|
+
lastMessageAt: dialog.lastMessage?.date.toISOString() ?? null,
|
|
105
|
+
...(dialog.isMuted === null ? {} : { muted: dialog.isMuted }),
|
|
106
|
+
archived: dialog.isArchived,
|
|
107
|
+
unreadMentions: dialog.unreadMentionsCount,
|
|
108
|
+
});
|
|
109
|
+
export const toMessage = (message) => {
|
|
110
|
+
const reply = message.replyToMessage;
|
|
111
|
+
const metadata = compact({
|
|
112
|
+
views: message.views ?? undefined,
|
|
113
|
+
forwards: message.forwards ?? undefined,
|
|
114
|
+
comments: message.replies?.hasComments ? message.replies.count : undefined,
|
|
115
|
+
groupedId: message.groupedIdUnique ?? undefined,
|
|
116
|
+
action: message.action?.type,
|
|
117
|
+
link: linkOf(message),
|
|
118
|
+
graph: {
|
|
119
|
+
version: 1,
|
|
120
|
+
...(reply === null
|
|
121
|
+
? { reply: null }
|
|
122
|
+
: reply?.id != null && !(reply.isForumTopic && reply.id === reply.threadId)
|
|
123
|
+
? { reply: { chatId: String(reply.chat?.id ?? message.chat.id), messageId: String(reply.id) } }
|
|
124
|
+
: {}),
|
|
125
|
+
...(message.replies?.hasComments && message.replies.discussion != null
|
|
126
|
+
? { discussionChatId: String(message.replies.discussion) }
|
|
127
|
+
: {}),
|
|
128
|
+
...(message.isAutomaticForward && message.forward?.raw.savedFromPeer && message.forward.raw.savedFromMsgId != null
|
|
129
|
+
? {
|
|
130
|
+
discussionSource: {
|
|
131
|
+
chatId: String(getMarkedPeerId(message.forward.raw.savedFromPeer)),
|
|
132
|
+
messageId: String(message.forward.raw.savedFromMsgId),
|
|
133
|
+
},
|
|
134
|
+
}
|
|
135
|
+
: {}),
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
return {
|
|
139
|
+
id: String(message.id),
|
|
140
|
+
chatId: String(message.chat.id),
|
|
141
|
+
senderId: String(message.sender.id),
|
|
142
|
+
senderName: message.sender.displayName || null,
|
|
143
|
+
...(message.sender.type === "chat" ? { senderIsChat: true } : {}),
|
|
144
|
+
...(message.sender.type === "user" && message.sender.username ? { senderUsername: message.sender.username } : {}),
|
|
145
|
+
timestamp: message.date.toISOString(),
|
|
146
|
+
editedAt: message.editDate?.toISOString() ?? null,
|
|
147
|
+
text: message.text,
|
|
148
|
+
outgoing: message.isOutgoing,
|
|
149
|
+
attachments: attachmentsOf(message.media),
|
|
150
|
+
replyTo: null,
|
|
151
|
+
...(reply?.id != null ? { replyToId: String(reply.id) } : {}),
|
|
152
|
+
forwardedFrom: message.forward ? forwardOf(message) : null,
|
|
153
|
+
...(message.isTopicMessage && reply?.threadId != null ? { threadId: String(reply.threadId) } : {}),
|
|
154
|
+
reactions: message.reactions ? reactionsOf(message.reactions) : null,
|
|
155
|
+
...(message.isScheduled ? { scheduledFor: message.date.toISOString() } : {}),
|
|
156
|
+
...(metadata ? { providerMetadata: metadata } : {}),
|
|
157
|
+
...mentionsOf(message),
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
export const toHistoryChannel = (chats, id) => {
|
|
161
|
+
const chat = chats.find((one) => one._ === "channel" && one.id === id);
|
|
162
|
+
return chat?._ === "channel" && chat.accessHash
|
|
163
|
+
? { _: "inputChannel", channelId: chat.id, accessHash: chat.accessHash }
|
|
164
|
+
: undefined;
|
|
165
|
+
};
|
|
166
|
+
export const toHistoryMessages = (page) => {
|
|
167
|
+
const peers = PeersIndex.from(page);
|
|
168
|
+
return page.messages
|
|
169
|
+
.filter((message) => message._ !== "messageEmpty")
|
|
170
|
+
.map((message) => toMessage(new TgMessage(message, peers)));
|
|
171
|
+
};
|
|
172
|
+
/** A mention by name has no `@handle` in the text; the entity carries the person's id. */
|
|
173
|
+
const mentionsOf = (message) => {
|
|
174
|
+
const ids = message.entities.flatMap(({ params }) => (params.kind === "text_mention" ? [String(params.userId)] : []));
|
|
175
|
+
return ids.length > 0 ? { mentions: [...new Set(ids)] } : {};
|
|
176
|
+
};
|
|
177
|
+
/** Only public chats and supergroups have links; mtcute throws for the rest, and that is not an error here. */
|
|
178
|
+
const linkOf = (message) => {
|
|
179
|
+
try {
|
|
180
|
+
return message.link;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
const forwardOf = (message) => {
|
|
187
|
+
const forward = message.forward;
|
|
188
|
+
const sender = forward?.sender;
|
|
189
|
+
return {
|
|
190
|
+
id: forward?.fromMessageId != null ? String(forward.fromMessageId) : "",
|
|
191
|
+
senderId: sender && sender.type !== "anonymous" ? String(sender.id) : null,
|
|
192
|
+
senderName: sender?.displayName || null,
|
|
193
|
+
timestamp: forward?.date.toISOString() ?? null,
|
|
194
|
+
// The text of a forward is the message's own text in Telegram; a second copy would print twice.
|
|
195
|
+
text: "",
|
|
196
|
+
attachments: [],
|
|
197
|
+
outgoing: null,
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
const reactionsOf = (reactions) => {
|
|
201
|
+
const counts = reactions.reactions.map((one) => ({
|
|
202
|
+
reaction: typeof one.emoji === "string" ? one.emoji : `custom:${String(one.emoji)}`,
|
|
203
|
+
count: one.count,
|
|
204
|
+
mine: one.order !== null,
|
|
205
|
+
}));
|
|
206
|
+
return {
|
|
207
|
+
counts: counts.map(({ reaction, count }) => ({ reaction, count })),
|
|
208
|
+
mine: counts.find((one) => one.mine)?.reaction ?? null,
|
|
209
|
+
total: counts.reduce((sum, one) => sum + one.count, 0),
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
export const attachmentsOf = (media) => {
|
|
213
|
+
if (!media)
|
|
214
|
+
return [];
|
|
215
|
+
const read = (name) => {
|
|
216
|
+
if (!(name in media))
|
|
217
|
+
return undefined;
|
|
218
|
+
const value = media[name];
|
|
219
|
+
return value === null || value === "" ? undefined : value;
|
|
220
|
+
};
|
|
221
|
+
const attachment = { kind: media.type };
|
|
222
|
+
const name = read("fileName");
|
|
223
|
+
const mime = read("mimeType");
|
|
224
|
+
const size = read("fileSize");
|
|
225
|
+
const width = read("width");
|
|
226
|
+
const height = read("height");
|
|
227
|
+
const duration = read("duration");
|
|
228
|
+
// In the domain type's order, so an answer from the store prints byte for byte the same.
|
|
229
|
+
if (typeof width === "number")
|
|
230
|
+
attachment.width = width;
|
|
231
|
+
if (typeof height === "number")
|
|
232
|
+
attachment.height = height;
|
|
233
|
+
if (name !== undefined)
|
|
234
|
+
attachment.name = name;
|
|
235
|
+
if (typeof size === "number")
|
|
236
|
+
attachment.size = size;
|
|
237
|
+
if (mime !== undefined)
|
|
238
|
+
attachment.mime = mime;
|
|
239
|
+
if (typeof duration === "number")
|
|
240
|
+
attachment.duration = duration;
|
|
241
|
+
return [attachment];
|
|
242
|
+
};
|
|
243
|
+
const compact = (fields) => {
|
|
244
|
+
const kept = Object.entries(fields).filter(([, value]) => value !== undefined);
|
|
245
|
+
return kept.length > 0 ? Object.fromEntries(kept) : undefined;
|
|
246
|
+
};
|
|
247
|
+
/** A service message as a change to who is in the chat, or to the chat itself; `null` for anything else. */
|
|
248
|
+
export const eventOf = (message) => {
|
|
249
|
+
const { action } = message;
|
|
250
|
+
const by = message.sender.id;
|
|
251
|
+
switch (action?.type) {
|
|
252
|
+
case "users_added":
|
|
253
|
+
return { event: "add", by, people: [...action.users] };
|
|
254
|
+
case "user_left":
|
|
255
|
+
return { event: "leave", by, people: [by] };
|
|
256
|
+
case "user_removed":
|
|
257
|
+
return { event: "remove", by, people: [action.user] };
|
|
258
|
+
case "user_joined_link":
|
|
259
|
+
return { event: "join", by: action.inviter, people: [by] };
|
|
260
|
+
case "user_joined_approved":
|
|
261
|
+
return { event: "join", by, people: [by] };
|
|
262
|
+
case "chat_created":
|
|
263
|
+
return { event: "create", by, people: [...action.users], title: action.title };
|
|
264
|
+
case "channel_created":
|
|
265
|
+
return { event: "create", by, people: [], title: action.title };
|
|
266
|
+
case "title_changed":
|
|
267
|
+
return { event: "title", by, people: [], title: action.title };
|
|
268
|
+
case "message_pinned":
|
|
269
|
+
return { event: "pin", by, people: [] };
|
|
270
|
+
default:
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
export const toMessageHit = (message) => ({
|
|
275
|
+
...toMessage(message),
|
|
276
|
+
chatTitle: peerToChat(message.chat).title,
|
|
277
|
+
});
|
|
278
|
+
/** Private chats and basic groups name deleted ids without a chat; only a channel's say which. */
|
|
279
|
+
export const toDeletions = (update) => {
|
|
280
|
+
const chatId = update.channelId === null ? null : String(getMarkedPeerId(update.channelId, "channel"));
|
|
281
|
+
return update.messageIds.map((id) => ({ event: "delete", chatId, chatTitle: null, messageId: String(id) }));
|
|
282
|
+
};
|
|
283
|
+
/** A personal account gets reaction changes only as a raw update; mtcute parses them for bots alone. */
|
|
284
|
+
export const toReactionChange = ({ update, peers }) => {
|
|
285
|
+
if (update._ !== "updateMessageReactions")
|
|
286
|
+
return undefined;
|
|
287
|
+
const chatId = getMarkedPeerId(update.peer);
|
|
288
|
+
return {
|
|
289
|
+
event: "reaction",
|
|
290
|
+
chatId: String(chatId),
|
|
291
|
+
chatTitle: null,
|
|
292
|
+
messageId: String(update.msgId),
|
|
293
|
+
reactions: reactionsOf(new MessageReactions(update.msgId, chatId, update.reactions, peers)),
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
const ENTITIES = {
|
|
297
|
+
bold: "messageEntityBold",
|
|
298
|
+
italic: "messageEntityItalic",
|
|
299
|
+
strike: "messageEntityStrike",
|
|
300
|
+
code: "messageEntityCode",
|
|
301
|
+
};
|
|
302
|
+
/** Both count in UTF-16 code units, so a span's place carries over unchanged. */
|
|
303
|
+
export const toFormatted = (text, markup) => ({
|
|
304
|
+
text,
|
|
305
|
+
entities: markup.map((span) => {
|
|
306
|
+
const base = { offset: span.from, length: span.length };
|
|
307
|
+
switch (span.type) {
|
|
308
|
+
case "bold":
|
|
309
|
+
case "italic":
|
|
310
|
+
case "strike":
|
|
311
|
+
case "code":
|
|
312
|
+
return { _: ENTITIES[span.type], ...base };
|
|
313
|
+
case "underline":
|
|
314
|
+
return { _: "messageEntityUnderline", ...base };
|
|
315
|
+
case "spoiler":
|
|
316
|
+
return { _: "messageEntitySpoiler", ...base };
|
|
317
|
+
case "blockquote":
|
|
318
|
+
return { _: "messageEntityBlockquote", ...base };
|
|
319
|
+
case "pre":
|
|
320
|
+
return { _: "messageEntityPre", ...base, language: span.language ?? "" };
|
|
321
|
+
case "link":
|
|
322
|
+
if (!span.url)
|
|
323
|
+
throw new CliError("validation_error", "a formatted link needs a URL");
|
|
324
|
+
return { _: "messageEntityTextUrl", ...base, url: span.url };
|
|
325
|
+
default:
|
|
326
|
+
throw new CliError("validation_error", "Telegram does not support this formatting span");
|
|
327
|
+
}
|
|
328
|
+
}),
|
|
329
|
+
});
|
|
330
|
+
/** A file goes as a document, so Telegram keeps it byte for byte; a photo is recompressed, as in the apps. */
|
|
331
|
+
const VIDEO = { ".mp4": "video/mp4", ".m4v": "video/mp4", ".mov": "video/quicktime" };
|
|
332
|
+
/** A video plays in the chat unless `asFile`; a `document` is always a file to download (`forceFile`). */
|
|
333
|
+
const videoMime = ({ kind, name, asFile }) => kind === "file" && !asFile ? VIDEO[extname(name).toLowerCase()] : undefined;
|
|
334
|
+
/** What `uploadFile` needs to store the file as `toInputMedia` will send it. */
|
|
335
|
+
export const toUploadParams = (upload) => {
|
|
336
|
+
const mime = upload.kind === "voice" ? "audio/ogg" : videoMime(upload);
|
|
337
|
+
return {
|
|
338
|
+
file: upload.bytes,
|
|
339
|
+
fileName: upload.name,
|
|
340
|
+
...(mime ? { fileMime: mime } : {}),
|
|
341
|
+
...(upload.kind === "photo" ? { requireFileSize: true, requireExtension: true } : {}),
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
/** Checked before the upload, so a refused spoiler never spends one. */
|
|
345
|
+
export const checkSpoiler = (upload) => {
|
|
346
|
+
if (upload.kind !== "photo" && !videoMime(upload))
|
|
347
|
+
throw new CliError("validation_error", "--spoiler hides a photo or a video only");
|
|
348
|
+
};
|
|
349
|
+
/** `file` is the bytes, or the same file already uploaded — then nothing is uploaded again. */
|
|
350
|
+
export const toInputMedia = (upload, caption, file = upload.bytes, { spoiler = false } = {}) => {
|
|
351
|
+
const { kind, name } = upload;
|
|
352
|
+
const hidden = spoiler ? { spoiler } : {};
|
|
353
|
+
if (kind === "photo")
|
|
354
|
+
return InputMedia.photo(file, { fileName: name, caption, ...hidden });
|
|
355
|
+
if (kind === "voice")
|
|
356
|
+
return InputMedia.voice(file, { fileMime: "audio/ogg", caption });
|
|
357
|
+
const video = videoMime(upload);
|
|
358
|
+
return video
|
|
359
|
+
? InputMedia.video(file, { fileName: name, fileMime: video, caption, supportsStreaming: true, ...hidden })
|
|
360
|
+
: InputMedia.document(file, { fileName: name, caption });
|
|
361
|
+
};
|
|
362
|
+
/** An answer's id is its option bytes as base64url: Telegram's own, and not a position a person could guess. */
|
|
363
|
+
export const answerId = (data) => Buffer.from(data).toString("base64url");
|
|
364
|
+
/** Voters are counted only once the owner voted or the poll closed; before that Telegram says nothing. */
|
|
365
|
+
export const toPoll = (chatId, messageId, poll) => {
|
|
366
|
+
const counted = poll.isClosed || poll.answers.some((answer) => answer.chosen);
|
|
367
|
+
return {
|
|
368
|
+
chatId,
|
|
369
|
+
messageId,
|
|
370
|
+
question: poll.question,
|
|
371
|
+
answers: poll.answers.map((answer) => ({
|
|
372
|
+
id: answerId(answer.data),
|
|
373
|
+
text: answer.text,
|
|
374
|
+
voters: counted ? answer.voters : null,
|
|
375
|
+
chosen: answer.chosen,
|
|
376
|
+
})),
|
|
377
|
+
closed: poll.isClosed,
|
|
378
|
+
multiple: poll.isMultiple,
|
|
379
|
+
anonymous: !poll.isPublic,
|
|
380
|
+
voters: counted ? poll.voters : null,
|
|
381
|
+
quiz: poll.isQuiz,
|
|
382
|
+
revote: !poll.isRevotingDisabled,
|
|
383
|
+
creator: poll.isCreator,
|
|
384
|
+
};
|
|
385
|
+
};
|
|
386
|
+
export const toInputPoll = ({ question, answers, multiple, anonymous, revote, quiz, closeAfter, }) => {
|
|
387
|
+
const closing = closeAfter === undefined ? {} : { closePeriod: closeAfter };
|
|
388
|
+
return quiz
|
|
389
|
+
? InputMedia.quiz({
|
|
390
|
+
question,
|
|
391
|
+
answers,
|
|
392
|
+
public: !anonymous,
|
|
393
|
+
correct: quiz.correct,
|
|
394
|
+
...(quiz.solution === undefined ? {} : { solution: quiz.solution }),
|
|
395
|
+
...closing,
|
|
396
|
+
})
|
|
397
|
+
: InputMedia.poll({ question, answers, multiple, public: !anonymous, disableRevoting: revote !== true, ...closing });
|
|
398
|
+
};
|
|
399
|
+
/** The two of max's five group switches Telegram has, as default member permissions. */
|
|
400
|
+
export const GROUP_SETTINGS = ["allCanPin", "onlyAdminsAdd", "joinApproval"];
|
|
401
|
+
/**
|
|
402
|
+
* max's admin rights in Telegram's words. Telegram has no right to read: an admin always reads, so
|
|
403
|
+
* `read` is not offered.
|
|
404
|
+
*/
|
|
405
|
+
export const ADMIN_RIGHT_FIELDS = {
|
|
406
|
+
members: "banUsers",
|
|
407
|
+
admins: "addAdmins",
|
|
408
|
+
info: "changeInfo",
|
|
409
|
+
pin: "pinMessages",
|
|
410
|
+
link: "inviteUsers",
|
|
411
|
+
post: "postMessages",
|
|
412
|
+
edit: "editMessages",
|
|
413
|
+
delete: "deleteMessages",
|
|
414
|
+
};
|
|
415
|
+
/**
|
|
416
|
+
* A group as `chats create` and `chats join` answer it. Telegram has two of max's five switches —
|
|
417
|
+
* whether members may pin, and whether they may add people — as default member permissions; the
|
|
418
|
+
* other three are `null`.
|
|
419
|
+
*/
|
|
420
|
+
export const toGroupCard = (full) => {
|
|
421
|
+
const defaults = full.defaultPermissions;
|
|
422
|
+
return {
|
|
423
|
+
...peerToChat(full),
|
|
424
|
+
description: full.bio || null,
|
|
425
|
+
link: full.inviteLink?.link ?? null,
|
|
426
|
+
settings: {
|
|
427
|
+
allCanPin: defaults ? defaults.canPinMessages : null,
|
|
428
|
+
onlyAdminsAdd: defaults ? !defaults.canInviteUsers : null,
|
|
429
|
+
onlyAdminsCall: null,
|
|
430
|
+
onlyOwnerEditsInfo: null,
|
|
431
|
+
membersSeeLink: null,
|
|
432
|
+
joinApproval: full.hasJoinRequests,
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
/** mtcute reads a link with no use limit as `Infinity`. */
|
|
437
|
+
export const toInviteLink = (made) => ({
|
|
438
|
+
link: made.link,
|
|
439
|
+
approval: made.approvalNeeded,
|
|
440
|
+
expiresAt: made.endDate?.toISOString() ?? null,
|
|
441
|
+
maxUses: Number.isFinite(made.usageLimit) ? made.usageLimit : null,
|
|
442
|
+
primary: made.isPrimary,
|
|
443
|
+
revoked: made.isRevoked,
|
|
444
|
+
pending: made.pendingApprovals,
|
|
445
|
+
joined: made.usage,
|
|
446
|
+
});
|
|
447
|
+
/**
|
|
448
|
+
* A folder as `chats folders` answers it; `null` for "All chats", which Telegram lists among the
|
|
449
|
+
* folders but nobody can change. Pinned chats are in the folder too, so they count as added.
|
|
450
|
+
*/
|
|
451
|
+
const idsOf = (peers) => [...new Set(peers.map((peer) => String(getMarkedPeerId(peer))))];
|
|
452
|
+
export const toFolder = (filter) => {
|
|
453
|
+
if (filter._ === "dialogFilterDefault")
|
|
454
|
+
return null;
|
|
455
|
+
const folder = {
|
|
456
|
+
id: String(filter.id),
|
|
457
|
+
title: filter.title.text,
|
|
458
|
+
chatIds: idsOf([...filter.pinnedPeers, ...filter.includePeers]),
|
|
459
|
+
};
|
|
460
|
+
if (filter.emoticon)
|
|
461
|
+
folder.emoji = filter.emoticon;
|
|
462
|
+
if (filter.pinnedPeers.length > 0)
|
|
463
|
+
folder.pinnedChatIds = idsOf(filter.pinnedPeers);
|
|
464
|
+
if (filter._ === "dialogFilter") {
|
|
465
|
+
Object.assign(folder, rulesOf(filter));
|
|
466
|
+
if (filter.excludePeers.length > 0)
|
|
467
|
+
folder.excludedChatIds = idsOf(filter.excludePeers);
|
|
468
|
+
}
|
|
469
|
+
return folder;
|
|
470
|
+
};
|
|
471
|
+
//# sourceMappingURL=map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/telegram/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TelegramClient } from "@mtcute/node";
|
|
2
|
+
import type { Page, PollVote } from "@wirecat/cli-messaging";
|
|
3
|
+
type Client = Pick<TelegramClient, "call" | "resolvePeer">;
|
|
4
|
+
/**
|
|
5
|
+
* Newest first, as Telegram lists them. Asked for one answer, Telegram sends each vote without it
|
|
6
|
+
* (`messagePeerVoteInputOption`): it is the answer asked for.
|
|
7
|
+
*/
|
|
8
|
+
export declare const pollVotersOf: (client: Client, chatId: number, messageId: number, { limit, answerId: answer }: {
|
|
9
|
+
limit: number;
|
|
10
|
+
answerId?: string;
|
|
11
|
+
}) => Promise<Page<PollVote> & {
|
|
12
|
+
total: number;
|
|
13
|
+
}>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=poll-voters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll-voters.d.ts","sourceRoot":"","sources":["../../src/telegram/poll-voters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,cAAc,EAAW,MAAM,cAAc,CAAA;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAG5D,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAAC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,YAAY,WACf,MAAM,UACN,MAAM,aACH,MAAM,+BACY;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAChE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqB5C,CAAA"}
|