@mtkruto/node 0.0.826 → 0.0.828
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/esm/client/client.d.ts +20 -0
- package/esm/client/client.js +52 -1
- package/esm/types/0_message_entity.d.ts +90 -0
- package/esm/types/0_message_entity.js +128 -0
- package/esm/utilities/0_html.d.ts +2 -0
- package/esm/utilities/0_html.js +74 -0
- package/package.json +1 -1
- package/script/client/client.d.ts +20 -0
- package/script/client/client.js +52 -1
- package/script/types/0_message_entity.d.ts +90 -0
- package/script/types/0_message_entity.js +156 -0
- package/script/utilities/0_html.d.ts +2 -0
- package/script/utilities/0_html.js +78 -0
package/esm/client/client.d.ts
CHANGED
|
@@ -4,7 +4,12 @@ import * as functions from "../tl/3_functions.js";
|
|
|
4
4
|
import { ClientAbstract } from "./client_abstract.js";
|
|
5
5
|
import { Storage } from "../storage/storage.js";
|
|
6
6
|
import { DC, TransportProvider } from "../transport/transport_provider.js";
|
|
7
|
+
import { MessageEntity } from "../types/0_message_entity.js";
|
|
7
8
|
export declare const restartAuth: unique symbol;
|
|
9
|
+
export declare enum ParseMode {
|
|
10
|
+
None = "none",
|
|
11
|
+
HTML = "html"
|
|
12
|
+
}
|
|
8
13
|
export interface AuthorizeUserParams<S = string> {
|
|
9
14
|
phone: S | (() => MaybePromise<S>);
|
|
10
15
|
code: S | (() => MaybePromise<S>);
|
|
@@ -12,6 +17,10 @@ export interface AuthorizeUserParams<S = string> {
|
|
|
12
17
|
}
|
|
13
18
|
export type UpdatesHandler = null | ((client: Client, update: types.Updates) => MaybePromise<void>);
|
|
14
19
|
export interface ClientParams {
|
|
20
|
+
/**
|
|
21
|
+
* Default parse mode. Defauls to `ParseMode.None`.
|
|
22
|
+
*/
|
|
23
|
+
parseMode?: ParseMode;
|
|
15
24
|
/**
|
|
16
25
|
* The transport provider to use. Defaults to `defaultTransportProvider`.
|
|
17
26
|
*/
|
|
@@ -51,6 +60,7 @@ export declare class Client extends ClientAbstract {
|
|
|
51
60
|
private promises;
|
|
52
61
|
private toAcknowledge;
|
|
53
62
|
updatesHandler: UpdatesHandler;
|
|
63
|
+
readonly parseMode: ParseMode;
|
|
54
64
|
readonly appVersion: string;
|
|
55
65
|
readonly deviceModel: string;
|
|
56
66
|
readonly langCode: string;
|
|
@@ -117,4 +127,14 @@ export declare class Client extends ClientAbstract {
|
|
|
117
127
|
private processUsers;
|
|
118
128
|
private processUpdates;
|
|
119
129
|
getInputPeer(id: string | number): Promise<types.InputPeerChat | types.InputPeerUser | types.InputPeerChannel>;
|
|
130
|
+
sendMessage(chatId: number | string, text: string, params?: {
|
|
131
|
+
parseMode?: ParseMode;
|
|
132
|
+
entities?: MessageEntity[];
|
|
133
|
+
disableWebPagePreview?: boolean;
|
|
134
|
+
disableNotification?: boolean;
|
|
135
|
+
protectContent?: boolean;
|
|
136
|
+
replyToMessageId?: number;
|
|
137
|
+
messageThreadId?: number;
|
|
138
|
+
sendAs?: number | string;
|
|
139
|
+
}): Promise<types.TypeUpdates>;
|
|
120
140
|
}
|
package/esm/client/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { gunzip } from "../deps.js";
|
|
2
2
|
import { ackThreshold, DEFAULT_APP_VERSION, DEFAULT_DEVICE_MODEL, DEFAULT_INITIAL_DC, DEFAULT_LANG_CODE, DEFAULT_LANG_PACK, DEFAULT_SYSTEM_LANG_CODE, DEFAULT_SYSTEM_VERSION, LAYER, MAX_CHANNEL_ID, MAX_CHAT_ID, USERNAME_TTL, ZERO_CHANNEL_ID } from "../constants.js";
|
|
3
|
-
import { bigIntFromBuffer, getRandomBigInt } from "../utilities/0_bigint.js";
|
|
3
|
+
import { bigIntFromBuffer, getRandomBigInt, getRandomId } from "../utilities/0_bigint.js";
|
|
4
|
+
import { parseHtml } from "../utilities/0_html.js";
|
|
4
5
|
import { decryptMessage, encryptMessage, getMessageId } from "../utilities/1_message.js";
|
|
5
6
|
import { checkPassword } from "../utilities/1_password.js";
|
|
6
7
|
import { as } from "../tl/1_tl_object.js";
|
|
@@ -14,7 +15,13 @@ import { ClientAbstract } from "./client_abstract.js";
|
|
|
14
15
|
import { ClientPlain } from "./client_plain.js";
|
|
15
16
|
import { StorageMemory } from "../storage/storage_memory.js";
|
|
16
17
|
import { sha1 } from "../utilities/0_hash.js";
|
|
18
|
+
import { messageEntityToTlObject } from "../types/0_message_entity.js";
|
|
17
19
|
export const restartAuth = Symbol();
|
|
20
|
+
export var ParseMode;
|
|
21
|
+
(function (ParseMode) {
|
|
22
|
+
ParseMode["None"] = "none";
|
|
23
|
+
ParseMode["HTML"] = "html";
|
|
24
|
+
})(ParseMode || (ParseMode = {}));
|
|
18
25
|
export class Client extends ClientAbstract {
|
|
19
26
|
/**
|
|
20
27
|
* Constructs the client.
|
|
@@ -80,6 +87,12 @@ export class Client extends ClientAbstract {
|
|
|
80
87
|
writable: true,
|
|
81
88
|
value: null
|
|
82
89
|
});
|
|
90
|
+
Object.defineProperty(this, "parseMode", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
configurable: true,
|
|
93
|
+
writable: true,
|
|
94
|
+
value: void 0
|
|
95
|
+
});
|
|
83
96
|
Object.defineProperty(this, "appVersion", {
|
|
84
97
|
enumerable: true,
|
|
85
98
|
configurable: true,
|
|
@@ -122,6 +135,7 @@ export class Client extends ClientAbstract {
|
|
|
122
135
|
writable: true,
|
|
123
136
|
value: false
|
|
124
137
|
});
|
|
138
|
+
this.parseMode = params?.parseMode ?? ParseMode.None;
|
|
125
139
|
this.appVersion = params?.appVersion ?? DEFAULT_APP_VERSION;
|
|
126
140
|
this.deviceModel = params?.deviceModel ?? DEFAULT_DEVICE_MODEL;
|
|
127
141
|
this.langCode = params?.langCode ?? DEFAULT_LANG_CODE;
|
|
@@ -584,4 +598,41 @@ export class Client extends ClientAbstract {
|
|
|
584
598
|
throw new Error("ID format unknown or not implemented");
|
|
585
599
|
}
|
|
586
600
|
}
|
|
601
|
+
async sendMessage(chatId, text, params) {
|
|
602
|
+
const entities_ = params?.entities ?? [];
|
|
603
|
+
const parseMode = params?.parseMode ?? this.parseMode;
|
|
604
|
+
switch (parseMode) {
|
|
605
|
+
case ParseMode.None:
|
|
606
|
+
break;
|
|
607
|
+
case ParseMode.HTML: {
|
|
608
|
+
const [newText, entitiesToPush] = parseHtml(text);
|
|
609
|
+
text = newText;
|
|
610
|
+
for (const entity of entitiesToPush) {
|
|
611
|
+
entities_.push(entity);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
const peer = await this.getInputPeer(chatId);
|
|
616
|
+
const randomId = getRandomId();
|
|
617
|
+
const message = text;
|
|
618
|
+
const noWebpage = params?.disableWebPagePreview ? true : undefined;
|
|
619
|
+
const silent = params?.disableNotification ? true : undefined;
|
|
620
|
+
const noforwards = params?.protectContent ? true : undefined;
|
|
621
|
+
const replyToMsgId = params?.replyToMessageId;
|
|
622
|
+
const topMsgId = params?.messageThreadId;
|
|
623
|
+
const sendAs = params?.sendAs ? await this.getInputPeer(params.sendAs) : undefined;
|
|
624
|
+
const entities = entities_?.length > 0 ? entities_.map((v) => messageEntityToTlObject(v)) : undefined;
|
|
625
|
+
return await this.invoke(new functions.MessagesSendMessage({
|
|
626
|
+
peer,
|
|
627
|
+
randomId,
|
|
628
|
+
message,
|
|
629
|
+
noWebpage,
|
|
630
|
+
silent,
|
|
631
|
+
noforwards,
|
|
632
|
+
replyToMsgId,
|
|
633
|
+
topMsgId,
|
|
634
|
+
sendAs,
|
|
635
|
+
entities,
|
|
636
|
+
}));
|
|
637
|
+
}
|
|
587
638
|
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as types from "../tl/2_types.js";
|
|
2
|
+
export declare enum MessageEntityType {
|
|
3
|
+
Mention = "mention",
|
|
4
|
+
Hashtag = "hashtag",
|
|
5
|
+
BotCommand = "bot_command",
|
|
6
|
+
URL = "url",
|
|
7
|
+
Email = "email",
|
|
8
|
+
Bold = "bold",
|
|
9
|
+
Italic = "italic",
|
|
10
|
+
Code = "code",
|
|
11
|
+
Pre = "pre",
|
|
12
|
+
TextURL = "text_url",
|
|
13
|
+
MentionName = "mention_name",
|
|
14
|
+
Cashtag = "cashtag",
|
|
15
|
+
Phone = "phone",
|
|
16
|
+
Underline = "underline",
|
|
17
|
+
Strike = "strike",
|
|
18
|
+
Blockquote = "blockquote",
|
|
19
|
+
BankCard = "bank_card",
|
|
20
|
+
Spoiler = "spoiler",
|
|
21
|
+
CustomEmoji = "custom_emoji"
|
|
22
|
+
}
|
|
23
|
+
export interface MessageEntityBase {
|
|
24
|
+
offset: number;
|
|
25
|
+
length: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MessageEntityMention extends MessageEntityBase {
|
|
28
|
+
type: MessageEntityType.Mention;
|
|
29
|
+
}
|
|
30
|
+
export interface MessageEntityHashtag extends MessageEntityBase {
|
|
31
|
+
type: MessageEntityType.Hashtag;
|
|
32
|
+
}
|
|
33
|
+
export interface MessageEntityBotCommand extends MessageEntityBase {
|
|
34
|
+
type: MessageEntityType.BotCommand;
|
|
35
|
+
}
|
|
36
|
+
export interface MessageEntityURL extends MessageEntityBase {
|
|
37
|
+
type: MessageEntityType.URL;
|
|
38
|
+
}
|
|
39
|
+
export interface MessageEntityEmailAddress extends MessageEntityBase {
|
|
40
|
+
type: MessageEntityType.Email;
|
|
41
|
+
}
|
|
42
|
+
export interface MessageEntityBold extends MessageEntityBase {
|
|
43
|
+
type: MessageEntityType.Bold;
|
|
44
|
+
}
|
|
45
|
+
export interface MessageEntityItalic extends MessageEntityBase {
|
|
46
|
+
type: MessageEntityType.Italic;
|
|
47
|
+
}
|
|
48
|
+
export interface MessageEntityPre extends MessageEntityBase {
|
|
49
|
+
type: MessageEntityType.Pre;
|
|
50
|
+
language: string;
|
|
51
|
+
}
|
|
52
|
+
export interface MessageEntityCode extends MessageEntityBase {
|
|
53
|
+
type: MessageEntityType.Code;
|
|
54
|
+
}
|
|
55
|
+
export interface MessageEntityTextURL extends MessageEntityBase {
|
|
56
|
+
type: MessageEntityType.TextURL;
|
|
57
|
+
url: string;
|
|
58
|
+
}
|
|
59
|
+
export interface MessageEntityMentionName extends MessageEntityBase {
|
|
60
|
+
type: MessageEntityType.MentionName;
|
|
61
|
+
userId: number;
|
|
62
|
+
}
|
|
63
|
+
export interface MessageEntityCashtag extends MessageEntityBase {
|
|
64
|
+
type: MessageEntityType.Cashtag;
|
|
65
|
+
}
|
|
66
|
+
export interface MessageEntityPhone extends MessageEntityBase {
|
|
67
|
+
type: MessageEntityType.Phone;
|
|
68
|
+
}
|
|
69
|
+
export interface MessageEntityUnderline extends MessageEntityBase {
|
|
70
|
+
type: MessageEntityType.Underline;
|
|
71
|
+
}
|
|
72
|
+
export interface MessageEntityStrike extends MessageEntityBase {
|
|
73
|
+
type: MessageEntityType.Strike;
|
|
74
|
+
}
|
|
75
|
+
export interface MessageEntityBlockquote extends MessageEntityBase {
|
|
76
|
+
type: MessageEntityType.Blockquote;
|
|
77
|
+
}
|
|
78
|
+
export interface MessageEntityBankCard extends MessageEntityBase {
|
|
79
|
+
type: MessageEntityType.BankCard;
|
|
80
|
+
}
|
|
81
|
+
export interface MessageEntitySpoiler extends MessageEntityBase {
|
|
82
|
+
type: MessageEntityType.Spoiler;
|
|
83
|
+
}
|
|
84
|
+
export interface MessageEntityCustomEmoji extends MessageEntityBase {
|
|
85
|
+
type: MessageEntityType.CustomEmoji;
|
|
86
|
+
documentId: bigint;
|
|
87
|
+
}
|
|
88
|
+
export type MessageEntity = MessageEntityMention | MessageEntityHashtag | MessageEntityBotCommand | MessageEntityURL | MessageEntityEmailAddress | MessageEntityBold | MessageEntityItalic | MessageEntityCode | MessageEntityPre | MessageEntityTextURL | MessageEntityMentionName | MessageEntityCashtag | MessageEntityPhone | MessageEntityUnderline | MessageEntityStrike | MessageEntityBlockquote | MessageEntityBankCard | MessageEntitySpoiler | MessageEntityCustomEmoji;
|
|
89
|
+
export declare function constructMessageEntity(obj: types.TypeMessageEntity): MessageEntity | null;
|
|
90
|
+
export declare function messageEntityToTlObject(entity: MessageEntity): types.MessageEntityMention | types.MessageEntityHashtag | types.MessageEntityBotCommand | types.MessageEntityURL | types.MessageEntityEmail | types.MessageEntityBold | types.MessageEntityItalic | types.MessageEntityCode | types.MessageEntityPre | types.MessageEntityTextURL | types.MessageEntityMentionName | types.MessageEntityPhone | types.MessageEntityCashtag | types.MessageEntityUnderline | types.MessageEntityStrike | types.MessageEntityBlockquote | types.MessageEntityBankCard | types.MessageEntitySpoiler | types.MessageEntityCustomEmoji;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import * as types from "../tl/2_types.js";
|
|
2
|
+
export var MessageEntityType;
|
|
3
|
+
(function (MessageEntityType) {
|
|
4
|
+
MessageEntityType["Mention"] = "mention";
|
|
5
|
+
MessageEntityType["Hashtag"] = "hashtag";
|
|
6
|
+
MessageEntityType["BotCommand"] = "bot_command";
|
|
7
|
+
MessageEntityType["URL"] = "url";
|
|
8
|
+
MessageEntityType["Email"] = "email";
|
|
9
|
+
MessageEntityType["Bold"] = "bold";
|
|
10
|
+
MessageEntityType["Italic"] = "italic";
|
|
11
|
+
MessageEntityType["Code"] = "code";
|
|
12
|
+
MessageEntityType["Pre"] = "pre";
|
|
13
|
+
MessageEntityType["TextURL"] = "text_url";
|
|
14
|
+
MessageEntityType["MentionName"] = "mention_name";
|
|
15
|
+
MessageEntityType["Cashtag"] = "cashtag";
|
|
16
|
+
MessageEntityType["Phone"] = "phone";
|
|
17
|
+
MessageEntityType["Underline"] = "underline";
|
|
18
|
+
MessageEntityType["Strike"] = "strike";
|
|
19
|
+
MessageEntityType["Blockquote"] = "blockquote";
|
|
20
|
+
MessageEntityType["BankCard"] = "bank_card";
|
|
21
|
+
MessageEntityType["Spoiler"] = "spoiler";
|
|
22
|
+
MessageEntityType["CustomEmoji"] = "custom_emoji";
|
|
23
|
+
})(MessageEntityType || (MessageEntityType = {}));
|
|
24
|
+
export function constructMessageEntity(obj) {
|
|
25
|
+
if (obj instanceof types.MessageEntityMention) {
|
|
26
|
+
return { type: MessageEntityType.Mention, offset: obj.offset, length: obj.length };
|
|
27
|
+
}
|
|
28
|
+
else if (obj instanceof types.MessageEntityHashtag) {
|
|
29
|
+
return { type: MessageEntityType.Hashtag, offset: obj.offset, length: obj.length };
|
|
30
|
+
}
|
|
31
|
+
else if (obj instanceof types.MessageEntityBotCommand) {
|
|
32
|
+
return { type: MessageEntityType.BotCommand, offset: obj.offset, length: obj.length };
|
|
33
|
+
}
|
|
34
|
+
else if (obj instanceof types.MessageEntityURL) {
|
|
35
|
+
return { type: MessageEntityType.URL, offset: obj.offset, length: obj.length };
|
|
36
|
+
}
|
|
37
|
+
else if (obj instanceof types.MessageEntityEmail) {
|
|
38
|
+
return { type: MessageEntityType.Email, offset: obj.offset, length: obj.length };
|
|
39
|
+
}
|
|
40
|
+
else if (obj instanceof types.MessageEntityBold) {
|
|
41
|
+
return { type: MessageEntityType.Bold, offset: obj.offset, length: obj.length };
|
|
42
|
+
}
|
|
43
|
+
else if (obj instanceof types.MessageEntityItalic) {
|
|
44
|
+
return { type: MessageEntityType.Italic, offset: obj.offset, length: obj.length };
|
|
45
|
+
}
|
|
46
|
+
else if (obj instanceof types.MessageEntityCode) {
|
|
47
|
+
return { type: MessageEntityType.Code, offset: obj.offset, length: obj.length };
|
|
48
|
+
}
|
|
49
|
+
else if (obj instanceof types.MessageEntityPre) {
|
|
50
|
+
return { type: MessageEntityType.Pre, offset: obj.offset, length: obj.length, language: obj.language };
|
|
51
|
+
}
|
|
52
|
+
else if (obj instanceof types.MessageEntityTextURL) {
|
|
53
|
+
return { type: MessageEntityType.TextURL, offset: obj.offset, length: obj.length, url: obj.url };
|
|
54
|
+
}
|
|
55
|
+
else if (obj instanceof types.MessageEntityMentionName) {
|
|
56
|
+
return { type: MessageEntityType.MentionName, offset: obj.offset, length: obj.length, userId: Number(obj.userId) };
|
|
57
|
+
}
|
|
58
|
+
else if (obj instanceof types.MessageEntityCashtag) {
|
|
59
|
+
return { type: MessageEntityType.Cashtag, offset: obj.offset, length: obj.length };
|
|
60
|
+
}
|
|
61
|
+
else if (obj instanceof types.MessageEntityPhone) {
|
|
62
|
+
return { type: MessageEntityType.Phone, offset: obj.offset, length: obj.length };
|
|
63
|
+
}
|
|
64
|
+
else if (obj instanceof types.MessageEntityUnderline) {
|
|
65
|
+
return { type: MessageEntityType.Underline, offset: obj.offset, length: obj.length };
|
|
66
|
+
}
|
|
67
|
+
else if (obj instanceof types.MessageEntityStrike) {
|
|
68
|
+
return { type: MessageEntityType.Strike, offset: obj.offset, length: obj.length };
|
|
69
|
+
}
|
|
70
|
+
else if (obj instanceof types.MessageEntityBlockquote) {
|
|
71
|
+
return { type: MessageEntityType.Blockquote, offset: obj.offset, length: obj.length };
|
|
72
|
+
}
|
|
73
|
+
else if (obj instanceof types.MessageEntityBankCard) {
|
|
74
|
+
return { type: MessageEntityType.BankCard, offset: obj.offset, length: obj.length };
|
|
75
|
+
}
|
|
76
|
+
else if (obj instanceof types.MessageEntitySpoiler) {
|
|
77
|
+
return { type: MessageEntityType.Spoiler, offset: obj.offset, length: obj.length };
|
|
78
|
+
}
|
|
79
|
+
else if (obj instanceof types.MessageEntityCustomEmoji) {
|
|
80
|
+
return { type: MessageEntityType.CustomEmoji, offset: obj.offset, length: obj.length, documentId: obj.documentId };
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function messageEntityToTlObject(entity) {
|
|
87
|
+
const { offset, length } = entity;
|
|
88
|
+
switch (entity.type) {
|
|
89
|
+
case MessageEntityType.Mention:
|
|
90
|
+
return new types.MessageEntityMention({ offset, length });
|
|
91
|
+
case MessageEntityType.Hashtag:
|
|
92
|
+
return new types.MessageEntityHashtag({ offset, length });
|
|
93
|
+
case MessageEntityType.BotCommand:
|
|
94
|
+
return new types.MessageEntityBotCommand({ offset, length });
|
|
95
|
+
case MessageEntityType.URL:
|
|
96
|
+
return new types.MessageEntityURL({ offset, length });
|
|
97
|
+
case MessageEntityType.Email:
|
|
98
|
+
return new types.MessageEntityEmail({ offset, length });
|
|
99
|
+
case MessageEntityType.Bold:
|
|
100
|
+
return new types.MessageEntityBold({ offset, length });
|
|
101
|
+
case MessageEntityType.Italic:
|
|
102
|
+
return new types.MessageEntityItalic({ offset, length });
|
|
103
|
+
case MessageEntityType.Code:
|
|
104
|
+
return new types.MessageEntityCode({ offset, length });
|
|
105
|
+
case MessageEntityType.Pre:
|
|
106
|
+
return new types.MessageEntityPre({ offset, length, language: entity.language });
|
|
107
|
+
case MessageEntityType.TextURL:
|
|
108
|
+
return new types.MessageEntityTextURL({ offset, length, url: entity.url });
|
|
109
|
+
case MessageEntityType.MentionName:
|
|
110
|
+
return new types.MessageEntityMentionName({ offset, length, userId: BigInt(entity.userId) });
|
|
111
|
+
case MessageEntityType.Cashtag:
|
|
112
|
+
return new types.MessageEntityCashtag({ offset, length });
|
|
113
|
+
case MessageEntityType.Phone:
|
|
114
|
+
return new types.MessageEntityPhone({ offset, length });
|
|
115
|
+
case MessageEntityType.Underline:
|
|
116
|
+
return new types.MessageEntityUnderline({ offset, length });
|
|
117
|
+
case MessageEntityType.Strike:
|
|
118
|
+
return new types.MessageEntityStrike({ offset, length });
|
|
119
|
+
case MessageEntityType.Blockquote:
|
|
120
|
+
return new types.MessageEntityBlockquote({ offset, length });
|
|
121
|
+
case MessageEntityType.BankCard:
|
|
122
|
+
return new types.MessageEntityBankCard({ offset, length });
|
|
123
|
+
case MessageEntityType.Spoiler:
|
|
124
|
+
return new types.MessageEntitySpoiler({ offset, length });
|
|
125
|
+
case MessageEntityType.CustomEmoji:
|
|
126
|
+
return new types.MessageEntityCustomEmoji({ offset, length, documentId: entity.documentId });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Parser } from "../deps.js";
|
|
2
|
+
import { MessageEntityType } from "../types/0_message_entity.js";
|
|
3
|
+
export function parseHtml(html) {
|
|
4
|
+
let text = "";
|
|
5
|
+
const entities = new Array();
|
|
6
|
+
const queue = new Array();
|
|
7
|
+
const parser = new Parser({
|
|
8
|
+
onopentag(name, attribs) {
|
|
9
|
+
switch (name) {
|
|
10
|
+
case "b":
|
|
11
|
+
case "strong":
|
|
12
|
+
queue.push({ type: MessageEntityType.Bold, offset: text.length, length: 0 });
|
|
13
|
+
break;
|
|
14
|
+
case "em":
|
|
15
|
+
case "i":
|
|
16
|
+
queue.push({ type: MessageEntityType.Italic, offset: text.length, length: 0 });
|
|
17
|
+
break;
|
|
18
|
+
case "code":
|
|
19
|
+
queue.push({ type: MessageEntityType.Code, offset: text.length, length: 0 });
|
|
20
|
+
break;
|
|
21
|
+
case "pre": {
|
|
22
|
+
const language = attribs.language ?? "";
|
|
23
|
+
queue.push({ type: MessageEntityType.Pre, offset: text.length, length: 0, language });
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case "a": {
|
|
27
|
+
const url = attribs.href;
|
|
28
|
+
if (!url) {
|
|
29
|
+
throw new Error("Missing attribute href");
|
|
30
|
+
}
|
|
31
|
+
queue.push({ type: MessageEntityType.TextURL, offset: text.length, length: 0, url });
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case "ins":
|
|
35
|
+
case "u":
|
|
36
|
+
queue.push({ type: MessageEntityType.Underline, offset: text.length, length: 0 });
|
|
37
|
+
break;
|
|
38
|
+
case "del":
|
|
39
|
+
case "strike":
|
|
40
|
+
queue.push({ type: MessageEntityType.Strike, offset: text.length, length: 0 });
|
|
41
|
+
break;
|
|
42
|
+
case "span":
|
|
43
|
+
if (attribs.class != "tg-spoiler") {
|
|
44
|
+
throw new Error("The class attribute must be tg-spoiler");
|
|
45
|
+
}
|
|
46
|
+
// falls through
|
|
47
|
+
case "tg-spoiler":
|
|
48
|
+
queue.push({ type: MessageEntityType.Spoiler, offset: text.length, length: 0 });
|
|
49
|
+
break;
|
|
50
|
+
case "tg-emoji":
|
|
51
|
+
if (!attribs["emoji-id"]) {
|
|
52
|
+
throw new Error("Missing attribute emoji-id");
|
|
53
|
+
}
|
|
54
|
+
queue.push({ type: MessageEntityType.Spoiler, offset: text.length, length: 0 });
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
ontext(data) {
|
|
58
|
+
text += data;
|
|
59
|
+
const lastItem = queue[queue.length - 1];
|
|
60
|
+
if (lastItem) {
|
|
61
|
+
lastItem.length += data.length;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
onclosetag() {
|
|
65
|
+
const lastItem = queue.pop();
|
|
66
|
+
if (lastItem) {
|
|
67
|
+
entities.push(lastItem);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
parser.write(html);
|
|
72
|
+
parser.end();
|
|
73
|
+
return [text, entities];
|
|
74
|
+
}
|
package/package.json
CHANGED
|
@@ -4,7 +4,12 @@ import * as functions from "../tl/3_functions.js";
|
|
|
4
4
|
import { ClientAbstract } from "./client_abstract.js";
|
|
5
5
|
import { Storage } from "../storage/storage.js";
|
|
6
6
|
import { DC, TransportProvider } from "../transport/transport_provider.js";
|
|
7
|
+
import { MessageEntity } from "../types/0_message_entity.js";
|
|
7
8
|
export declare const restartAuth: unique symbol;
|
|
9
|
+
export declare enum ParseMode {
|
|
10
|
+
None = "none",
|
|
11
|
+
HTML = "html"
|
|
12
|
+
}
|
|
8
13
|
export interface AuthorizeUserParams<S = string> {
|
|
9
14
|
phone: S | (() => MaybePromise<S>);
|
|
10
15
|
code: S | (() => MaybePromise<S>);
|
|
@@ -12,6 +17,10 @@ export interface AuthorizeUserParams<S = string> {
|
|
|
12
17
|
}
|
|
13
18
|
export type UpdatesHandler = null | ((client: Client, update: types.Updates) => MaybePromise<void>);
|
|
14
19
|
export interface ClientParams {
|
|
20
|
+
/**
|
|
21
|
+
* Default parse mode. Defauls to `ParseMode.None`.
|
|
22
|
+
*/
|
|
23
|
+
parseMode?: ParseMode;
|
|
15
24
|
/**
|
|
16
25
|
* The transport provider to use. Defaults to `defaultTransportProvider`.
|
|
17
26
|
*/
|
|
@@ -51,6 +60,7 @@ export declare class Client extends ClientAbstract {
|
|
|
51
60
|
private promises;
|
|
52
61
|
private toAcknowledge;
|
|
53
62
|
updatesHandler: UpdatesHandler;
|
|
63
|
+
readonly parseMode: ParseMode;
|
|
54
64
|
readonly appVersion: string;
|
|
55
65
|
readonly deviceModel: string;
|
|
56
66
|
readonly langCode: string;
|
|
@@ -117,4 +127,14 @@ export declare class Client extends ClientAbstract {
|
|
|
117
127
|
private processUsers;
|
|
118
128
|
private processUpdates;
|
|
119
129
|
getInputPeer(id: string | number): Promise<types.InputPeerChat | types.InputPeerUser | types.InputPeerChannel>;
|
|
130
|
+
sendMessage(chatId: number | string, text: string, params?: {
|
|
131
|
+
parseMode?: ParseMode;
|
|
132
|
+
entities?: MessageEntity[];
|
|
133
|
+
disableWebPagePreview?: boolean;
|
|
134
|
+
disableNotification?: boolean;
|
|
135
|
+
protectContent?: boolean;
|
|
136
|
+
replyToMessageId?: number;
|
|
137
|
+
messageThreadId?: number;
|
|
138
|
+
sendAs?: number | string;
|
|
139
|
+
}): Promise<types.TypeUpdates>;
|
|
120
140
|
}
|
package/script/client/client.js
CHANGED
|
@@ -23,10 +23,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.Client = exports.restartAuth = void 0;
|
|
26
|
+
exports.Client = exports.ParseMode = exports.restartAuth = void 0;
|
|
27
27
|
const deps_js_1 = require("../deps.js");
|
|
28
28
|
const constants_js_1 = require("../constants.js");
|
|
29
29
|
const _0_bigint_js_1 = require("../utilities/0_bigint.js");
|
|
30
|
+
const _0_html_js_1 = require("../utilities/0_html.js");
|
|
30
31
|
const _1_message_js_1 = require("../utilities/1_message.js");
|
|
31
32
|
const _1_password_js_1 = require("../utilities/1_password.js");
|
|
32
33
|
const _1_tl_object_js_1 = require("../tl/1_tl_object.js");
|
|
@@ -40,7 +41,13 @@ const client_abstract_js_1 = require("./client_abstract.js");
|
|
|
40
41
|
const client_plain_js_1 = require("./client_plain.js");
|
|
41
42
|
const storage_memory_js_1 = require("../storage/storage_memory.js");
|
|
42
43
|
const _0_hash_js_1 = require("../utilities/0_hash.js");
|
|
44
|
+
const _0_message_entity_js_1 = require("../types/0_message_entity.js");
|
|
43
45
|
exports.restartAuth = Symbol();
|
|
46
|
+
var ParseMode;
|
|
47
|
+
(function (ParseMode) {
|
|
48
|
+
ParseMode["None"] = "none";
|
|
49
|
+
ParseMode["HTML"] = "html";
|
|
50
|
+
})(ParseMode = exports.ParseMode || (exports.ParseMode = {}));
|
|
44
51
|
class Client extends client_abstract_js_1.ClientAbstract {
|
|
45
52
|
/**
|
|
46
53
|
* Constructs the client.
|
|
@@ -106,6 +113,12 @@ class Client extends client_abstract_js_1.ClientAbstract {
|
|
|
106
113
|
writable: true,
|
|
107
114
|
value: null
|
|
108
115
|
});
|
|
116
|
+
Object.defineProperty(this, "parseMode", {
|
|
117
|
+
enumerable: true,
|
|
118
|
+
configurable: true,
|
|
119
|
+
writable: true,
|
|
120
|
+
value: void 0
|
|
121
|
+
});
|
|
109
122
|
Object.defineProperty(this, "appVersion", {
|
|
110
123
|
enumerable: true,
|
|
111
124
|
configurable: true,
|
|
@@ -148,6 +161,7 @@ class Client extends client_abstract_js_1.ClientAbstract {
|
|
|
148
161
|
writable: true,
|
|
149
162
|
value: false
|
|
150
163
|
});
|
|
164
|
+
this.parseMode = params?.parseMode ?? ParseMode.None;
|
|
151
165
|
this.appVersion = params?.appVersion ?? constants_js_1.DEFAULT_APP_VERSION;
|
|
152
166
|
this.deviceModel = params?.deviceModel ?? constants_js_1.DEFAULT_DEVICE_MODEL;
|
|
153
167
|
this.langCode = params?.langCode ?? constants_js_1.DEFAULT_LANG_CODE;
|
|
@@ -610,5 +624,42 @@ class Client extends client_abstract_js_1.ClientAbstract {
|
|
|
610
624
|
throw new Error("ID format unknown or not implemented");
|
|
611
625
|
}
|
|
612
626
|
}
|
|
627
|
+
async sendMessage(chatId, text, params) {
|
|
628
|
+
const entities_ = params?.entities ?? [];
|
|
629
|
+
const parseMode = params?.parseMode ?? this.parseMode;
|
|
630
|
+
switch (parseMode) {
|
|
631
|
+
case ParseMode.None:
|
|
632
|
+
break;
|
|
633
|
+
case ParseMode.HTML: {
|
|
634
|
+
const [newText, entitiesToPush] = (0, _0_html_js_1.parseHtml)(text);
|
|
635
|
+
text = newText;
|
|
636
|
+
for (const entity of entitiesToPush) {
|
|
637
|
+
entities_.push(entity);
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
const peer = await this.getInputPeer(chatId);
|
|
642
|
+
const randomId = (0, _0_bigint_js_1.getRandomId)();
|
|
643
|
+
const message = text;
|
|
644
|
+
const noWebpage = params?.disableWebPagePreview ? true : undefined;
|
|
645
|
+
const silent = params?.disableNotification ? true : undefined;
|
|
646
|
+
const noforwards = params?.protectContent ? true : undefined;
|
|
647
|
+
const replyToMsgId = params?.replyToMessageId;
|
|
648
|
+
const topMsgId = params?.messageThreadId;
|
|
649
|
+
const sendAs = params?.sendAs ? await this.getInputPeer(params.sendAs) : undefined;
|
|
650
|
+
const entities = entities_?.length > 0 ? entities_.map((v) => (0, _0_message_entity_js_1.messageEntityToTlObject)(v)) : undefined;
|
|
651
|
+
return await this.invoke(new functions.MessagesSendMessage({
|
|
652
|
+
peer,
|
|
653
|
+
randomId,
|
|
654
|
+
message,
|
|
655
|
+
noWebpage,
|
|
656
|
+
silent,
|
|
657
|
+
noforwards,
|
|
658
|
+
replyToMsgId,
|
|
659
|
+
topMsgId,
|
|
660
|
+
sendAs,
|
|
661
|
+
entities,
|
|
662
|
+
}));
|
|
663
|
+
}
|
|
613
664
|
}
|
|
614
665
|
exports.Client = Client;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as types from "../tl/2_types.js";
|
|
2
|
+
export declare enum MessageEntityType {
|
|
3
|
+
Mention = "mention",
|
|
4
|
+
Hashtag = "hashtag",
|
|
5
|
+
BotCommand = "bot_command",
|
|
6
|
+
URL = "url",
|
|
7
|
+
Email = "email",
|
|
8
|
+
Bold = "bold",
|
|
9
|
+
Italic = "italic",
|
|
10
|
+
Code = "code",
|
|
11
|
+
Pre = "pre",
|
|
12
|
+
TextURL = "text_url",
|
|
13
|
+
MentionName = "mention_name",
|
|
14
|
+
Cashtag = "cashtag",
|
|
15
|
+
Phone = "phone",
|
|
16
|
+
Underline = "underline",
|
|
17
|
+
Strike = "strike",
|
|
18
|
+
Blockquote = "blockquote",
|
|
19
|
+
BankCard = "bank_card",
|
|
20
|
+
Spoiler = "spoiler",
|
|
21
|
+
CustomEmoji = "custom_emoji"
|
|
22
|
+
}
|
|
23
|
+
export interface MessageEntityBase {
|
|
24
|
+
offset: number;
|
|
25
|
+
length: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MessageEntityMention extends MessageEntityBase {
|
|
28
|
+
type: MessageEntityType.Mention;
|
|
29
|
+
}
|
|
30
|
+
export interface MessageEntityHashtag extends MessageEntityBase {
|
|
31
|
+
type: MessageEntityType.Hashtag;
|
|
32
|
+
}
|
|
33
|
+
export interface MessageEntityBotCommand extends MessageEntityBase {
|
|
34
|
+
type: MessageEntityType.BotCommand;
|
|
35
|
+
}
|
|
36
|
+
export interface MessageEntityURL extends MessageEntityBase {
|
|
37
|
+
type: MessageEntityType.URL;
|
|
38
|
+
}
|
|
39
|
+
export interface MessageEntityEmailAddress extends MessageEntityBase {
|
|
40
|
+
type: MessageEntityType.Email;
|
|
41
|
+
}
|
|
42
|
+
export interface MessageEntityBold extends MessageEntityBase {
|
|
43
|
+
type: MessageEntityType.Bold;
|
|
44
|
+
}
|
|
45
|
+
export interface MessageEntityItalic extends MessageEntityBase {
|
|
46
|
+
type: MessageEntityType.Italic;
|
|
47
|
+
}
|
|
48
|
+
export interface MessageEntityPre extends MessageEntityBase {
|
|
49
|
+
type: MessageEntityType.Pre;
|
|
50
|
+
language: string;
|
|
51
|
+
}
|
|
52
|
+
export interface MessageEntityCode extends MessageEntityBase {
|
|
53
|
+
type: MessageEntityType.Code;
|
|
54
|
+
}
|
|
55
|
+
export interface MessageEntityTextURL extends MessageEntityBase {
|
|
56
|
+
type: MessageEntityType.TextURL;
|
|
57
|
+
url: string;
|
|
58
|
+
}
|
|
59
|
+
export interface MessageEntityMentionName extends MessageEntityBase {
|
|
60
|
+
type: MessageEntityType.MentionName;
|
|
61
|
+
userId: number;
|
|
62
|
+
}
|
|
63
|
+
export interface MessageEntityCashtag extends MessageEntityBase {
|
|
64
|
+
type: MessageEntityType.Cashtag;
|
|
65
|
+
}
|
|
66
|
+
export interface MessageEntityPhone extends MessageEntityBase {
|
|
67
|
+
type: MessageEntityType.Phone;
|
|
68
|
+
}
|
|
69
|
+
export interface MessageEntityUnderline extends MessageEntityBase {
|
|
70
|
+
type: MessageEntityType.Underline;
|
|
71
|
+
}
|
|
72
|
+
export interface MessageEntityStrike extends MessageEntityBase {
|
|
73
|
+
type: MessageEntityType.Strike;
|
|
74
|
+
}
|
|
75
|
+
export interface MessageEntityBlockquote extends MessageEntityBase {
|
|
76
|
+
type: MessageEntityType.Blockquote;
|
|
77
|
+
}
|
|
78
|
+
export interface MessageEntityBankCard extends MessageEntityBase {
|
|
79
|
+
type: MessageEntityType.BankCard;
|
|
80
|
+
}
|
|
81
|
+
export interface MessageEntitySpoiler extends MessageEntityBase {
|
|
82
|
+
type: MessageEntityType.Spoiler;
|
|
83
|
+
}
|
|
84
|
+
export interface MessageEntityCustomEmoji extends MessageEntityBase {
|
|
85
|
+
type: MessageEntityType.CustomEmoji;
|
|
86
|
+
documentId: bigint;
|
|
87
|
+
}
|
|
88
|
+
export type MessageEntity = MessageEntityMention | MessageEntityHashtag | MessageEntityBotCommand | MessageEntityURL | MessageEntityEmailAddress | MessageEntityBold | MessageEntityItalic | MessageEntityCode | MessageEntityPre | MessageEntityTextURL | MessageEntityMentionName | MessageEntityCashtag | MessageEntityPhone | MessageEntityUnderline | MessageEntityStrike | MessageEntityBlockquote | MessageEntityBankCard | MessageEntitySpoiler | MessageEntityCustomEmoji;
|
|
89
|
+
export declare function constructMessageEntity(obj: types.TypeMessageEntity): MessageEntity | null;
|
|
90
|
+
export declare function messageEntityToTlObject(entity: MessageEntity): types.MessageEntityMention | types.MessageEntityHashtag | types.MessageEntityBotCommand | types.MessageEntityURL | types.MessageEntityEmail | types.MessageEntityBold | types.MessageEntityItalic | types.MessageEntityCode | types.MessageEntityPre | types.MessageEntityTextURL | types.MessageEntityMentionName | types.MessageEntityPhone | types.MessageEntityCashtag | types.MessageEntityUnderline | types.MessageEntityStrike | types.MessageEntityBlockquote | types.MessageEntityBankCard | types.MessageEntitySpoiler | types.MessageEntityCustomEmoji;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.messageEntityToTlObject = exports.constructMessageEntity = exports.MessageEntityType = void 0;
|
|
27
|
+
const types = __importStar(require("../tl/2_types.js"));
|
|
28
|
+
var MessageEntityType;
|
|
29
|
+
(function (MessageEntityType) {
|
|
30
|
+
MessageEntityType["Mention"] = "mention";
|
|
31
|
+
MessageEntityType["Hashtag"] = "hashtag";
|
|
32
|
+
MessageEntityType["BotCommand"] = "bot_command";
|
|
33
|
+
MessageEntityType["URL"] = "url";
|
|
34
|
+
MessageEntityType["Email"] = "email";
|
|
35
|
+
MessageEntityType["Bold"] = "bold";
|
|
36
|
+
MessageEntityType["Italic"] = "italic";
|
|
37
|
+
MessageEntityType["Code"] = "code";
|
|
38
|
+
MessageEntityType["Pre"] = "pre";
|
|
39
|
+
MessageEntityType["TextURL"] = "text_url";
|
|
40
|
+
MessageEntityType["MentionName"] = "mention_name";
|
|
41
|
+
MessageEntityType["Cashtag"] = "cashtag";
|
|
42
|
+
MessageEntityType["Phone"] = "phone";
|
|
43
|
+
MessageEntityType["Underline"] = "underline";
|
|
44
|
+
MessageEntityType["Strike"] = "strike";
|
|
45
|
+
MessageEntityType["Blockquote"] = "blockquote";
|
|
46
|
+
MessageEntityType["BankCard"] = "bank_card";
|
|
47
|
+
MessageEntityType["Spoiler"] = "spoiler";
|
|
48
|
+
MessageEntityType["CustomEmoji"] = "custom_emoji";
|
|
49
|
+
})(MessageEntityType = exports.MessageEntityType || (exports.MessageEntityType = {}));
|
|
50
|
+
function constructMessageEntity(obj) {
|
|
51
|
+
if (obj instanceof types.MessageEntityMention) {
|
|
52
|
+
return { type: MessageEntityType.Mention, offset: obj.offset, length: obj.length };
|
|
53
|
+
}
|
|
54
|
+
else if (obj instanceof types.MessageEntityHashtag) {
|
|
55
|
+
return { type: MessageEntityType.Hashtag, offset: obj.offset, length: obj.length };
|
|
56
|
+
}
|
|
57
|
+
else if (obj instanceof types.MessageEntityBotCommand) {
|
|
58
|
+
return { type: MessageEntityType.BotCommand, offset: obj.offset, length: obj.length };
|
|
59
|
+
}
|
|
60
|
+
else if (obj instanceof types.MessageEntityURL) {
|
|
61
|
+
return { type: MessageEntityType.URL, offset: obj.offset, length: obj.length };
|
|
62
|
+
}
|
|
63
|
+
else if (obj instanceof types.MessageEntityEmail) {
|
|
64
|
+
return { type: MessageEntityType.Email, offset: obj.offset, length: obj.length };
|
|
65
|
+
}
|
|
66
|
+
else if (obj instanceof types.MessageEntityBold) {
|
|
67
|
+
return { type: MessageEntityType.Bold, offset: obj.offset, length: obj.length };
|
|
68
|
+
}
|
|
69
|
+
else if (obj instanceof types.MessageEntityItalic) {
|
|
70
|
+
return { type: MessageEntityType.Italic, offset: obj.offset, length: obj.length };
|
|
71
|
+
}
|
|
72
|
+
else if (obj instanceof types.MessageEntityCode) {
|
|
73
|
+
return { type: MessageEntityType.Code, offset: obj.offset, length: obj.length };
|
|
74
|
+
}
|
|
75
|
+
else if (obj instanceof types.MessageEntityPre) {
|
|
76
|
+
return { type: MessageEntityType.Pre, offset: obj.offset, length: obj.length, language: obj.language };
|
|
77
|
+
}
|
|
78
|
+
else if (obj instanceof types.MessageEntityTextURL) {
|
|
79
|
+
return { type: MessageEntityType.TextURL, offset: obj.offset, length: obj.length, url: obj.url };
|
|
80
|
+
}
|
|
81
|
+
else if (obj instanceof types.MessageEntityMentionName) {
|
|
82
|
+
return { type: MessageEntityType.MentionName, offset: obj.offset, length: obj.length, userId: Number(obj.userId) };
|
|
83
|
+
}
|
|
84
|
+
else if (obj instanceof types.MessageEntityCashtag) {
|
|
85
|
+
return { type: MessageEntityType.Cashtag, offset: obj.offset, length: obj.length };
|
|
86
|
+
}
|
|
87
|
+
else if (obj instanceof types.MessageEntityPhone) {
|
|
88
|
+
return { type: MessageEntityType.Phone, offset: obj.offset, length: obj.length };
|
|
89
|
+
}
|
|
90
|
+
else if (obj instanceof types.MessageEntityUnderline) {
|
|
91
|
+
return { type: MessageEntityType.Underline, offset: obj.offset, length: obj.length };
|
|
92
|
+
}
|
|
93
|
+
else if (obj instanceof types.MessageEntityStrike) {
|
|
94
|
+
return { type: MessageEntityType.Strike, offset: obj.offset, length: obj.length };
|
|
95
|
+
}
|
|
96
|
+
else if (obj instanceof types.MessageEntityBlockquote) {
|
|
97
|
+
return { type: MessageEntityType.Blockquote, offset: obj.offset, length: obj.length };
|
|
98
|
+
}
|
|
99
|
+
else if (obj instanceof types.MessageEntityBankCard) {
|
|
100
|
+
return { type: MessageEntityType.BankCard, offset: obj.offset, length: obj.length };
|
|
101
|
+
}
|
|
102
|
+
else if (obj instanceof types.MessageEntitySpoiler) {
|
|
103
|
+
return { type: MessageEntityType.Spoiler, offset: obj.offset, length: obj.length };
|
|
104
|
+
}
|
|
105
|
+
else if (obj instanceof types.MessageEntityCustomEmoji) {
|
|
106
|
+
return { type: MessageEntityType.CustomEmoji, offset: obj.offset, length: obj.length, documentId: obj.documentId };
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.constructMessageEntity = constructMessageEntity;
|
|
113
|
+
function messageEntityToTlObject(entity) {
|
|
114
|
+
const { offset, length } = entity;
|
|
115
|
+
switch (entity.type) {
|
|
116
|
+
case MessageEntityType.Mention:
|
|
117
|
+
return new types.MessageEntityMention({ offset, length });
|
|
118
|
+
case MessageEntityType.Hashtag:
|
|
119
|
+
return new types.MessageEntityHashtag({ offset, length });
|
|
120
|
+
case MessageEntityType.BotCommand:
|
|
121
|
+
return new types.MessageEntityBotCommand({ offset, length });
|
|
122
|
+
case MessageEntityType.URL:
|
|
123
|
+
return new types.MessageEntityURL({ offset, length });
|
|
124
|
+
case MessageEntityType.Email:
|
|
125
|
+
return new types.MessageEntityEmail({ offset, length });
|
|
126
|
+
case MessageEntityType.Bold:
|
|
127
|
+
return new types.MessageEntityBold({ offset, length });
|
|
128
|
+
case MessageEntityType.Italic:
|
|
129
|
+
return new types.MessageEntityItalic({ offset, length });
|
|
130
|
+
case MessageEntityType.Code:
|
|
131
|
+
return new types.MessageEntityCode({ offset, length });
|
|
132
|
+
case MessageEntityType.Pre:
|
|
133
|
+
return new types.MessageEntityPre({ offset, length, language: entity.language });
|
|
134
|
+
case MessageEntityType.TextURL:
|
|
135
|
+
return new types.MessageEntityTextURL({ offset, length, url: entity.url });
|
|
136
|
+
case MessageEntityType.MentionName:
|
|
137
|
+
return new types.MessageEntityMentionName({ offset, length, userId: BigInt(entity.userId) });
|
|
138
|
+
case MessageEntityType.Cashtag:
|
|
139
|
+
return new types.MessageEntityCashtag({ offset, length });
|
|
140
|
+
case MessageEntityType.Phone:
|
|
141
|
+
return new types.MessageEntityPhone({ offset, length });
|
|
142
|
+
case MessageEntityType.Underline:
|
|
143
|
+
return new types.MessageEntityUnderline({ offset, length });
|
|
144
|
+
case MessageEntityType.Strike:
|
|
145
|
+
return new types.MessageEntityStrike({ offset, length });
|
|
146
|
+
case MessageEntityType.Blockquote:
|
|
147
|
+
return new types.MessageEntityBlockquote({ offset, length });
|
|
148
|
+
case MessageEntityType.BankCard:
|
|
149
|
+
return new types.MessageEntityBankCard({ offset, length });
|
|
150
|
+
case MessageEntityType.Spoiler:
|
|
151
|
+
return new types.MessageEntitySpoiler({ offset, length });
|
|
152
|
+
case MessageEntityType.CustomEmoji:
|
|
153
|
+
return new types.MessageEntityCustomEmoji({ offset, length, documentId: entity.documentId });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.messageEntityToTlObject = messageEntityToTlObject;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseHtml = void 0;
|
|
4
|
+
const deps_js_1 = require("../deps.js");
|
|
5
|
+
const _0_message_entity_js_1 = require("../types/0_message_entity.js");
|
|
6
|
+
function parseHtml(html) {
|
|
7
|
+
let text = "";
|
|
8
|
+
const entities = new Array();
|
|
9
|
+
const queue = new Array();
|
|
10
|
+
const parser = new deps_js_1.Parser({
|
|
11
|
+
onopentag(name, attribs) {
|
|
12
|
+
switch (name) {
|
|
13
|
+
case "b":
|
|
14
|
+
case "strong":
|
|
15
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Bold, offset: text.length, length: 0 });
|
|
16
|
+
break;
|
|
17
|
+
case "em":
|
|
18
|
+
case "i":
|
|
19
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Italic, offset: text.length, length: 0 });
|
|
20
|
+
break;
|
|
21
|
+
case "code":
|
|
22
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Code, offset: text.length, length: 0 });
|
|
23
|
+
break;
|
|
24
|
+
case "pre": {
|
|
25
|
+
const language = attribs.language ?? "";
|
|
26
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Pre, offset: text.length, length: 0, language });
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case "a": {
|
|
30
|
+
const url = attribs.href;
|
|
31
|
+
if (!url) {
|
|
32
|
+
throw new Error("Missing attribute href");
|
|
33
|
+
}
|
|
34
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.TextURL, offset: text.length, length: 0, url });
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "ins":
|
|
38
|
+
case "u":
|
|
39
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Underline, offset: text.length, length: 0 });
|
|
40
|
+
break;
|
|
41
|
+
case "del":
|
|
42
|
+
case "strike":
|
|
43
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Strike, offset: text.length, length: 0 });
|
|
44
|
+
break;
|
|
45
|
+
case "span":
|
|
46
|
+
if (attribs.class != "tg-spoiler") {
|
|
47
|
+
throw new Error("The class attribute must be tg-spoiler");
|
|
48
|
+
}
|
|
49
|
+
// falls through
|
|
50
|
+
case "tg-spoiler":
|
|
51
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Spoiler, offset: text.length, length: 0 });
|
|
52
|
+
break;
|
|
53
|
+
case "tg-emoji":
|
|
54
|
+
if (!attribs["emoji-id"]) {
|
|
55
|
+
throw new Error("Missing attribute emoji-id");
|
|
56
|
+
}
|
|
57
|
+
queue.push({ type: _0_message_entity_js_1.MessageEntityType.Spoiler, offset: text.length, length: 0 });
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
ontext(data) {
|
|
61
|
+
text += data;
|
|
62
|
+
const lastItem = queue[queue.length - 1];
|
|
63
|
+
if (lastItem) {
|
|
64
|
+
lastItem.length += data.length;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
onclosetag() {
|
|
68
|
+
const lastItem = queue.pop();
|
|
69
|
+
if (lastItem) {
|
|
70
|
+
entities.push(lastItem);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
parser.write(html);
|
|
75
|
+
parser.end();
|
|
76
|
+
return [text, entities];
|
|
77
|
+
}
|
|
78
|
+
exports.parseHtml = parseHtml;
|