telegram-bot-api-nodejs 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +581 -0
- package/index.js +415 -0
- package/index.ts +1444 -0
- package/package.json +18 -0
- package/tsconfig.json +8 -0
package/index.js
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
const headers = {
|
|
2
|
+
"Content-Type": "application/json",
|
|
3
|
+
"Accept": "application/json",
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Methods
|
|
7
|
+
*/
|
|
8
|
+
export function setWebhook(token, body, signal) {
|
|
9
|
+
return fetch(`https://api.telegram.org/bot${token}/setWebhook`, {
|
|
10
|
+
method: "POST",
|
|
11
|
+
body: JSON.stringify(body),
|
|
12
|
+
headers,
|
|
13
|
+
signal
|
|
14
|
+
}).then(parseResponse);
|
|
15
|
+
}
|
|
16
|
+
export function deleteWebhook(token, signal) {
|
|
17
|
+
return fetch(`https://api.telegram.org/bot${token}/deleteWebhook`, {
|
|
18
|
+
method: "POST",
|
|
19
|
+
body: JSON.stringify({}),
|
|
20
|
+
headers,
|
|
21
|
+
signal
|
|
22
|
+
}).then(parseResponse);
|
|
23
|
+
}
|
|
24
|
+
/** @todo cehck if response is the same as in typings */
|
|
25
|
+
export function getWebhookInfo(token, signal) {
|
|
26
|
+
return fetch(`https://api.telegram.org/bot${token}/getWebhookInfo`, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
body: JSON.stringify({}),
|
|
29
|
+
headers,
|
|
30
|
+
signal
|
|
31
|
+
}).then(parseResponse);
|
|
32
|
+
}
|
|
33
|
+
export function getMe(token, signal) {
|
|
34
|
+
return fetch(`https://api.telegram.org/bot${token}/getMe`, {
|
|
35
|
+
method: "POST",
|
|
36
|
+
body: JSON.stringify({}),
|
|
37
|
+
headers,
|
|
38
|
+
signal
|
|
39
|
+
}).then(parseResponse);
|
|
40
|
+
}
|
|
41
|
+
export function sendMessage(token, payload, signal) {
|
|
42
|
+
return fetch(`https://api.telegram.org/bot${token}/sendMessage`, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
body: JSON.stringify(payload),
|
|
45
|
+
headers,
|
|
46
|
+
signal
|
|
47
|
+
}).then(parseResponse);
|
|
48
|
+
}
|
|
49
|
+
export function editMessageText(token, payload, signal) {
|
|
50
|
+
return fetch(`https://api.telegram.org/bot${token}/editMessageText`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
body: JSON.stringify(payload),
|
|
53
|
+
headers,
|
|
54
|
+
signal
|
|
55
|
+
}).then(parseResponse);
|
|
56
|
+
}
|
|
57
|
+
export function sendPhoto(token, payload, signal) {
|
|
58
|
+
return fetch(`https://api.telegram.org/bot${token}/sendPhoto`, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
body: JSON.stringify(payload),
|
|
61
|
+
headers,
|
|
62
|
+
signal
|
|
63
|
+
}).then(parseResponse);
|
|
64
|
+
}
|
|
65
|
+
export function sendAnimation(token, payload, signal) {
|
|
66
|
+
return fetch(`https://api.telegram.org/bot${token}/sendAnimation`, {
|
|
67
|
+
method: "POST",
|
|
68
|
+
body: JSON.stringify(payload),
|
|
69
|
+
headers,
|
|
70
|
+
signal
|
|
71
|
+
}).then(parseResponse);
|
|
72
|
+
}
|
|
73
|
+
export function sendDocument(token, payload, signal) {
|
|
74
|
+
return fetch(`https://api.telegram.org/bot${token}/sendDocument`, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
body: JSON.stringify(payload),
|
|
77
|
+
headers,
|
|
78
|
+
signal
|
|
79
|
+
}).then(parseResponse);
|
|
80
|
+
}
|
|
81
|
+
export function sendDocumentStream(token, payload, signal) {
|
|
82
|
+
const body = new FormData();
|
|
83
|
+
body.append("chat_id", String(payload.chat_id));
|
|
84
|
+
if (payload.caption) {
|
|
85
|
+
body.append("caption", payload.caption);
|
|
86
|
+
}
|
|
87
|
+
body.append("document", payload.document, payload.documentName);
|
|
88
|
+
if (payload.parse_mode) {
|
|
89
|
+
body.append("parse_mode", payload.parse_mode);
|
|
90
|
+
}
|
|
91
|
+
return fetch(`https://api.telegram.org/bot${token}/sendDocument`, {
|
|
92
|
+
method: "POST",
|
|
93
|
+
body: body,
|
|
94
|
+
signal
|
|
95
|
+
}).then(parseResponse);
|
|
96
|
+
}
|
|
97
|
+
export function getUserProfilePhotos(token, payload, signal) {
|
|
98
|
+
return fetch(`https://api.telegram.org/bot${token}/getUserProfilePhotos`, {
|
|
99
|
+
method: "POST",
|
|
100
|
+
body: JSON.stringify(payload),
|
|
101
|
+
headers,
|
|
102
|
+
signal
|
|
103
|
+
}).then(parseResponse);
|
|
104
|
+
}
|
|
105
|
+
export function getFile(token, file_id, signal) {
|
|
106
|
+
return fetch(`https://api.telegram.org/bot${token}/getFile`, {
|
|
107
|
+
method: "POST",
|
|
108
|
+
body: JSON.stringify({ file_id }),
|
|
109
|
+
headers,
|
|
110
|
+
signal
|
|
111
|
+
}).then(parseResponse);
|
|
112
|
+
}
|
|
113
|
+
export function answerCallbackQuery(token, payload, signal) {
|
|
114
|
+
return fetch(`https://api.telegram.org/bot${token}/answerCallbackQuery`, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
body: JSON.stringify(payload),
|
|
117
|
+
headers,
|
|
118
|
+
signal
|
|
119
|
+
}).then(parseResponse);
|
|
120
|
+
}
|
|
121
|
+
export function getChat(token, payload, signal) {
|
|
122
|
+
return fetch(`https://api.telegram.org/bot${token}/getChat`, {
|
|
123
|
+
method: "POST",
|
|
124
|
+
body: JSON.stringify(payload),
|
|
125
|
+
headers,
|
|
126
|
+
signal
|
|
127
|
+
}).then(parseResponse);
|
|
128
|
+
}
|
|
129
|
+
export function getChatMember(token, payload, signal) {
|
|
130
|
+
return fetch(`https://api.telegram.org/bot${token}/getChatMember`, {
|
|
131
|
+
method: "POST",
|
|
132
|
+
body: JSON.stringify(payload),
|
|
133
|
+
headers,
|
|
134
|
+
signal: signal
|
|
135
|
+
}).then(parseResponse);
|
|
136
|
+
}
|
|
137
|
+
export function setMyCommands(token, payload, signal) {
|
|
138
|
+
return fetch(`https://api.telegram.org/bot${token}/setMyCommands`, {
|
|
139
|
+
method: "POST",
|
|
140
|
+
body: JSON.stringify(payload),
|
|
141
|
+
headers,
|
|
142
|
+
signal
|
|
143
|
+
}).then(parseResponse);
|
|
144
|
+
}
|
|
145
|
+
export function deleteMyCommands(token, payload, signal) {
|
|
146
|
+
return fetch(`https://api.telegram.org/bot${token}/deleteMyCommands`, {
|
|
147
|
+
method: "POST",
|
|
148
|
+
body: JSON.stringify(payload),
|
|
149
|
+
headers,
|
|
150
|
+
signal
|
|
151
|
+
}).then(parseResponse);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Parsers
|
|
155
|
+
*/
|
|
156
|
+
export function parseUpdate(update) {
|
|
157
|
+
const update_id = Number(update.update_id);
|
|
158
|
+
return {
|
|
159
|
+
update_id,
|
|
160
|
+
message: parseMessage(update.message),
|
|
161
|
+
edited_message: parseMessage(update.edited_message),
|
|
162
|
+
callback_query: parseCallbackQuery(update.callback_query),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
export function parseMessage(m) {
|
|
166
|
+
if (!m) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
message_id: Number(m.message_id),
|
|
171
|
+
from: m.from ? parseUser(m.from) : void 0,
|
|
172
|
+
date: Number(m.date),
|
|
173
|
+
chat: parseChat(m.chat),
|
|
174
|
+
text: String(m.text ?? ""),
|
|
175
|
+
forward_from: m.forward_from ? parseUser(m.forward_from) : void 0,
|
|
176
|
+
forward_from_chat: m.forward_from_chat ? parseChat(m.forward_from_chat) : void 0,
|
|
177
|
+
forward_from_message_id: m.forward_from_message_id ? Number(m.forward_from_message_id) : void 0,
|
|
178
|
+
forward_signature: m.forward_signature ? String(m.forward_signature) : void 0,
|
|
179
|
+
forward_sender_name: m.forward_sender_name ? String(m.forward_sender_name) : void 0,
|
|
180
|
+
forward_date: m.forward_date ? Number(m.forward_date) : void 0,
|
|
181
|
+
// reply_to_message: m.reply_to_message ? parseMessage(m.reply_to_message) : void 0, // Message;
|
|
182
|
+
edit_date: m.edit_date ? Number(m.edit_date) : void 0,
|
|
183
|
+
media_group_id: m.media_group_id ? String(m.media_group_id) : void 0,
|
|
184
|
+
author_signature: m.author_signature ? String(m.author_signature) : void 0,
|
|
185
|
+
entities: m.entities ? parseEntities(m.entities) : void 0,
|
|
186
|
+
// caption_entities: m.caption_entities ? parseSometh(m.caption_entities) : void 0, // MessageEntity[];
|
|
187
|
+
audio: m.audio ? parseAudio(m.audio) : void 0,
|
|
188
|
+
document: m.document ? parseDocument(m.document) : void 0,
|
|
189
|
+
animation: m.animation ? parseAnimation(m.animation) : void 0,
|
|
190
|
+
// game?: Game;
|
|
191
|
+
photo: m.photo ? parsePhotoSizes(m.photo) : void 0,
|
|
192
|
+
sticker: m.sticker ? parseSticker(m.sticker) : void 0,
|
|
193
|
+
video: m.video ? parseVideo(m.video) : void 0,
|
|
194
|
+
voice: m.voice ? parseVoice(m.voice) : void 0,
|
|
195
|
+
video_note: m.video_note ? parseVideoNote(m.video_note) : void 0,
|
|
196
|
+
caption: m.caption ? String(m.caption) : void 0,
|
|
197
|
+
contact: m.contact ? parseContact(m.contact) : void 0,
|
|
198
|
+
location: m.location ? parseLocation(m.location) : void 0,
|
|
199
|
+
venue: m.venue ? parseVenue(m.venue) : void 0,
|
|
200
|
+
poll: m.poll ? parsePoll(m.poll) : void 0,
|
|
201
|
+
// new_chat_members?: User[];
|
|
202
|
+
// left_chat_member?: User;
|
|
203
|
+
// new_chat_title?: string;
|
|
204
|
+
// new_chat_photo?: PhotoSize[];
|
|
205
|
+
// delete_chat_photo?: boolean;
|
|
206
|
+
// group_chat_created?: boolean;
|
|
207
|
+
// supergroup_chat_created?: boolean;
|
|
208
|
+
// channel_chat_created?: boolean;
|
|
209
|
+
// migrate_to_chat_id?: number;
|
|
210
|
+
// migrate_from_chat_id?: number;
|
|
211
|
+
// pinned_message?: Message;
|
|
212
|
+
// invoice?: Invoice;
|
|
213
|
+
// successful_payment?: SuccessfulPayment;
|
|
214
|
+
// connected_website?: string;
|
|
215
|
+
// passport_data?: PassportData;
|
|
216
|
+
// reply_markup?: InlineKeyboardMarkup;
|
|
217
|
+
sender_chat: m.sender_chat ? parseChat(m.sender_chat) : void 0,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export function parseUser(u) {
|
|
221
|
+
return {
|
|
222
|
+
id: String(u.id),
|
|
223
|
+
is_bot: Boolean(u.is_bot),
|
|
224
|
+
first_name: String(u.first_name),
|
|
225
|
+
last_name: String(u.last_name ?? ""),
|
|
226
|
+
username: String(u.username ?? ""),
|
|
227
|
+
language_code: String(u.language_code ?? ""),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
export function parseChat(c) {
|
|
231
|
+
return {
|
|
232
|
+
id: Number(c.id),
|
|
233
|
+
type: c.type,
|
|
234
|
+
title: String(c.title ?? ""),
|
|
235
|
+
username: String(c.username ?? ""),
|
|
236
|
+
first_name: String(c.first_name ?? ""),
|
|
237
|
+
last_name: String(c.last_name ?? ""),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
export function parsePhotoSizes(p) {
|
|
241
|
+
if (!Array.isArray(p)) {
|
|
242
|
+
return void 0;
|
|
243
|
+
}
|
|
244
|
+
return p.map(parsePhotoSize);
|
|
245
|
+
}
|
|
246
|
+
export function parsePhotoSize(p) {
|
|
247
|
+
return {
|
|
248
|
+
file_id: String(p.file_id),
|
|
249
|
+
file_size: Number(p.file_size),
|
|
250
|
+
width: Number(p.width),
|
|
251
|
+
height: Number(p.height),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
export function parseSticker(v) {
|
|
255
|
+
return {
|
|
256
|
+
file_id: String(v.file_id),
|
|
257
|
+
width: Number(v.width),
|
|
258
|
+
height: Number(v.height),
|
|
259
|
+
thumb: v.thumb ? parsePhotoSize(v.thumb) : void 0,
|
|
260
|
+
emoji: String(v.emoji),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
export function parseVideo(v) {
|
|
264
|
+
return {
|
|
265
|
+
file_id: String(v.file_id),
|
|
266
|
+
width: Number(v.width),
|
|
267
|
+
height: Number(v.height),
|
|
268
|
+
duration: Number(v.duration),
|
|
269
|
+
thumb: v.thumb ? parsePhotoSize(v.thumb) : void 0,
|
|
270
|
+
mime_type: String(v.mime_type ?? ""),
|
|
271
|
+
file_name: String(v.file_name ?? ""),
|
|
272
|
+
file_size: Number(v.file_size ?? ""),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export function parseVoice(v) {
|
|
276
|
+
return {
|
|
277
|
+
file_id: String(v.file_id),
|
|
278
|
+
file_size: Number(v.file_size),
|
|
279
|
+
duration: Number(v.duration),
|
|
280
|
+
mime_type: String(v.mime_type)
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
export function parseVideoNote(v) {
|
|
284
|
+
return {
|
|
285
|
+
file_id: String(v.file_id),
|
|
286
|
+
length: Number(v.length),
|
|
287
|
+
duration: Number(v.duration),
|
|
288
|
+
thumb: v.thumb ? parsePhotoSize(v.thumb) : void 0,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
export function parseEntities(v) {
|
|
292
|
+
if (!Array.isArray(v)) {
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
return v.map(function (entity) {
|
|
296
|
+
return {
|
|
297
|
+
type: entity.type,
|
|
298
|
+
offset: entity.offset,
|
|
299
|
+
length: entity.length,
|
|
300
|
+
url: String(entity.url ?? ""),
|
|
301
|
+
user: entity.user ? parseUser(entity.user) : void 0,
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
export function parseAudio(v) {
|
|
306
|
+
return {
|
|
307
|
+
file_id: String(v.file_id),
|
|
308
|
+
duration: Number(v.duration),
|
|
309
|
+
title: String(v.title ?? ""),
|
|
310
|
+
performer: String(v.performer ?? ""),
|
|
311
|
+
file_name: String(v.file_name ?? ""),
|
|
312
|
+
mime_type: String(v.mime_type ?? ""),
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
export function parseDocument(v) {
|
|
316
|
+
return {
|
|
317
|
+
file_id: String(v.file_id),
|
|
318
|
+
file_name: String(v.file_name || ""),
|
|
319
|
+
mime_type: String(v.mime_type || ""),
|
|
320
|
+
file_size: Number(v.file_size || 0),
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
export function parseAnimation(v) {
|
|
324
|
+
return {
|
|
325
|
+
file_id: String(v.file_id),
|
|
326
|
+
width: Number(v.width),
|
|
327
|
+
height: Number(v.height),
|
|
328
|
+
duration: Number(v.duration),
|
|
329
|
+
file_name: String(v.file_name),
|
|
330
|
+
mime_type: String(v.mime_type || ""),
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
export function parseContact(v) {
|
|
334
|
+
return {
|
|
335
|
+
phone_number: String(v.phone_number),
|
|
336
|
+
first_name: String(v.first_name),
|
|
337
|
+
last_name: String(v.last_name ?? ""),
|
|
338
|
+
user_id: Number(v.user_id ?? ""),
|
|
339
|
+
vcard: String(v.vcard ?? ""),
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
export function parseLocation(v) {
|
|
343
|
+
return {
|
|
344
|
+
longitude: Number(v.longitude),
|
|
345
|
+
latitude: Number(v.latitude),
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
export function parseVenue(v) {
|
|
349
|
+
return {
|
|
350
|
+
location: parseLocation(v.location),
|
|
351
|
+
title: String(v.title),
|
|
352
|
+
address: String(v.address),
|
|
353
|
+
foursquare_id: String(v.foursquare_id ?? ""),
|
|
354
|
+
foursquare_type: String(v.foursquare_type ?? ""),
|
|
355
|
+
google_place_id: String(v.google_place_id ?? ""),
|
|
356
|
+
google_place_type: String(v.google_place_type ?? ""),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
export function parsePoll(v) {
|
|
360
|
+
return {
|
|
361
|
+
id: String(v.id),
|
|
362
|
+
question: String(v.question),
|
|
363
|
+
options: parsePollOptions(v.options),
|
|
364
|
+
is_closed: Boolean(v.is_closed),
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
export function parsePollOptions(v) {
|
|
368
|
+
return Array.isArray(v) ? v.map(parsePollOption) : [];
|
|
369
|
+
}
|
|
370
|
+
export function parsePollOption(v) {
|
|
371
|
+
return {
|
|
372
|
+
text: String(v.text),
|
|
373
|
+
voter_count: Number(v.voter_count),
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* @see https://core.telegram.org/bots/api#callbackquery
|
|
378
|
+
*/
|
|
379
|
+
export function parseCallbackQuery(v) {
|
|
380
|
+
if (!v) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
id: String(v.id),
|
|
385
|
+
from: parseUser(v.from),
|
|
386
|
+
data: String(v.data ?? ""),
|
|
387
|
+
message: parseMessage(v.message),
|
|
388
|
+
chat_instance: String(v.chat_instance ?? ""),
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
function parseResponse(response) {
|
|
392
|
+
return response.text().then(function (text) {
|
|
393
|
+
let data;
|
|
394
|
+
try {
|
|
395
|
+
data = JSON.parse(text);
|
|
396
|
+
}
|
|
397
|
+
catch (err) {
|
|
398
|
+
throw new TelegramError(`Invalid response: ${text}`, response.status);
|
|
399
|
+
}
|
|
400
|
+
const ok = Boolean(data.ok);
|
|
401
|
+
if (ok) {
|
|
402
|
+
return data.result || {};
|
|
403
|
+
}
|
|
404
|
+
const error_code = Number(data.error_code ?? 0);
|
|
405
|
+
const description = String(data.description ?? "");
|
|
406
|
+
throw new TelegramError(description, response.status);
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
export class TelegramError extends Error {
|
|
410
|
+
status;
|
|
411
|
+
constructor(message, status) {
|
|
412
|
+
super(message);
|
|
413
|
+
this.status = status;
|
|
414
|
+
}
|
|
415
|
+
}
|