@mtcute/core 0.29.7 → 0.30.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/client.cjs +8 -0
- package/client.js +8 -0
- package/highlevel/client.d.cts +67 -7
- package/highlevel/client.d.ts +67 -7
- package/highlevel/methods/chats/join-chat.cjs +38 -16
- package/highlevel/methods/chats/join-chat.d.cts +20 -6
- package/highlevel/methods/chats/join-chat.d.ts +20 -6
- package/highlevel/methods/chats/join-chat.js +38 -16
- package/highlevel/methods/chats/save-draft.d.cts +4 -1
- package/highlevel/methods/chats/save-draft.d.ts +4 -1
- package/highlevel/methods/files/normalize-input-media.cjs +8 -0
- package/highlevel/methods/files/normalize-input-media.js +9 -1
- package/highlevel/methods/messages/create-rich-streaming-draft.cjs +39 -0
- package/highlevel/methods/messages/create-rich-streaming-draft.d.cts +42 -0
- package/highlevel/methods/messages/create-rich-streaming-draft.d.ts +42 -0
- package/highlevel/methods/messages/create-rich-streaming-draft.js +34 -0
- package/highlevel/methods/messages/normalize-rich-message.cjs +157 -0
- package/highlevel/methods/messages/normalize-rich-message.d.cts +10 -0
- package/highlevel/methods/messages/normalize-rich-message.d.ts +10 -0
- package/highlevel/methods/messages/normalize-rich-message.js +152 -0
- package/highlevel/methods/messages/send-rich-message.cjs +49 -0
- package/highlevel/methods/messages/send-rich-message.d.cts +38 -0
- package/highlevel/methods/messages/send-rich-message.d.ts +38 -0
- package/highlevel/methods/messages/send-rich-message.js +44 -0
- package/highlevel/methods.d.cts +5 -0
- package/highlevel/methods.d.ts +5 -0
- package/highlevel/storage/service/peers.cjs +1 -0
- package/highlevel/storage/service/peers.js +1 -0
- package/highlevel/types/bots/inline-message/factories.cjs +14 -0
- package/highlevel/types/bots/inline-message/factories.d.cts +9 -1
- package/highlevel/types/bots/inline-message/factories.d.ts +9 -1
- package/highlevel/types/bots/inline-message/factories.js +14 -0
- package/highlevel/types/bots/inline-message/types.d.cts +17 -1
- package/highlevel/types/bots/inline-message/types.d.ts +17 -1
- package/highlevel/types/files/utils.d.cts +1 -1
- package/highlevel/types/files/utils.d.ts +1 -1
- package/highlevel/types/media/input-media/types.d.cts +1 -1
- package/highlevel/types/media/input-media/types.d.ts +1 -1
- package/highlevel/types/messages/index.d.cts +1 -0
- package/highlevel/types/messages/index.d.ts +1 -0
- package/highlevel/types/messages/message.cjs +5 -0
- package/highlevel/types/messages/message.d.cts +3 -0
- package/highlevel/types/messages/message.d.ts +3 -0
- package/highlevel/types/messages/message.js +5 -0
- package/highlevel/types/messages/rich/index.d.cts +4 -0
- package/highlevel/types/messages/rich/index.d.ts +4 -0
- package/highlevel/types/messages/rich/inner.cjs +219 -0
- package/highlevel/types/messages/rich/inner.d.cts +127 -0
- package/highlevel/types/messages/rich/inner.d.ts +127 -0
- package/highlevel/types/messages/rich/inner.js +214 -0
- package/highlevel/types/messages/rich/rich-message.cjs +50 -0
- package/highlevel/types/messages/rich/rich-message.d.cts +18 -0
- package/highlevel/types/messages/rich/rich-message.d.ts +18 -0
- package/highlevel/types/messages/rich/rich-message.js +45 -0
- package/highlevel/types/messages/rich/types.d.cts +76 -0
- package/highlevel/types/messages/rich/types.d.ts +76 -0
- package/highlevel/types/peers/full-chat.cjs +6 -0
- package/highlevel/types/peers/full-chat.d.cts +2 -0
- package/highlevel/types/peers/full-chat.d.ts +2 -0
- package/highlevel/types/peers/full-chat.js +6 -0
- package/highlevel/types/peers/user.cjs +4 -0
- package/highlevel/types/peers/user.d.cts +2 -0
- package/highlevel/types/peers/user.d.ts +2 -0
- package/highlevel/types/peers/user.js +4 -0
- package/highlevel/types/updates/user-typing-update.cjs +2 -0
- package/highlevel/types/updates/user-typing-update.js +2 -0
- package/highlevel/updates/manager.cjs +195 -0
- package/highlevel/updates/manager.js +195 -0
- package/highlevel/utils/entities.cjs +176 -0
- package/highlevel/utils/entities.d.cts +18 -0
- package/highlevel/utils/entities.d.ts +18 -0
- package/highlevel/utils/entities.js +177 -1
- package/highlevel/utils/inspectable.cjs +1 -0
- package/highlevel/utils/inspectable.d.cts +1 -0
- package/highlevel/utils/inspectable.d.ts +1 -0
- package/highlevel/utils/inspectable.js +1 -0
- package/index.cjs +4 -0
- package/index.js +4 -0
- package/methods.cjs +4 -0
- package/methods.js +4 -0
- package/network/flood-control.cjs +149 -0
- package/network/flood-control.d.cts +79 -0
- package/network/flood-control.d.ts +79 -0
- package/network/flood-control.js +144 -0
- package/network/flood-control.test.d.cts +1 -0
- package/network/flood-control.test.d.ts +1 -0
- package/network/mtproto-session.cjs +1 -21
- package/network/mtproto-session.d.cts +1 -5
- package/network/mtproto-session.d.ts +1 -5
- package/network/mtproto-session.js +2 -22
- package/network/mtproxy/_fake-tls.cjs +169 -107
- package/network/mtproxy/_fake-tls.js +169 -107
- package/network/mtproxy/_fake-tls.test.d.cts +1 -0
- package/network/mtproxy/_fake-tls.test.d.ts +1 -0
- package/network/multi-session-connection.cjs +26 -16
- package/network/multi-session-connection.d.cts +1 -1
- package/network/multi-session-connection.d.ts +1 -1
- package/network/multi-session-connection.js +26 -16
- package/network/multi-session-connection.test.d.cts +1 -0
- package/network/multi-session-connection.test.d.ts +1 -0
- package/network/network-manager.cjs +3 -2
- package/network/network-manager.d.cts +12 -0
- package/network/network-manager.d.ts +12 -0
- package/network/network-manager.js +3 -2
- package/network/persistent-connection.cjs +25 -1
- package/network/persistent-connection.d.cts +5 -0
- package/network/persistent-connection.d.ts +5 -0
- package/network/persistent-connection.js +25 -1
- package/network/session-connection.cjs +5 -10
- package/network/session-connection.d.cts +0 -2
- package/network/session-connection.d.ts +0 -2
- package/network/session-connection.js +5 -10
- package/package.json +1 -1
- package/tl/api-schema.json +1 -1
- package/tl/binary/reader.cjs +182 -26
- package/tl/binary/reader.js +182 -26
- package/tl/binary/writer.cjs +437 -20
- package/tl/binary/writer.js +437 -20
- package/tl/compat/reader.cjs +23 -0
- package/tl/compat/reader.js +23 -0
- package/tl/index.d.cts +425 -14
- package/tl/index.d.ts +425 -14
- package/tl/inner-tl.cjs +22 -8
- package/tl/inner-tl.js +22 -8
- package/types/utils.d.cts +4 -0
- package/types/utils.d.ts +4 -0
- package/utils/binary/compat.cjs +79 -0
- package/utils/binary/compat.js +79 -0
- package/utils/index.d.cts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/long-utils.cjs +10 -0
- package/utils/long-utils.js +10 -0
- package/utils.cjs +9 -0
- package/utils.js +11 -2
|
@@ -5,6 +5,8 @@ if (typeof globalThis !== "undefined" && !globalThis._MTCUTE_CJS_DEPRECATION_WAR
|
|
|
5
5
|
}
|
|
6
6
|
"use strict";
|
|
7
7
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
8
|
+
const Long = require("long");
|
|
9
|
+
const peerUtils = require("../../utils/peer-utils.cjs");
|
|
8
10
|
function joinTextWithEntities(parts, delim = "") {
|
|
9
11
|
const textParts = [];
|
|
10
12
|
const newEntities = [];
|
|
@@ -36,4 +38,178 @@ function joinTextWithEntities(parts, delim = "") {
|
|
|
36
38
|
entities: newEntities
|
|
37
39
|
};
|
|
38
40
|
}
|
|
41
|
+
function _entityToRichTextWrapper(entity, text) {
|
|
42
|
+
const covered = () => text.slice(entity.offset, entity.offset + entity.length);
|
|
43
|
+
switch (entity._) {
|
|
44
|
+
case "messageEntityBold":
|
|
45
|
+
return (inner) => ({ _: "textBold", text: inner });
|
|
46
|
+
case "messageEntityItalic":
|
|
47
|
+
return (inner) => ({ _: "textItalic", text: inner });
|
|
48
|
+
case "messageEntityUnderline":
|
|
49
|
+
return (inner) => ({ _: "textUnderline", text: inner });
|
|
50
|
+
case "messageEntityStrike":
|
|
51
|
+
return (inner) => ({ _: "textStrike", text: inner });
|
|
52
|
+
case "messageEntityCode":
|
|
53
|
+
case "messageEntityPre":
|
|
54
|
+
return (inner) => ({ _: "textFixed", text: inner });
|
|
55
|
+
case "messageEntitySpoiler":
|
|
56
|
+
return (inner) => ({ _: "textSpoiler", text: inner });
|
|
57
|
+
case "messageEntityMention":
|
|
58
|
+
return (inner) => ({ _: "textMention", text: inner });
|
|
59
|
+
case "messageEntityHashtag":
|
|
60
|
+
return (inner) => ({ _: "textHashtag", text: inner });
|
|
61
|
+
case "messageEntityCashtag":
|
|
62
|
+
return (inner) => ({ _: "textCashtag", text: inner });
|
|
63
|
+
case "messageEntityBotCommand":
|
|
64
|
+
return (inner) => ({ _: "textBotCommand", text: inner });
|
|
65
|
+
case "messageEntityBankCard":
|
|
66
|
+
return (inner) => ({ _: "textBankCard", text: inner });
|
|
67
|
+
case "messageEntityUrl":
|
|
68
|
+
return (inner) => ({ _: "textUrl", text: inner, url: covered(), webpageId: Long.ZERO });
|
|
69
|
+
case "messageEntityTextUrl":
|
|
70
|
+
return (inner) => ({ _: "textUrl", text: inner, url: entity.url, webpageId: Long.ZERO });
|
|
71
|
+
case "messageEntityEmail":
|
|
72
|
+
return (inner) => ({ _: "textEmail", text: inner, email: covered() });
|
|
73
|
+
case "messageEntityPhone":
|
|
74
|
+
return (inner) => ({ _: "textPhone", text: inner, phone: covered() });
|
|
75
|
+
case "messageEntityMentionName":
|
|
76
|
+
return (inner) => ({ _: "textMentionName", text: inner, userId: entity.userId });
|
|
77
|
+
case "inputMessageEntityMentionName":
|
|
78
|
+
return (inner) => ({ _: "textMentionName", text: inner, userId: peerUtils.getMarkedPeerId(entity.userId) });
|
|
79
|
+
case "messageEntityCustomEmoji":
|
|
80
|
+
return () => ({ _: "textCustomEmoji", documentId: entity.documentId, alt: covered() });
|
|
81
|
+
case "messageEntityFormattedDate":
|
|
82
|
+
return (inner) => ({
|
|
83
|
+
_: "textDate",
|
|
84
|
+
text: inner,
|
|
85
|
+
date: entity.date,
|
|
86
|
+
relative: entity.relative,
|
|
87
|
+
shortTime: entity.shortTime,
|
|
88
|
+
longTime: entity.longTime,
|
|
89
|
+
shortDate: entity.shortDate,
|
|
90
|
+
longDate: entity.longDate,
|
|
91
|
+
dayOfWeek: entity.dayOfWeek
|
|
92
|
+
});
|
|
93
|
+
default:
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function textWithEntitiesToRichText(input) {
|
|
98
|
+
const { text, entities } = input;
|
|
99
|
+
if (!text) return { _: "textEmpty" };
|
|
100
|
+
if (!entities?.length) return { _: "textPlain", text };
|
|
101
|
+
const bounds = /* @__PURE__ */ new Set([0, text.length]);
|
|
102
|
+
for (const e of entities) {
|
|
103
|
+
bounds.add(e.offset);
|
|
104
|
+
bounds.add(e.offset + e.length);
|
|
105
|
+
}
|
|
106
|
+
const sorted = [...bounds].filter((b) => b >= 0 && b <= text.length).sort((a, b) => a - b);
|
|
107
|
+
const segments = [];
|
|
108
|
+
for (let i = 0; i < sorted.length - 1; i++) {
|
|
109
|
+
const start = sorted[i];
|
|
110
|
+
const end = sorted[i + 1];
|
|
111
|
+
if (start === end) continue;
|
|
112
|
+
let node = { _: "textPlain", text: text.slice(start, end) };
|
|
113
|
+
const active = entities.filter((e) => e.offset <= start && e.offset + e.length >= end).sort((a, b) => a.length - b.length);
|
|
114
|
+
for (const e of active) {
|
|
115
|
+
const wrap = _entityToRichTextWrapper(e, text);
|
|
116
|
+
if (wrap) node = wrap(node);
|
|
117
|
+
}
|
|
118
|
+
segments.push(node);
|
|
119
|
+
}
|
|
120
|
+
if (segments.length === 0) return { _: "textEmpty" };
|
|
121
|
+
if (segments.length === 1) return segments[0];
|
|
122
|
+
return { _: "textConcat", texts: segments };
|
|
123
|
+
}
|
|
124
|
+
function _richTextNodeToEntity(node, offset, length) {
|
|
125
|
+
switch (node._) {
|
|
126
|
+
case "textBold":
|
|
127
|
+
return { _: "messageEntityBold", offset, length };
|
|
128
|
+
case "textItalic":
|
|
129
|
+
return { _: "messageEntityItalic", offset, length };
|
|
130
|
+
case "textUnderline":
|
|
131
|
+
return { _: "messageEntityUnderline", offset, length };
|
|
132
|
+
case "textStrike":
|
|
133
|
+
return { _: "messageEntityStrike", offset, length };
|
|
134
|
+
case "textFixed":
|
|
135
|
+
return { _: "messageEntityCode", offset, length };
|
|
136
|
+
case "textSpoiler":
|
|
137
|
+
return { _: "messageEntitySpoiler", offset, length };
|
|
138
|
+
case "textMention":
|
|
139
|
+
return { _: "messageEntityMention", offset, length };
|
|
140
|
+
case "textHashtag":
|
|
141
|
+
return { _: "messageEntityHashtag", offset, length };
|
|
142
|
+
case "textCashtag":
|
|
143
|
+
return { _: "messageEntityCashtag", offset, length };
|
|
144
|
+
case "textBotCommand":
|
|
145
|
+
return { _: "messageEntityBotCommand", offset, length };
|
|
146
|
+
case "textBankCard":
|
|
147
|
+
return { _: "messageEntityBankCard", offset, length };
|
|
148
|
+
case "textUrl":
|
|
149
|
+
return { _: "messageEntityTextUrl", offset, length, url: node.url };
|
|
150
|
+
case "textEmail":
|
|
151
|
+
return { _: "messageEntityEmail", offset, length };
|
|
152
|
+
case "textPhone":
|
|
153
|
+
return { _: "messageEntityPhone", offset, length };
|
|
154
|
+
case "textMentionName":
|
|
155
|
+
return { _: "messageEntityMentionName", offset, length, userId: node.userId };
|
|
156
|
+
case "textDate":
|
|
157
|
+
return {
|
|
158
|
+
_: "messageEntityFormattedDate",
|
|
159
|
+
offset,
|
|
160
|
+
length,
|
|
161
|
+
date: node.date,
|
|
162
|
+
relative: node.relative,
|
|
163
|
+
shortTime: node.shortTime,
|
|
164
|
+
longTime: node.longTime,
|
|
165
|
+
shortDate: node.shortDate,
|
|
166
|
+
longDate: node.longDate,
|
|
167
|
+
dayOfWeek: node.dayOfWeek
|
|
168
|
+
};
|
|
169
|
+
default:
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function richTextToTextWithEntities(rich) {
|
|
174
|
+
const entities = [];
|
|
175
|
+
let text = "";
|
|
176
|
+
const walk = (node) => {
|
|
177
|
+
switch (node._) {
|
|
178
|
+
case "textEmpty":
|
|
179
|
+
return;
|
|
180
|
+
case "textPlain":
|
|
181
|
+
text += node.text;
|
|
182
|
+
return;
|
|
183
|
+
case "textConcat":
|
|
184
|
+
for (const t of node.texts) walk(t);
|
|
185
|
+
return;
|
|
186
|
+
case "textImage":
|
|
187
|
+
return;
|
|
188
|
+
case "textMath":
|
|
189
|
+
text += node.source;
|
|
190
|
+
return;
|
|
191
|
+
case "textCustomEmoji": {
|
|
192
|
+
const start = text.length;
|
|
193
|
+
text += node.alt;
|
|
194
|
+
entities.push({
|
|
195
|
+
_: "messageEntityCustomEmoji",
|
|
196
|
+
offset: start,
|
|
197
|
+
length: text.length - start,
|
|
198
|
+
documentId: node.documentId
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
default: {
|
|
203
|
+
const start = text.length;
|
|
204
|
+
walk(node.text);
|
|
205
|
+
const entity = _richTextNodeToEntity(node, start, text.length - start);
|
|
206
|
+
if (entity) entities.push(entity);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
walk(rich);
|
|
211
|
+
return { text, entities };
|
|
212
|
+
}
|
|
39
213
|
exports.joinTextWithEntities = joinTextWithEntities;
|
|
214
|
+
exports.richTextToTextWithEntities = richTextToTextWithEntities;
|
|
215
|
+
exports.textWithEntitiesToRichText = textWithEntitiesToRichText;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tl } from '../../tl/index.js';
|
|
1
2
|
import { TextWithEntities } from '../types/misc/entities.js';
|
|
2
3
|
/**
|
|
3
4
|
* Join multiple text parts with entities into a single text with entities,
|
|
@@ -17,3 +18,20 @@ import { TextWithEntities } from '../types/misc/entities.js';
|
|
|
17
18
|
* ```
|
|
18
19
|
*/
|
|
19
20
|
export declare function joinTextWithEntities(parts: (string | TextWithEntities)[], delim?: string | TextWithEntities): TextWithEntities;
|
|
21
|
+
/**
|
|
22
|
+
* Convert a {@link TextWithEntities} into a {@link tl.TypeRichText} tree
|
|
23
|
+
* (as used in page blocks / instant view).
|
|
24
|
+
*
|
|
25
|
+
* Overlapping entities are handled by splitting the text at every entity
|
|
26
|
+
* boundary and nesting the wrappers per-segment, so the result may be more
|
|
27
|
+
* fragmented than the input, but always renders identically.
|
|
28
|
+
*/
|
|
29
|
+
export declare function textWithEntitiesToRichText(input: TextWithEntities): tl.TypeRichText;
|
|
30
|
+
/**
|
|
31
|
+
* Convert a {@link tl.TypeRichText} tree back into a {@link TextWithEntities}.
|
|
32
|
+
*
|
|
33
|
+
* This conversion is **lossy**: rich text nodes that have no message entity
|
|
34
|
+
* equivalent (e.g. `textMarked`, `textSubscript`, anchors, images) are dropped,
|
|
35
|
+
* keeping only their textual content.
|
|
36
|
+
*/
|
|
37
|
+
export declare function richTextToTextWithEntities(rich: tl.TypeRichText): TextWithEntities;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tl } from '../../tl/index.js';
|
|
1
2
|
import { TextWithEntities } from '../types/misc/entities.js';
|
|
2
3
|
/**
|
|
3
4
|
* Join multiple text parts with entities into a single text with entities,
|
|
@@ -17,3 +18,20 @@ import { TextWithEntities } from '../types/misc/entities.js';
|
|
|
17
18
|
* ```
|
|
18
19
|
*/
|
|
19
20
|
export declare function joinTextWithEntities(parts: (string | TextWithEntities)[], delim?: string | TextWithEntities): TextWithEntities;
|
|
21
|
+
/**
|
|
22
|
+
* Convert a {@link TextWithEntities} into a {@link tl.TypeRichText} tree
|
|
23
|
+
* (as used in page blocks / instant view).
|
|
24
|
+
*
|
|
25
|
+
* Overlapping entities are handled by splitting the text at every entity
|
|
26
|
+
* boundary and nesting the wrappers per-segment, so the result may be more
|
|
27
|
+
* fragmented than the input, but always renders identically.
|
|
28
|
+
*/
|
|
29
|
+
export declare function textWithEntitiesToRichText(input: TextWithEntities): tl.TypeRichText;
|
|
30
|
+
/**
|
|
31
|
+
* Convert a {@link tl.TypeRichText} tree back into a {@link TextWithEntities}.
|
|
32
|
+
*
|
|
33
|
+
* This conversion is **lossy**: rich text nodes that have no message entity
|
|
34
|
+
* equivalent (e.g. `textMarked`, `textSubscript`, anchors, images) are dropped,
|
|
35
|
+
* keeping only their textual content.
|
|
36
|
+
*/
|
|
37
|
+
export declare function richTextToTextWithEntities(rich: tl.TypeRichText): TextWithEntities;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import Long from "long";
|
|
2
|
+
import { getMarkedPeerId } from "../../utils/peer-utils.js";
|
|
1
3
|
function joinTextWithEntities(parts, delim = "") {
|
|
2
4
|
const textParts = [];
|
|
3
5
|
const newEntities = [];
|
|
@@ -29,6 +31,180 @@ function joinTextWithEntities(parts, delim = "") {
|
|
|
29
31
|
entities: newEntities
|
|
30
32
|
};
|
|
31
33
|
}
|
|
34
|
+
function _entityToRichTextWrapper(entity, text) {
|
|
35
|
+
const covered = () => text.slice(entity.offset, entity.offset + entity.length);
|
|
36
|
+
switch (entity._) {
|
|
37
|
+
case "messageEntityBold":
|
|
38
|
+
return (inner) => ({ _: "textBold", text: inner });
|
|
39
|
+
case "messageEntityItalic":
|
|
40
|
+
return (inner) => ({ _: "textItalic", text: inner });
|
|
41
|
+
case "messageEntityUnderline":
|
|
42
|
+
return (inner) => ({ _: "textUnderline", text: inner });
|
|
43
|
+
case "messageEntityStrike":
|
|
44
|
+
return (inner) => ({ _: "textStrike", text: inner });
|
|
45
|
+
case "messageEntityCode":
|
|
46
|
+
case "messageEntityPre":
|
|
47
|
+
return (inner) => ({ _: "textFixed", text: inner });
|
|
48
|
+
case "messageEntitySpoiler":
|
|
49
|
+
return (inner) => ({ _: "textSpoiler", text: inner });
|
|
50
|
+
case "messageEntityMention":
|
|
51
|
+
return (inner) => ({ _: "textMention", text: inner });
|
|
52
|
+
case "messageEntityHashtag":
|
|
53
|
+
return (inner) => ({ _: "textHashtag", text: inner });
|
|
54
|
+
case "messageEntityCashtag":
|
|
55
|
+
return (inner) => ({ _: "textCashtag", text: inner });
|
|
56
|
+
case "messageEntityBotCommand":
|
|
57
|
+
return (inner) => ({ _: "textBotCommand", text: inner });
|
|
58
|
+
case "messageEntityBankCard":
|
|
59
|
+
return (inner) => ({ _: "textBankCard", text: inner });
|
|
60
|
+
case "messageEntityUrl":
|
|
61
|
+
return (inner) => ({ _: "textUrl", text: inner, url: covered(), webpageId: Long.ZERO });
|
|
62
|
+
case "messageEntityTextUrl":
|
|
63
|
+
return (inner) => ({ _: "textUrl", text: inner, url: entity.url, webpageId: Long.ZERO });
|
|
64
|
+
case "messageEntityEmail":
|
|
65
|
+
return (inner) => ({ _: "textEmail", text: inner, email: covered() });
|
|
66
|
+
case "messageEntityPhone":
|
|
67
|
+
return (inner) => ({ _: "textPhone", text: inner, phone: covered() });
|
|
68
|
+
case "messageEntityMentionName":
|
|
69
|
+
return (inner) => ({ _: "textMentionName", text: inner, userId: entity.userId });
|
|
70
|
+
case "inputMessageEntityMentionName":
|
|
71
|
+
return (inner) => ({ _: "textMentionName", text: inner, userId: getMarkedPeerId(entity.userId) });
|
|
72
|
+
case "messageEntityCustomEmoji":
|
|
73
|
+
return () => ({ _: "textCustomEmoji", documentId: entity.documentId, alt: covered() });
|
|
74
|
+
case "messageEntityFormattedDate":
|
|
75
|
+
return (inner) => ({
|
|
76
|
+
_: "textDate",
|
|
77
|
+
text: inner,
|
|
78
|
+
date: entity.date,
|
|
79
|
+
relative: entity.relative,
|
|
80
|
+
shortTime: entity.shortTime,
|
|
81
|
+
longTime: entity.longTime,
|
|
82
|
+
shortDate: entity.shortDate,
|
|
83
|
+
longDate: entity.longDate,
|
|
84
|
+
dayOfWeek: entity.dayOfWeek
|
|
85
|
+
});
|
|
86
|
+
default:
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function textWithEntitiesToRichText(input) {
|
|
91
|
+
const { text, entities } = input;
|
|
92
|
+
if (!text) return { _: "textEmpty" };
|
|
93
|
+
if (!entities?.length) return { _: "textPlain", text };
|
|
94
|
+
const bounds = /* @__PURE__ */ new Set([0, text.length]);
|
|
95
|
+
for (const e of entities) {
|
|
96
|
+
bounds.add(e.offset);
|
|
97
|
+
bounds.add(e.offset + e.length);
|
|
98
|
+
}
|
|
99
|
+
const sorted = [...bounds].filter((b) => b >= 0 && b <= text.length).sort((a, b) => a - b);
|
|
100
|
+
const segments = [];
|
|
101
|
+
for (let i = 0; i < sorted.length - 1; i++) {
|
|
102
|
+
const start = sorted[i];
|
|
103
|
+
const end = sorted[i + 1];
|
|
104
|
+
if (start === end) continue;
|
|
105
|
+
let node = { _: "textPlain", text: text.slice(start, end) };
|
|
106
|
+
const active = entities.filter((e) => e.offset <= start && e.offset + e.length >= end).sort((a, b) => a.length - b.length);
|
|
107
|
+
for (const e of active) {
|
|
108
|
+
const wrap = _entityToRichTextWrapper(e, text);
|
|
109
|
+
if (wrap) node = wrap(node);
|
|
110
|
+
}
|
|
111
|
+
segments.push(node);
|
|
112
|
+
}
|
|
113
|
+
if (segments.length === 0) return { _: "textEmpty" };
|
|
114
|
+
if (segments.length === 1) return segments[0];
|
|
115
|
+
return { _: "textConcat", texts: segments };
|
|
116
|
+
}
|
|
117
|
+
function _richTextNodeToEntity(node, offset, length) {
|
|
118
|
+
switch (node._) {
|
|
119
|
+
case "textBold":
|
|
120
|
+
return { _: "messageEntityBold", offset, length };
|
|
121
|
+
case "textItalic":
|
|
122
|
+
return { _: "messageEntityItalic", offset, length };
|
|
123
|
+
case "textUnderline":
|
|
124
|
+
return { _: "messageEntityUnderline", offset, length };
|
|
125
|
+
case "textStrike":
|
|
126
|
+
return { _: "messageEntityStrike", offset, length };
|
|
127
|
+
case "textFixed":
|
|
128
|
+
return { _: "messageEntityCode", offset, length };
|
|
129
|
+
case "textSpoiler":
|
|
130
|
+
return { _: "messageEntitySpoiler", offset, length };
|
|
131
|
+
case "textMention":
|
|
132
|
+
return { _: "messageEntityMention", offset, length };
|
|
133
|
+
case "textHashtag":
|
|
134
|
+
return { _: "messageEntityHashtag", offset, length };
|
|
135
|
+
case "textCashtag":
|
|
136
|
+
return { _: "messageEntityCashtag", offset, length };
|
|
137
|
+
case "textBotCommand":
|
|
138
|
+
return { _: "messageEntityBotCommand", offset, length };
|
|
139
|
+
case "textBankCard":
|
|
140
|
+
return { _: "messageEntityBankCard", offset, length };
|
|
141
|
+
case "textUrl":
|
|
142
|
+
return { _: "messageEntityTextUrl", offset, length, url: node.url };
|
|
143
|
+
case "textEmail":
|
|
144
|
+
return { _: "messageEntityEmail", offset, length };
|
|
145
|
+
case "textPhone":
|
|
146
|
+
return { _: "messageEntityPhone", offset, length };
|
|
147
|
+
case "textMentionName":
|
|
148
|
+
return { _: "messageEntityMentionName", offset, length, userId: node.userId };
|
|
149
|
+
case "textDate":
|
|
150
|
+
return {
|
|
151
|
+
_: "messageEntityFormattedDate",
|
|
152
|
+
offset,
|
|
153
|
+
length,
|
|
154
|
+
date: node.date,
|
|
155
|
+
relative: node.relative,
|
|
156
|
+
shortTime: node.shortTime,
|
|
157
|
+
longTime: node.longTime,
|
|
158
|
+
shortDate: node.shortDate,
|
|
159
|
+
longDate: node.longDate,
|
|
160
|
+
dayOfWeek: node.dayOfWeek
|
|
161
|
+
};
|
|
162
|
+
default:
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function richTextToTextWithEntities(rich) {
|
|
167
|
+
const entities = [];
|
|
168
|
+
let text = "";
|
|
169
|
+
const walk = (node) => {
|
|
170
|
+
switch (node._) {
|
|
171
|
+
case "textEmpty":
|
|
172
|
+
return;
|
|
173
|
+
case "textPlain":
|
|
174
|
+
text += node.text;
|
|
175
|
+
return;
|
|
176
|
+
case "textConcat":
|
|
177
|
+
for (const t of node.texts) walk(t);
|
|
178
|
+
return;
|
|
179
|
+
case "textImage":
|
|
180
|
+
return;
|
|
181
|
+
case "textMath":
|
|
182
|
+
text += node.source;
|
|
183
|
+
return;
|
|
184
|
+
case "textCustomEmoji": {
|
|
185
|
+
const start = text.length;
|
|
186
|
+
text += node.alt;
|
|
187
|
+
entities.push({
|
|
188
|
+
_: "messageEntityCustomEmoji",
|
|
189
|
+
offset: start,
|
|
190
|
+
length: text.length - start,
|
|
191
|
+
documentId: node.documentId
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
default: {
|
|
196
|
+
const start = text.length;
|
|
197
|
+
walk(node.text);
|
|
198
|
+
const entity = _richTextNodeToEntity(node, start, text.length - start);
|
|
199
|
+
if (entity) entities.push(entity);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
walk(rich);
|
|
204
|
+
return { text, entities };
|
|
205
|
+
}
|
|
32
206
|
export {
|
|
33
|
-
joinTextWithEntities
|
|
207
|
+
joinTextWithEntities,
|
|
208
|
+
richTextToTextWithEntities,
|
|
209
|
+
textWithEntitiesToRichText
|
|
34
210
|
};
|
package/index.cjs
CHANGED
|
@@ -56,6 +56,8 @@ const messageReactions = require("./highlevel/types/messages/message-reactions.c
|
|
|
56
56
|
const messageReplies = require("./highlevel/types/messages/message-replies.cjs");
|
|
57
57
|
const message = require("./highlevel/types/messages/message.cjs");
|
|
58
58
|
const repliedMessage = require("./highlevel/types/messages/replied-message.cjs");
|
|
59
|
+
const richMessage = require("./highlevel/types/messages/rich/rich-message.cjs");
|
|
60
|
+
const inner$1 = require("./highlevel/types/messages/rich/inner.cjs");
|
|
59
61
|
const searchFilters = require("./highlevel/types/messages/search-filters.cjs");
|
|
60
62
|
const suggestedPost = require("./highlevel/types/messages/suggested-post.cjs");
|
|
61
63
|
const collectibleInfo = require("./highlevel/types/misc/collectible-info.cjs");
|
|
@@ -225,6 +227,8 @@ exports.MessageReactions = messageReactions.MessageReactions;
|
|
|
225
227
|
exports.MessageRepliesInfo = messageReplies.MessageRepliesInfo;
|
|
226
228
|
exports.Message = message.Message;
|
|
227
229
|
exports.RepliedMessageInfo = repliedMessage.RepliedMessageInfo;
|
|
230
|
+
exports.RichMessage = richMessage.RichMessage;
|
|
231
|
+
exports.Rich = inner$1;
|
|
228
232
|
exports.SearchFilters = searchFilters.SearchFilters;
|
|
229
233
|
exports.SuggestedPostInfo = suggestedPost.SuggestedPostInfo;
|
|
230
234
|
exports.CollectibleInfo = collectibleInfo.CollectibleInfo;
|
package/index.js
CHANGED
|
@@ -49,6 +49,8 @@ import { MessageReactions } from "./highlevel/types/messages/message-reactions.j
|
|
|
49
49
|
import { MessageRepliesInfo } from "./highlevel/types/messages/message-replies.js";
|
|
50
50
|
import { Message } from "./highlevel/types/messages/message.js";
|
|
51
51
|
import { RepliedMessageInfo } from "./highlevel/types/messages/replied-message.js";
|
|
52
|
+
import { RichMessage } from "./highlevel/types/messages/rich/rich-message.js";
|
|
53
|
+
import * as inner$1 from "./highlevel/types/messages/rich/inner.js";
|
|
52
54
|
import { SearchFilters } from "./highlevel/types/messages/search-filters.js";
|
|
53
55
|
import { SuggestedPostInfo } from "./highlevel/types/messages/suggested-post.js";
|
|
54
56
|
import { CollectibleInfo } from "./highlevel/types/misc/collectible-info.js";
|
|
@@ -271,6 +273,8 @@ export {
|
|
|
271
273
|
RawUpdateInfo,
|
|
272
274
|
ReactionCount,
|
|
273
275
|
RepliedMessageInfo,
|
|
276
|
+
inner$1 as Rich,
|
|
277
|
+
RichMessage,
|
|
274
278
|
SavedStarGift,
|
|
275
279
|
SearchFilters,
|
|
276
280
|
SentCode,
|
package/methods.cjs
CHANGED
|
@@ -157,6 +157,7 @@ const iterInviteLinks = require("./highlevel/methods/invite-links/iter-invite-li
|
|
|
157
157
|
const revokeInviteLink = require("./highlevel/methods/invite-links/revoke-invite-link.cjs");
|
|
158
158
|
const appendTodoList = require("./highlevel/methods/messages/append-todo-list.cjs");
|
|
159
159
|
const closePoll = require("./highlevel/methods/messages/close-poll.cjs");
|
|
160
|
+
const createRichStreamingDraft = require("./highlevel/methods/messages/create-rich-streaming-draft.cjs");
|
|
160
161
|
const createStreamingDraft = require("./highlevel/methods/messages/create-streaming-draft.cjs");
|
|
161
162
|
const deleteMessages = require("./highlevel/methods/messages/delete-messages.cjs");
|
|
162
163
|
const deleteScheduledMessages = require("./highlevel/methods/messages/delete-scheduled-messages.cjs");
|
|
@@ -199,6 +200,7 @@ const sendPaidReaction = require("./highlevel/methods/messages/send-paid-reactio
|
|
|
199
200
|
const sendQuote = require("./highlevel/methods/messages/send-quote.cjs");
|
|
200
201
|
const sendReaction = require("./highlevel/methods/messages/send-reaction.cjs");
|
|
201
202
|
const sendReply = require("./highlevel/methods/messages/send-reply.cjs");
|
|
203
|
+
const sendRichMessage = require("./highlevel/methods/messages/send-rich-message.cjs");
|
|
202
204
|
const sendScheduled = require("./highlevel/methods/messages/send-scheduled.cjs");
|
|
203
205
|
const sendText = require("./highlevel/methods/messages/send-text.cjs");
|
|
204
206
|
const sendTyping = require("./highlevel/methods/messages/send-typing.cjs");
|
|
@@ -444,6 +446,7 @@ exports.iterInviteLinks = iterInviteLinks.iterInviteLinks;
|
|
|
444
446
|
exports.revokeInviteLink = revokeInviteLink.revokeInviteLink;
|
|
445
447
|
exports.appendTodoList = appendTodoList.appendTodoList;
|
|
446
448
|
exports.closePoll = closePoll.closePoll;
|
|
449
|
+
exports.createRichStreamingDraft = createRichStreamingDraft.createRichStreamingDraft;
|
|
447
450
|
exports.createStreamingDraft = createStreamingDraft.createStreamingDraft;
|
|
448
451
|
exports.deleteMessages = deleteMessages.deleteMessages;
|
|
449
452
|
exports.deleteMessagesById = deleteMessages.deleteMessagesById;
|
|
@@ -498,6 +501,7 @@ exports.sendReaction = sendReaction.sendReaction;
|
|
|
498
501
|
exports.replyMedia = sendReply.replyMedia;
|
|
499
502
|
exports.replyMediaGroup = sendReply.replyMediaGroup;
|
|
500
503
|
exports.replyText = sendReply.replyText;
|
|
504
|
+
exports.sendRichMessage = sendRichMessage.sendRichMessage;
|
|
501
505
|
exports.sendScheduled = sendScheduled.sendScheduled;
|
|
502
506
|
exports.sendText = sendText.sendText;
|
|
503
507
|
exports.sendTyping = sendTyping.sendTyping;
|
package/methods.js
CHANGED
|
@@ -150,6 +150,7 @@ import { iterInviteLinks } from "./highlevel/methods/invite-links/iter-invite-li
|
|
|
150
150
|
import { revokeInviteLink } from "./highlevel/methods/invite-links/revoke-invite-link.js";
|
|
151
151
|
import { appendTodoList } from "./highlevel/methods/messages/append-todo-list.js";
|
|
152
152
|
import { closePoll } from "./highlevel/methods/messages/close-poll.js";
|
|
153
|
+
import { createRichStreamingDraft } from "./highlevel/methods/messages/create-rich-streaming-draft.js";
|
|
153
154
|
import { createStreamingDraft } from "./highlevel/methods/messages/create-streaming-draft.js";
|
|
154
155
|
import { deleteMessages, deleteMessagesById } from "./highlevel/methods/messages/delete-messages.js";
|
|
155
156
|
import { deleteScheduledMessages } from "./highlevel/methods/messages/delete-scheduled-messages.js";
|
|
@@ -192,6 +193,7 @@ import { sendPaidReaction } from "./highlevel/methods/messages/send-paid-reactio
|
|
|
192
193
|
import { quoteWithMedia, quoteWithMediaGroup, quoteWithText } from "./highlevel/methods/messages/send-quote.js";
|
|
193
194
|
import { sendReaction } from "./highlevel/methods/messages/send-reaction.js";
|
|
194
195
|
import { replyMedia, replyMediaGroup, replyText } from "./highlevel/methods/messages/send-reply.js";
|
|
196
|
+
import { sendRichMessage } from "./highlevel/methods/messages/send-rich-message.js";
|
|
195
197
|
import { sendScheduled } from "./highlevel/methods/messages/send-scheduled.js";
|
|
196
198
|
import { sendText } from "./highlevel/methods/messages/send-text.js";
|
|
197
199
|
import { sendTyping } from "./highlevel/methods/messages/send-typing.js";
|
|
@@ -320,6 +322,7 @@ export {
|
|
|
320
322
|
createForumTopic,
|
|
321
323
|
createGroup,
|
|
322
324
|
createInviteLink,
|
|
325
|
+
createRichStreamingDraft,
|
|
323
326
|
createStickerSet,
|
|
324
327
|
createStreamingDraft,
|
|
325
328
|
createSupergroup,
|
|
@@ -520,6 +523,7 @@ export {
|
|
|
520
523
|
sendPaidReaction,
|
|
521
524
|
sendReaction,
|
|
522
525
|
sendRecoveryCode,
|
|
526
|
+
sendRichMessage,
|
|
523
527
|
sendScheduled,
|
|
524
528
|
sendStarGift,
|
|
525
529
|
sendStarGiftOffer,
|