@aracna/telegram-bot 1.9.3

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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/builders/button.builder.js +31 -0
  4. package/childs/add.js +10 -0
  5. package/childs/answer.js +19 -0
  6. package/childs/ban.js +10 -0
  7. package/childs/create.js +17 -0
  8. package/childs/delete.js +19 -0
  9. package/childs/download.js +32 -0
  10. package/childs/edit.js +22 -0
  11. package/childs/export.js +10 -0
  12. package/childs/forward.js +15 -0
  13. package/childs/get.js +37 -0
  14. package/childs/leave.js +10 -0
  15. package/childs/pin.js +10 -0
  16. package/childs/polling.js +34 -0
  17. package/childs/privates/send.private.js +19 -0
  18. package/childs/promote.js +10 -0
  19. package/childs/restrict.js +15 -0
  20. package/childs/send.js +130 -0
  21. package/childs/set.js +44 -0
  22. package/childs/stop.js +13 -0
  23. package/childs/unban.js +10 -0
  24. package/childs/unpin.js +10 -0
  25. package/childs/upload.js +10 -0
  26. package/childs/webhook.js +22 -0
  27. package/declarations/builders/button.builder.d.ts +11 -0
  28. package/declarations/childs/add.d.ts +6 -0
  29. package/declarations/childs/answer.d.ts +9 -0
  30. package/declarations/childs/ban.d.ts +6 -0
  31. package/declarations/childs/create.d.ts +6 -0
  32. package/declarations/childs/delete.d.ts +8 -0
  33. package/declarations/childs/download.d.ts +9 -0
  34. package/declarations/childs/edit.d.ts +10 -0
  35. package/declarations/childs/export.d.ts +5 -0
  36. package/declarations/childs/forward.d.ts +6 -0
  37. package/declarations/childs/get.d.ts +15 -0
  38. package/declarations/childs/leave.d.ts +5 -0
  39. package/declarations/childs/pin.d.ts +6 -0
  40. package/declarations/childs/polling.d.ts +9 -0
  41. package/declarations/childs/privates/send.private.d.ts +7 -0
  42. package/declarations/childs/promote.d.ts +6 -0
  43. package/declarations/childs/restrict.d.ts +6 -0
  44. package/declarations/childs/send.d.ts +31 -0
  45. package/declarations/childs/set.d.ts +17 -0
  46. package/declarations/childs/stop.d.ts +7 -0
  47. package/declarations/childs/unban.d.ts +5 -0
  48. package/declarations/childs/unpin.d.ts +5 -0
  49. package/declarations/childs/upload.d.ts +7 -0
  50. package/declarations/childs/webhook.d.ts +8 -0
  51. package/declarations/definitions/constants.d.ts +2 -0
  52. package/declarations/definitions/enums.d.ts +22 -0
  53. package/declarations/definitions/interfaces.d.ts +97 -0
  54. package/declarations/definitions/types.d.ts +4 -0
  55. package/declarations/index.d.ts +12 -0
  56. package/declarations/loggers/module.logger.d.ts +2 -0
  57. package/declarations/modules/api.d.ts +5 -0
  58. package/declarations/modules/builder.d.ts +4 -0
  59. package/declarations/modules/child.d.ts +5 -0
  60. package/declarations/modules/configuration.d.ts +8 -0
  61. package/declarations/modules/dummy.d.ts +9 -0
  62. package/declarations/modules/telegram.d.ts +87 -0
  63. package/declarations/utils/callback.query.utils.d.ts +5 -0
  64. package/declarations/utils/command.utils.d.ts +8 -0
  65. package/declarations/utils/context.utils.d.ts +13 -0
  66. package/declarations/utils/html.utils.d.ts +5 -0
  67. package/declarations/utils/inline.keyboard.utils.d.ts +4 -0
  68. package/declarations/utils/reply.to.message.utils.d.ts +6 -0
  69. package/declarations/utils/start.utils.d.ts +7 -0
  70. package/definitions/constants.js +11 -0
  71. package/definitions/enums.js +27 -0
  72. package/definitions/interfaces.js +3 -0
  73. package/definitions/types.js +2 -0
  74. package/index.d.ts +498 -0
  75. package/index.js +24 -0
  76. package/loggers/module.logger.js +6 -0
  77. package/modules/api.js +26 -0
  78. package/modules/builder.js +8 -0
  79. package/modules/child.js +10 -0
  80. package/modules/configuration.js +10 -0
  81. package/modules/dummy.js +56 -0
  82. package/modules/telegram.js +353 -0
  83. package/package.json +28 -0
  84. package/utils/callback.query.utils.js +26 -0
  85. package/utils/command.utils.js +29 -0
  86. package/utils/context.utils.js +43 -0
  87. package/utils/html.utils.js +20 -0
  88. package/utils/inline.keyboard.utils.js +26 -0
  89. package/utils/reply.to.message.utils.js +27 -0
  90. package/utils/start.utils.js +32 -0
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Telegram = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ const add_1 = require("../childs/add");
6
+ const answer_1 = require("../childs/answer");
7
+ const ban_1 = require("../childs/ban");
8
+ const create_1 = require("../childs/create");
9
+ const delete_1 = require("../childs/delete");
10
+ const download_1 = require("../childs/download");
11
+ const edit_1 = require("../childs/edit");
12
+ const export_1 = require("../childs/export");
13
+ const forward_1 = require("../childs/forward");
14
+ const get_1 = require("../childs/get");
15
+ const leave_1 = require("../childs/leave");
16
+ const pin_1 = require("../childs/pin");
17
+ const polling_1 = require("../childs/polling");
18
+ const promote_1 = require("../childs/promote");
19
+ const restrict_1 = require("../childs/restrict");
20
+ const send_1 = require("../childs/send");
21
+ const set_1 = require("../childs/set");
22
+ const stop_1 = require("../childs/stop");
23
+ const unban_1 = require("../childs/unban");
24
+ const unpin_1 = require("../childs/unpin");
25
+ const upload_1 = require("../childs/upload");
26
+ const webhook_1 = require("../childs/webhook");
27
+ const enums_1 = require("../definitions/enums");
28
+ const module_logger_1 = require("../loggers/module.logger");
29
+ const callback_query_utils_1 = require("../utils/callback.query.utils");
30
+ const command_utils_1 = require("../utils/command.utils");
31
+ const reply_to_message_utils_1 = require("../utils/reply.to.message.utils");
32
+ const start_utils_1 = require("../utils/start.utils");
33
+ const api_1 = require("./api");
34
+ const builder_1 = require("./builder");
35
+ const dummy_1 = require("./dummy");
36
+ class Telegram {
37
+ /** INTERNAL */
38
+ api;
39
+ handlers;
40
+ hostname;
41
+ id;
42
+ name;
43
+ port;
44
+ token;
45
+ username;
46
+ /** BUILDERS */
47
+ builder;
48
+ /** CHILDS */
49
+ add;
50
+ answer;
51
+ create;
52
+ delete;
53
+ download;
54
+ edit;
55
+ export;
56
+ forward;
57
+ get;
58
+ ban;
59
+ leave;
60
+ pin;
61
+ polling;
62
+ promote;
63
+ restrict;
64
+ send;
65
+ set;
66
+ stop;
67
+ unban;
68
+ unpin;
69
+ upload;
70
+ webhook;
71
+ constructor(token, hostname = '', port = (0, core_1.parseNumber)(process.env.PORT)) {
72
+ this.api = new api_1.API('https://api.telegram.org/bot' + token + '/');
73
+ this.handlers = [];
74
+ this.hostname = hostname;
75
+ this.name = { first: '', last: '' };
76
+ this.id = 0;
77
+ this.port = port;
78
+ this.token = token;
79
+ this.username = '';
80
+ this.builder = new builder_1.Builder();
81
+ this.add = new add_1.Add(this);
82
+ this.answer = new answer_1.Answer(this);
83
+ this.create = new create_1.Create(this);
84
+ this.delete = new delete_1.Delete(this);
85
+ this.download = new download_1.Download(this);
86
+ this.edit = new edit_1.Edit(this);
87
+ this.export = new export_1.Export(this);
88
+ this.forward = new forward_1.Forward(this);
89
+ this.get = new get_1.Get(this);
90
+ this.ban = new ban_1.Ban(this);
91
+ this.leave = new leave_1.Leave(this);
92
+ this.pin = new pin_1.Pin(this);
93
+ this.polling = new polling_1.Polling(this);
94
+ this.promote = new promote_1.Promote(this);
95
+ this.restrict = new restrict_1.Restrict(this);
96
+ this.send = new send_1.Send(this);
97
+ this.set = new set_1.Set(this);
98
+ this.stop = new stop_1.Stop(this);
99
+ this.unban = new unban_1.Unban(this);
100
+ this.unpin = new unpin_1.Unpin(this);
101
+ this.upload = new upload_1.Upload(this);
102
+ this.webhook = new webhook_1.Webhook(this);
103
+ this.get.me().then((v) => {
104
+ if (v instanceof Error)
105
+ return;
106
+ this.id = v.id;
107
+ this.name.first = v.first_name;
108
+ this.name.last = v.last_name || '';
109
+ this.username = v.username || '';
110
+ });
111
+ }
112
+ on(type, middleware, key, description, options) {
113
+ let handler, potential;
114
+ handler = dummy_1.Dummy.handler;
115
+ handler.description = description;
116
+ handler.id = core_1.ID.generate({ blacklist: this.handlerIDs });
117
+ handler.key = key;
118
+ handler.middleware = middleware;
119
+ handler.type = type;
120
+ handler.options = (0, core_1.mergeObjects)(handler.options, options || {});
121
+ potential = this.findMatchingHandler(handler.type, handler.key);
122
+ potential.id ? (potential.middleware = middleware) : this.handlers.push(handler);
123
+ module_logger_1.ModuleLogger.debug('Telegram', 'register', `The handler has been registered.`, handler);
124
+ }
125
+ handle(update) {
126
+ let handler;
127
+ switch (true) {
128
+ case (0, core_1.hasObjectProperty)(update, 'callback_query.data'):
129
+ handler = this.handleCallbackQuery(update.callback_query);
130
+ break;
131
+ case (0, core_1.hasObjectProperty)(update, 'channel_post'):
132
+ handler = this.handleChannelPost(update.channel_post);
133
+ break;
134
+ case (0, core_1.hasObjectProperty)(update, 'chat_join_request'):
135
+ handler = this.handleChatJoinRequest(update.chat_join_request);
136
+ break;
137
+ case (0, core_1.hasObjectProperty)(update, 'chat_member'):
138
+ handler = this.handleChatMember(update.chat_member);
139
+ break;
140
+ case (0, core_1.hasObjectProperty)(update, 'chosen_inline_result'):
141
+ handler = this.handleChosenInlineResult(update.chosen_inline_result);
142
+ break;
143
+ case (0, core_1.hasObjectProperty)(update, 'edited_channel_post'):
144
+ handler = this.handleEditedChannelPost(update.edited_channel_post);
145
+ break;
146
+ case (0, core_1.hasObjectProperty)(update, 'edited_message'):
147
+ handler = this.handleEditedMessage(update.edited_message);
148
+ break;
149
+ case (0, core_1.hasObjectProperty)(update, 'inline_query'):
150
+ handler = this.handleInlineQuery(update.inline_query);
151
+ break;
152
+ case (0, core_1.getObjectProperty)(update, 'message.text', '').includes('/start') &&
153
+ (0, core_1.getObjectProperty)(update, 'message.text', '').replace('/start', '').trim().length > 0:
154
+ handler = this.handleStart(update.message);
155
+ break;
156
+ case (0, core_1.hasObjectProperty)(update, 'message') && (0, core_1.hasObjectProperty)(update, 'message.reply_to_message.text'):
157
+ handler = this.handleReplyToMessage(update.message);
158
+ break;
159
+ case (0, core_1.hasObjectProperty)(update, 'message.text'):
160
+ handler = this.handleMessage(update.message);
161
+ break;
162
+ case (0, core_1.hasObjectProperty)(update, 'message.document') && (0, core_1.hasObjectProperty)(update, 'message.caption'):
163
+ handler = this.handleDocument(update.message);
164
+ break;
165
+ case (0, core_1.hasObjectProperty)(update, 'my_chat_member'):
166
+ handler = this.handleMyChatMember(update.my_chat_member);
167
+ break;
168
+ case (0, core_1.hasObjectProperty)(update, 'poll'):
169
+ handler = this.handlePoll(update.poll);
170
+ break;
171
+ case (0, core_1.hasObjectProperty)(update, 'poll_answer'):
172
+ handler = this.handlePollAnswer(update.poll_answer);
173
+ break;
174
+ case (0, core_1.hasObjectProperty)(update, 'pre_checkout_query'):
175
+ handler = this.handlePreCheckoutQuery(update.pre_checkout_query);
176
+ break;
177
+ case (0, core_1.hasObjectProperty)(update, 'shipping_query'):
178
+ handler = this.handleShippingQuery(update.shipping_query);
179
+ break;
180
+ default:
181
+ module_logger_1.ModuleLogger.error('Telegram', 'handle', `Failed to handle the update.`, update);
182
+ return;
183
+ }
184
+ handler.id
185
+ ? module_logger_1.ModuleLogger.debug('Telegram', 'handle', `A ${handler.type} update has been handled.`, update, handler)
186
+ : module_logger_1.ModuleLogger.warn('Telegram', 'handle', `Failed to find the matching handler.`, update);
187
+ }
188
+ handleCallbackQuery(query) {
189
+ let handler, body;
190
+ body = callback_query_utils_1.CallbackQueryUtils.decodeBody(query.data);
191
+ (0, core_1.setObjectProperty)(query, 'body', body);
192
+ handler = this.findMatchingHandler(enums_1.UpdateType.CALLBACK_QUERY, body.t);
193
+ if (!handler.id)
194
+ return handler;
195
+ handler.middleware(query);
196
+ if (handler.options.deleteOnCallbackQuery && query.message) {
197
+ this.delete.message(body.c ? query.from.id : query.message.chat.id, query.message.message_id);
198
+ }
199
+ return handler;
200
+ }
201
+ handleChannelPost(post) {
202
+ let handler;
203
+ handler = this.findMatchingHandler(enums_1.UpdateType.CHANNEL_POST);
204
+ if (!handler.id)
205
+ return handler;
206
+ handler.middleware(post);
207
+ module_logger_1.ModuleLogger.debug('Telegram', 'handleChannelPost', `A ${handler.type} update has been handled.`, post, handler);
208
+ return handler;
209
+ }
210
+ handleChatJoinRequest(request) {
211
+ let handler;
212
+ handler = this.findMatchingHandler(enums_1.UpdateType.CHAT_JOIN_REQUEST);
213
+ if (!handler.id)
214
+ return handler;
215
+ handler.middleware(request);
216
+ return handler;
217
+ }
218
+ handleChatMember(member) {
219
+ let handler;
220
+ handler = this.findMatchingHandler(enums_1.UpdateType.CHAT_MEMBER);
221
+ if (!handler.id)
222
+ return handler;
223
+ handler.middleware(member);
224
+ return handler;
225
+ }
226
+ handleChosenInlineResult(result) {
227
+ let handler;
228
+ handler = this.findMatchingHandler(enums_1.UpdateType.CHOSEN_INLINE_RESULT);
229
+ if (!handler.id)
230
+ return handler;
231
+ handler.middleware(result);
232
+ return handler;
233
+ }
234
+ handleDocument(document) {
235
+ let handler;
236
+ handler = this.findMatchingHandler(enums_1.UpdateType.DOCUMENT, command_utils_1.CommandUtils.get(document.caption));
237
+ if (!handler.id)
238
+ return handler;
239
+ handler.middleware(document);
240
+ return handler;
241
+ }
242
+ handleEditedChannelPost(post) {
243
+ let handler;
244
+ handler = this.findMatchingHandler(enums_1.UpdateType.EDITED_CHANNEL_POST);
245
+ if (!handler.id)
246
+ return handler;
247
+ handler.middleware(post);
248
+ return handler;
249
+ }
250
+ handleEditedMessage(message) {
251
+ let handler;
252
+ handler = this.findMatchingHandler(enums_1.UpdateType.EDITED_MESSAGE);
253
+ if (!handler.id)
254
+ return handler;
255
+ handler.middleware(message);
256
+ return handler;
257
+ }
258
+ handleInlineQuery(query) {
259
+ let handler;
260
+ handler = this.findMatchingHandler(enums_1.UpdateType.INLINE_QUERY);
261
+ if (!handler.id)
262
+ return handler;
263
+ handler.middleware(query);
264
+ return handler;
265
+ }
266
+ handleMessage(message) {
267
+ let handler;
268
+ handler = this.findMatchingHandler(enums_1.UpdateType.MESSAGE, command_utils_1.CommandUtils.get(message.text));
269
+ if (!handler.id)
270
+ return handler;
271
+ handler.middleware(message);
272
+ return handler;
273
+ }
274
+ handleMyChatMember(member) {
275
+ let handler;
276
+ handler = this.findMatchingHandler(enums_1.UpdateType.MY_CHAT_MEMBER);
277
+ if (!handler.id)
278
+ return handler;
279
+ handler.middleware(member);
280
+ return handler;
281
+ }
282
+ handlePoll(poll) {
283
+ let handler;
284
+ handler = this.findMatchingHandler(enums_1.UpdateType.POLL);
285
+ if (!handler.id)
286
+ return handler;
287
+ handler.middleware(poll);
288
+ return handler;
289
+ }
290
+ handlePollAnswer(answer) {
291
+ let handler;
292
+ handler = this.findMatchingHandler(enums_1.UpdateType.POLL_ANSWER);
293
+ if (!handler.id)
294
+ return handler;
295
+ handler.middleware(answer);
296
+ return handler;
297
+ }
298
+ handlePreCheckoutQuery(query) {
299
+ let handler;
300
+ handler = this.findMatchingHandler(enums_1.UpdateType.PRE_CHECKOUT_QUERY);
301
+ if (!handler.id)
302
+ return handler;
303
+ handler.middleware(query);
304
+ return handler;
305
+ }
306
+ handleReplyToMessage(reply) {
307
+ let body, handler;
308
+ body = reply_to_message_utils_1.ReplyToMessageUtils.decodeBody(reply.reply_to_message?.entities || []);
309
+ (0, core_1.setObjectProperty)(reply, 'body', body);
310
+ handler = this.findMatchingHandler(enums_1.UpdateType.REPLY_TO_MESSAGE, body.type);
311
+ if (!handler.id)
312
+ return handler;
313
+ handler.middleware(reply);
314
+ if (handler.id.length > 0 && handler.options.deleteOnReply && reply.from && reply.reply_to_message) {
315
+ this.delete.message(reply.from.id, reply.message_id);
316
+ this.delete.message(reply.from.id, reply.reply_to_message.message_id);
317
+ }
318
+ return handler;
319
+ }
320
+ handleShippingQuery(query) {
321
+ let handler;
322
+ handler = this.findMatchingHandler(enums_1.UpdateType.SHIPPING_QUERY);
323
+ if (!handler.id)
324
+ return handler;
325
+ handler.middleware(query);
326
+ return handler;
327
+ }
328
+ handleStart(start) {
329
+ let handler, body;
330
+ body = start_utils_1.StartUtils.decodeBody(start.text);
331
+ (0, core_1.setObjectProperty)(start, 'body', body);
332
+ handler = this.findMatchingHandler(enums_1.UpdateType.START, body.type);
333
+ if (!handler.id)
334
+ return handler;
335
+ handler.middleware(start);
336
+ if (handler.id.length > 0 && handler.options.deleteOnMessageStart) {
337
+ this.delete.message(body.chatID ? start.from?.id || 0 : start.chat.id, start.message_id);
338
+ }
339
+ return handler;
340
+ }
341
+ findMatchingHandler(type, key = '') {
342
+ return this.handlers.find((v) => v.key === key && v.type === type) || dummy_1.Dummy.handler;
343
+ }
344
+ get commands() {
345
+ return this.handlers
346
+ .filter((v) => v.key && v.type === enums_1.UpdateType.MESSAGE)
347
+ .map((v) => ({ command: v.key || '', description: v.description || '' }));
348
+ }
349
+ get handlerIDs() {
350
+ return this.handlers.reduce((r, v) => [...r, v.id], []);
351
+ }
352
+ }
353
+ exports.Telegram = Telegram;
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "author": "Dario Sechi",
3
+ "devDependencies": {
4
+ "@aracna/core": "^1.1.12",
5
+ "@aracna/telegram-bot-types": "^1.2.0",
6
+ "@microsoft/api-extractor": "^7.33.5",
7
+ "@vitest/coverage-c8": "^0.24.5",
8
+ "@vitest/ui": "^0.24.5",
9
+ "dotenv": "^16.0.3",
10
+ "fastify": "^4.9.2",
11
+ "typescript": "^4.8.4",
12
+ "vitest": "^0.24.5"
13
+ },
14
+ "license": "MIT",
15
+ "main": "index.js",
16
+ "name": "@aracna/telegram-bot",
17
+ "peerDependencies": {
18
+ "@aracna/core": ">= 1.1.12",
19
+ "@aracna/telegram-bot-types": ">= 1.2.0"
20
+ },
21
+ "scripts": {
22
+ "test": "yarn vitest run",
23
+ "build": "rm -rf dist && yarn tsc && yarn api-extractor run --local",
24
+ "tarball": "yarn version && cp LICENSE package.json README.md dist/. && cd dist && yarn pack",
25
+ "deploy": "yarn test && yarn build && yarn tarball && yarn publish dist/*.tgz && git push"
26
+ },
27
+ "version": "1.9.3"
28
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CallbackQueryUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ const dummy_1 = require("../modules/dummy");
6
+ class CallbackQueryUtils {
7
+ static decodeBody(data) {
8
+ let body;
9
+ if (!data) {
10
+ return dummy_1.Dummy.callbackQueryBody;
11
+ }
12
+ body = (0, core_1.tc)(() => JSON.parse(Buffer.from(data, 'base64').toString()));
13
+ if (body instanceof Error)
14
+ return dummy_1.Dummy.callbackQueryBody;
15
+ return body;
16
+ }
17
+ static encodeBody(data, type, chatID) {
18
+ let body;
19
+ body = dummy_1.Dummy.callbackQueryBody;
20
+ body.c = chatID;
21
+ body.d = data;
22
+ body.t = type;
23
+ return Buffer.from(JSON.stringify(body)).toString('base64');
24
+ }
25
+ }
26
+ exports.CallbackQueryUtils = CallbackQueryUtils;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CommandUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ const constants_1 = require("../definitions/constants");
6
+ class CommandUtils {
7
+ static getByContext(context) {
8
+ let string;
9
+ switch (true) {
10
+ case (0, core_1.hasObjectProperty)(context, 'caption'):
11
+ string = (0, core_1.getObjectProperty)(context, 'caption', '');
12
+ break;
13
+ case (0, core_1.hasObjectProperty)(context, 'text'):
14
+ string = (0, core_1.getObjectProperty)(context, 'caption', '');
15
+ break;
16
+ default:
17
+ string = '';
18
+ break;
19
+ }
20
+ return this.get(string);
21
+ }
22
+ static get(string) {
23
+ return (constants_1.REGEXP_COMMAND.exec(string?.slice(0, 512) || '') || [''])[0].slice(1);
24
+ }
25
+ static omit(string) {
26
+ return string.replace(constants_1.REGEXP_COMMAND_WITH_USERNAME, '').trim();
27
+ }
28
+ }
29
+ exports.CommandUtils = CommandUtils;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ class ContextUtils {
6
+ static getChatID(context) {
7
+ return this.getChat(context).id;
8
+ }
9
+ static getChatType(context) {
10
+ return this.getChat(context).type;
11
+ }
12
+ static getChat(context) {
13
+ switch (true) {
14
+ case (0, core_1.hasObjectProperty)(context, 'chat'):
15
+ return (0, core_1.getObjectProperty)(context, 'chat', { id: 0, type: '' });
16
+ case (0, core_1.hasObjectProperty)(context, 'message.chat'):
17
+ return (0, core_1.getObjectProperty)(context, 'chat', { id: 0, type: '' });
18
+ default:
19
+ return { id: 0, type: '' };
20
+ }
21
+ }
22
+ static getUserID(context) {
23
+ return this.getUser(context).id;
24
+ }
25
+ static getUserFirstName(context) {
26
+ return this.getUser(context).first_name;
27
+ }
28
+ static getUserLastName(context) {
29
+ return this.getUser(context).last_name || '';
30
+ }
31
+ static getUserUsername(context) {
32
+ return this.getUser(context).username || '';
33
+ }
34
+ static getUser(context) {
35
+ switch (true) {
36
+ case (0, core_1.hasObjectProperty)(context, 'from'):
37
+ return (0, core_1.getObjectProperty)(context, 'from', { first_name: '', id: 0, is_bot: false, username: '' });
38
+ default:
39
+ return { first_name: '', id: 0, is_bot: false, username: '' };
40
+ }
41
+ }
42
+ }
43
+ exports.ContextUtils = ContextUtils;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HTMLUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ class HTMLUtils {
6
+ static tags = ['b', 'strong', 'i', 'em', 'u', 'ins', 's', 'strike', 'del', 'span', 'tg-spoiler', 'a', 'code', 'pre', '/', '"'];
7
+ static sanitize(text) {
8
+ return text
9
+ .replace(new RegExp(`<(?!(${this.tags.join('|')}))`, 'gm'), '&lt;')
10
+ .replace(new RegExp(`(?<!(${this.tags.join('|')}))>`, 'gm'), '&gt;')
11
+ .replace(/&/gm, '&amp;');
12
+ }
13
+ static progress(value, minimum = 0, maximum = 100, size = 20) {
14
+ let percentage, steps;
15
+ percentage = (0, core_1.getNumberPercentage)(value, minimum, maximum);
16
+ steps = new Array(size).fill(0).map((v, k) => ((k * maximum) / size < percentage ? '=' : ' '));
17
+ return `<code>[${steps.join('')}]</code>`;
18
+ }
19
+ }
20
+ exports.HTMLUtils = HTMLUtils;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InlineKeyboardUtils = void 0;
4
+ class InlineKeyboardUtils {
5
+ static getButtonsType(buttons) {
6
+ switch (Object.keys(buttons[0]).filter((v) => v !== 'text')[0]) {
7
+ case 'url':
8
+ return 'url';
9
+ case 'login_url':
10
+ return 'login';
11
+ case 'callback_data':
12
+ return 'callback';
13
+ case 'switch_inline_query':
14
+ return 'query';
15
+ case 'switch_inline_query_current_chat':
16
+ return 'queryCurrentChat';
17
+ case 'callback_game':
18
+ return 'game';
19
+ case 'pay':
20
+ return 'pay';
21
+ default:
22
+ return '';
23
+ }
24
+ }
25
+ }
26
+ exports.InlineKeyboardUtils = InlineKeyboardUtils;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReplyToMessageUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ const dummy_1 = require("../modules/dummy");
6
+ class ReplyToMessageUtils {
7
+ static decodeBody(entities) {
8
+ let entity, encoded, body;
9
+ entity = entities[entities.length - 1];
10
+ if (!entity || !entity.url)
11
+ return dummy_1.Dummy.messageBody;
12
+ encoded = entity.url.replace('https://t.me/?a=', '');
13
+ body = (0, core_1.tc)(() => JSON.parse(Buffer.from(encoded, 'base64').toString()));
14
+ if (body instanceof Error)
15
+ return dummy_1.Dummy.messageBody;
16
+ return body;
17
+ }
18
+ static encodeBody(data, type, chatID) {
19
+ let body;
20
+ body = dummy_1.Dummy.messageBody;
21
+ body.chatID = chatID;
22
+ body.data = data;
23
+ body.type = type;
24
+ return `\n<a href="https://t.me/?a=${Buffer.from(JSON.stringify(body)).toString('base64')}">ㅤ</a>`;
25
+ }
26
+ }
27
+ exports.ReplyToMessageUtils = ReplyToMessageUtils;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StartUtils = void 0;
4
+ const core_1 = require("@aracna/core");
5
+ const dummy_1 = require("../modules/dummy");
6
+ class StartUtils {
7
+ static decodeBody(text) {
8
+ let body;
9
+ if (!text) {
10
+ return dummy_1.Dummy.messageBody;
11
+ }
12
+ body = (0, core_1.tc)(() => JSON.parse(Buffer.from(text.replace('/start', '').trim(), 'base64').toString()));
13
+ if (body instanceof Error)
14
+ return dummy_1.Dummy.messageBody;
15
+ return body;
16
+ }
17
+ static encodeBody(data, type, chatID) {
18
+ let body;
19
+ body = dummy_1.Dummy.messageBody;
20
+ body.chatID = chatID;
21
+ body.data = data;
22
+ body.type = type;
23
+ return Buffer.from(JSON.stringify(body)).toString('base64');
24
+ }
25
+ static encodeBodyToHREF(username, data, type, chatID) {
26
+ return `https://t.me/${username}?start=${this.encodeBody(data, type, chatID)}`;
27
+ }
28
+ static encodeBodyToAnchorTag(username, data, type, children, chatID) {
29
+ return `<a href="${this.encodeBodyToHREF(username, data, type, chatID)}">${children}</a>`;
30
+ }
31
+ }
32
+ exports.StartUtils = StartUtils;