@skroz/telegram-bot 1.0.4 → 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 +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +78 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
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>;
|
|
9
|
-
sendPhoto(input: TG_SendPhotoInput, message?: TG_Message): Promise<TG_SendMessageResponse>;
|
|
13
|
+
sendPhoto(input: TG_SendPhotoInput, message?: TG_Message, expires?: ExpiresInput): Promise<TG_SendMessageResponse>;
|
|
10
14
|
deleteWebhook(): Promise<void>;
|
|
11
15
|
}
|
|
12
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,sBAAsB,EACtB,iBAAiB,EACjB,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
|
@@ -10,12 +10,48 @@ const telegram_api_1 = __importDefault(require("@skroz/telegram-api"));
|
|
|
10
10
|
const processedCallbacks = new Set();
|
|
11
11
|
/* разделитель для параметров колбэка */
|
|
12
12
|
const callbackDivider = '^:^:^';
|
|
13
|
+
/* по умолчанию истекающее сообщение */
|
|
14
|
+
const expiresSecondsDefault = 5 * 60; // 5 минут
|
|
13
15
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
14
16
|
const createCallbackData = (telegramId, data) => [`${Date.now()}_${telegramId}`, ...data].join(callbackDivider).slice(0, 64);
|
|
15
17
|
exports.createCallbackData = createCallbackData;
|
|
16
18
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
17
19
|
const getCallbackData = (data) => data.split(callbackDivider);
|
|
18
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);
|
|
19
55
|
class TelegramBot {
|
|
20
56
|
constructor(botToken) {
|
|
21
57
|
this.botToken = botToken;
|
|
@@ -52,7 +88,7 @@ class TelegramBot {
|
|
|
52
88
|
await handleMessage(message);
|
|
53
89
|
}
|
|
54
90
|
}
|
|
55
|
-
async sendPhoto(input, message) {
|
|
91
|
+
async sendPhoto(input, message, expires) {
|
|
56
92
|
const { chat_id, reply_markup, caption, photo } = input;
|
|
57
93
|
let sendResult;
|
|
58
94
|
const sendPhotoFunction = () => telegram_api_1.default.sendPhoto({
|
|
@@ -83,6 +119,17 @@ class TelegramBot {
|
|
|
83
119
|
else {
|
|
84
120
|
sendResult = await sendPhotoFunction();
|
|
85
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
|
+
}
|
|
86
133
|
return sendResult;
|
|
87
134
|
}
|
|
88
135
|
async deleteWebhook() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA8C;AAS9C,yDAAyD;AAEzD,kEAAkE;AAClE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC,wCAAwC;AACxC,MAAM,eAAe,GAAG,OAAO,CAAC;
|
|
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
|
@@ -13,6 +13,8 @@ import {
|
|
|
13
13
|
const processedCallbacks = new Set();
|
|
14
14
|
/* разделитель для параметров колбэка */
|
|
15
15
|
const callbackDivider = '^:^:^';
|
|
16
|
+
/* по умолчанию истекающее сообщение */
|
|
17
|
+
const expiresSecondsDefault = 5 * 60; // 5 минут
|
|
16
18
|
|
|
17
19
|
/* не больше 64 символов по документации, внутри защита от повторных кликов */
|
|
18
20
|
export const createCallbackData = (
|
|
@@ -25,6 +27,67 @@ export const createCallbackData = (
|
|
|
25
27
|
export const getCallbackData = (data: string): string[] =>
|
|
26
28
|
data.split(callbackDivider);
|
|
27
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
|
+
|
|
28
91
|
class TelegramBot {
|
|
29
92
|
constructor(private readonly botToken: string) {}
|
|
30
93
|
|
|
@@ -76,7 +139,8 @@ class TelegramBot {
|
|
|
76
139
|
|
|
77
140
|
async sendPhoto(
|
|
78
141
|
input: TG_SendPhotoInput,
|
|
79
|
-
message?: TG_Message
|
|
142
|
+
message?: TG_Message,
|
|
143
|
+
expires?: ExpiresInput
|
|
80
144
|
): Promise<TG_SendMessageResponse> {
|
|
81
145
|
const { chat_id, reply_markup, caption, photo } = input;
|
|
82
146
|
|
|
@@ -117,6 +181,19 @@ class TelegramBot {
|
|
|
117
181
|
sendResult = await sendPhotoFunction();
|
|
118
182
|
}
|
|
119
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
|
+
|
|
120
197
|
return sendResult;
|
|
121
198
|
}
|
|
122
199
|
|