@skroz/telegram-bot 1.0.3 → 1.0.5
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/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +127 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { TG_CallbackQuery, TG_Message, TG_Update } from '@skroz/telegram-api/dist/TelegramTypes';
|
|
1
|
+
import { TG_CallbackQuery, TG_Message, TG_SendMessageResponse, TG_SendPhotoInput, TG_Update } from '@skroz/telegram-api/dist/TelegramTypes';
|
|
2
2
|
export declare const createCallbackData: (telegramId: number | string, data: string[]) => string;
|
|
3
3
|
export declare const getCallbackData: (data: string) => string[];
|
|
4
|
+
type ExpiresInput = {
|
|
5
|
+
seconds?: number;
|
|
6
|
+
onExpire: () => void;
|
|
7
|
+
};
|
|
4
8
|
declare class TelegramBot {
|
|
5
9
|
private readonly botToken;
|
|
6
10
|
constructor(botToken: string);
|
|
7
11
|
setWebhook(webhookUrl: string): Promise<import("@skroz/telegram-api/dist/ResultAndDescription").default>;
|
|
8
12
|
handleUpdate(update: TG_Update, handleCallback: (callbackQuery: TG_CallbackQuery, callbackDataParams: string[]) => Promise<void>, handleMessage: (message: TG_Message) => void): Promise<void>;
|
|
13
|
+
sendPhoto(input: TG_SendPhotoInput, message?: TG_Message, expires?: ExpiresInput): Promise<TG_SendMessageResponse>;
|
|
9
14
|
deleteWebhook(): Promise<void>;
|
|
10
15
|
}
|
|
11
16
|
export default TelegramBot;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,SAAS,EACV,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,sBAAsB,EACtB,iBAAiB,EACjB,SAAS,EACV,MAAM,wCAAwC,CAAC;AAYhD,eAAO,MAAM,kBAAkB,eACjB,MAAM,GAAG,MAAM,QACrB,MAAM,EAAE,KACb,MAC0E,CAAC;AAG9E,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,MAAM,EACxB,CAAC;AA0D9B,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,cAAM,WAAW;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,UAAU,CAAC,UAAU,EAAE,MAAM;IAI7B,YAAY,CAChB,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,CACd,aAAa,EAAE,gBAAgB,EAC/B,kBAAkB,EAAE,MAAM,EAAE,KACzB,OAAO,CAAC,IAAI,CAAC,EAClB,aAAa,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,GAC3C,OAAO,CAAC,IAAI,CAAC;IAmCV,SAAS,CACb,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,sBAAsB,CAAC;IAwD5B,aAAa;CAGpB;AAED,eAAe,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,16 +5,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getCallbackData = exports.createCallbackData = void 0;
|
|
7
7
|
const telegram_api_1 = __importDefault(require("@skroz/telegram-api"));
|
|
8
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
8
9
|
/* хранит уникальные колбэки, чтобы исключить повторное нажатие */
|
|
9
10
|
const processedCallbacks = new Set();
|
|
10
11
|
/* разделитель для параметров колбэка */
|
|
11
12
|
const callbackDivider = '^:^:^';
|
|
13
|
+
/* по умолчанию истекающее сообщение */
|
|
14
|
+
const expiresSecondsDefault = 5 * 60; // 5 минут
|
|
12
15
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
13
16
|
const createCallbackData = (telegramId, data) => [`${Date.now()}_${telegramId}`, ...data].join(callbackDivider).slice(0, 64);
|
|
14
17
|
exports.createCallbackData = createCallbackData;
|
|
15
18
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
16
19
|
const getCallbackData = (data) => data.split(callbackDivider);
|
|
17
20
|
exports.getCallbackData = getCallbackData;
|
|
21
|
+
const expiredMessagesList = [];
|
|
22
|
+
const pushMessageToExpireList = (
|
|
23
|
+
// from: TG_User,
|
|
24
|
+
message, expires) => {
|
|
25
|
+
const expiresAt = Date.now() + (expires.seconds || expiresSecondsDefault) * 1000;
|
|
26
|
+
expiredMessagesList.push({
|
|
27
|
+
message,
|
|
28
|
+
// from,
|
|
29
|
+
expiresAt,
|
|
30
|
+
onExpire: expires.onExpire,
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
// забирает и сразу удаляет
|
|
34
|
+
const shiftExpiredMessages = () => {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
const expired = expiredMessagesList.filter((msg) => msg.expiresAt <= now);
|
|
37
|
+
expiredMessagesList.splice(0, expired.length);
|
|
38
|
+
return expired;
|
|
39
|
+
};
|
|
40
|
+
// убираем из списка удаленные сообщения
|
|
41
|
+
const deleteMessageFromExpiringList = (message) => {
|
|
42
|
+
const index = expiredMessagesList.findIndex((msg) => msg.message.message_id === message.message_id);
|
|
43
|
+
if (index !== -1) {
|
|
44
|
+
expiredMessagesList.splice(index, 1);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
setInterval(async () => {
|
|
48
|
+
const expired = shiftExpiredMessages();
|
|
49
|
+
if (expired.length > 0) {
|
|
50
|
+
await Promise.all(expired.map(async (ex) => {
|
|
51
|
+
await ex.onExpire();
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
}, 15000);
|
|
18
55
|
class TelegramBot {
|
|
19
56
|
constructor(botToken) {
|
|
20
57
|
this.botToken = botToken;
|
|
@@ -51,6 +88,50 @@ class TelegramBot {
|
|
|
51
88
|
await handleMessage(message);
|
|
52
89
|
}
|
|
53
90
|
}
|
|
91
|
+
async sendPhoto(input, message, expires) {
|
|
92
|
+
const { chat_id, reply_markup, caption, photo } = input;
|
|
93
|
+
let sendResult;
|
|
94
|
+
const sendPhotoFunction = () => telegram_api_1.default.sendPhoto({
|
|
95
|
+
chat_id,
|
|
96
|
+
caption,
|
|
97
|
+
photo,
|
|
98
|
+
parse_mode: 'HTML',
|
|
99
|
+
reply_markup,
|
|
100
|
+
}, this.botToken);
|
|
101
|
+
if (message) {
|
|
102
|
+
try {
|
|
103
|
+
sendResult = await telegram_api_1.default.editMessageMedia({
|
|
104
|
+
media: {
|
|
105
|
+
type: 'photo',
|
|
106
|
+
media: photo,
|
|
107
|
+
caption,
|
|
108
|
+
parse_mode: 'HTML',
|
|
109
|
+
},
|
|
110
|
+
message_id: message.message_id,
|
|
111
|
+
reply_markup,
|
|
112
|
+
chat_id,
|
|
113
|
+
}, this.botToken);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
sendResult = await sendPhotoFunction();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
sendResult = await sendPhotoFunction();
|
|
121
|
+
}
|
|
122
|
+
if (sendResult.ok && sendResult.result) {
|
|
123
|
+
if (expires) {
|
|
124
|
+
pushMessageToExpireList(sendResult.result,
|
|
125
|
+
// sendResult.result,
|
|
126
|
+
// sendResult.result.from,
|
|
127
|
+
expires);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
deleteMessageFromExpiringList(sendResult.result);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return sendResult;
|
|
134
|
+
}
|
|
54
135
|
async deleteWebhook() {
|
|
55
136
|
return telegram_api_1.default.deleteWebhook(this.botToken);
|
|
56
137
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skroz/telegram-bot",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": "git@gitlab.com:skroz/libs/utils.git",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,5 +21,5 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@skroz/telegram-api": "^1.0.10"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "027ab22a48e487c2c51bb86a0aacabc20109b7e0"
|
|
25
25
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,13 +2,19 @@ import TelegramApi from '@skroz/telegram-api';
|
|
|
2
2
|
import {
|
|
3
3
|
TG_CallbackQuery,
|
|
4
4
|
TG_Message,
|
|
5
|
+
TG_SendMessageResponse,
|
|
6
|
+
TG_SendPhotoInput,
|
|
5
7
|
TG_Update,
|
|
6
8
|
} from '@skroz/telegram-api/dist/TelegramTypes';
|
|
7
9
|
|
|
10
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
11
|
+
|
|
8
12
|
/* хранит уникальные колбэки, чтобы исключить повторное нажатие */
|
|
9
13
|
const processedCallbacks = new Set();
|
|
10
14
|
/* разделитель для параметров колбэка */
|
|
11
15
|
const callbackDivider = '^:^:^';
|
|
16
|
+
/* по умолчанию истекающее сообщение */
|
|
17
|
+
const expiresSecondsDefault = 5 * 60; // 5 минут
|
|
12
18
|
|
|
13
19
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
14
20
|
export const createCallbackData = (
|
|
@@ -21,6 +27,67 @@ export const createCallbackData = (
|
|
|
21
27
|
export const getCallbackData = (data: string): string[] =>
|
|
22
28
|
data.split(callbackDivider);
|
|
23
29
|
|
|
30
|
+
const expiredMessagesList: {
|
|
31
|
+
// from: TG_User;
|
|
32
|
+
message: TG_Message;
|
|
33
|
+
expiresAt: number;
|
|
34
|
+
onExpire: () => void;
|
|
35
|
+
}[] = [];
|
|
36
|
+
|
|
37
|
+
const pushMessageToExpireList = (
|
|
38
|
+
// from: TG_User,
|
|
39
|
+
message: TG_Message,
|
|
40
|
+
expires: ExpiresInput
|
|
41
|
+
) => {
|
|
42
|
+
const expiresAt =
|
|
43
|
+
Date.now() + (expires.seconds || expiresSecondsDefault) * 1000;
|
|
44
|
+
|
|
45
|
+
expiredMessagesList.push({
|
|
46
|
+
message,
|
|
47
|
+
// from,
|
|
48
|
+
expiresAt,
|
|
49
|
+
onExpire: expires.onExpire,
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// забирает и сразу удаляет
|
|
54
|
+
const shiftExpiredMessages = (): {
|
|
55
|
+
message: TG_Message;
|
|
56
|
+
// from: TG_User;
|
|
57
|
+
onExpire: () => void;
|
|
58
|
+
}[] => {
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const expired = expiredMessagesList.filter((msg) => msg.expiresAt <= now);
|
|
61
|
+
expiredMessagesList.splice(0, expired.length);
|
|
62
|
+
return expired;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// убираем из списка удаленные сообщения
|
|
66
|
+
const deleteMessageFromExpiringList = (message: TG_Message) => {
|
|
67
|
+
const index = expiredMessagesList.findIndex(
|
|
68
|
+
(msg) => msg.message.message_id === message.message_id
|
|
69
|
+
);
|
|
70
|
+
if (index !== -1) {
|
|
71
|
+
expiredMessagesList.splice(index, 1);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
setInterval(async () => {
|
|
76
|
+
const expired = shiftExpiredMessages();
|
|
77
|
+
if (expired.length > 0) {
|
|
78
|
+
await Promise.all(
|
|
79
|
+
expired.map(async (ex) => {
|
|
80
|
+
await ex.onExpire();
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}, 15000);
|
|
85
|
+
|
|
86
|
+
type ExpiresInput = {
|
|
87
|
+
seconds?: number;
|
|
88
|
+
onExpire: () => void;
|
|
89
|
+
};
|
|
90
|
+
|
|
24
91
|
class TelegramBot {
|
|
25
92
|
constructor(private readonly botToken: string) {}
|
|
26
93
|
|
|
@@ -70,6 +137,66 @@ class TelegramBot {
|
|
|
70
137
|
}
|
|
71
138
|
}
|
|
72
139
|
|
|
140
|
+
async sendPhoto(
|
|
141
|
+
input: TG_SendPhotoInput,
|
|
142
|
+
message?: TG_Message,
|
|
143
|
+
expires?: ExpiresInput
|
|
144
|
+
): Promise<TG_SendMessageResponse> {
|
|
145
|
+
const { chat_id, reply_markup, caption, photo } = input;
|
|
146
|
+
|
|
147
|
+
let sendResult: TG_SendMessageResponse;
|
|
148
|
+
|
|
149
|
+
const sendPhotoFunction = () =>
|
|
150
|
+
TelegramApi.sendPhoto(
|
|
151
|
+
{
|
|
152
|
+
chat_id,
|
|
153
|
+
caption,
|
|
154
|
+
photo,
|
|
155
|
+
parse_mode: 'HTML',
|
|
156
|
+
reply_markup,
|
|
157
|
+
},
|
|
158
|
+
this.botToken
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
if (message) {
|
|
162
|
+
try {
|
|
163
|
+
sendResult = await TelegramApi.editMessageMedia(
|
|
164
|
+
{
|
|
165
|
+
media: {
|
|
166
|
+
type: 'photo',
|
|
167
|
+
media: photo as string,
|
|
168
|
+
caption,
|
|
169
|
+
parse_mode: 'HTML',
|
|
170
|
+
},
|
|
171
|
+
message_id: message.message_id,
|
|
172
|
+
reply_markup,
|
|
173
|
+
chat_id,
|
|
174
|
+
},
|
|
175
|
+
this.botToken
|
|
176
|
+
);
|
|
177
|
+
} catch (e) {
|
|
178
|
+
sendResult = await sendPhotoFunction();
|
|
179
|
+
}
|
|
180
|
+
} else {
|
|
181
|
+
sendResult = await sendPhotoFunction();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (sendResult.ok && sendResult.result) {
|
|
185
|
+
if (expires) {
|
|
186
|
+
pushMessageToExpireList(
|
|
187
|
+
sendResult.result,
|
|
188
|
+
// sendResult.result,
|
|
189
|
+
// sendResult.result.from,
|
|
190
|
+
expires
|
|
191
|
+
);
|
|
192
|
+
} else {
|
|
193
|
+
deleteMessageFromExpiringList(sendResult.result);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return sendResult;
|
|
198
|
+
}
|
|
199
|
+
|
|
73
200
|
async deleteWebhook() {
|
|
74
201
|
return TelegramApi.deleteWebhook(this.botToken);
|
|
75
202
|
}
|