UNPKG

27.3 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = exports.DebugBotPlugin = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
15
16var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
18var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
19
20var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
22var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
24var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
26var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
28var _privateLinker = require("@lskjs/bots-base/utils/private-linker");
29
30var _botsPlugin = require("@lskjs/bots-plugin");
31
32var _err = _interopRequireDefault(require("@lskjs/err"));
33
34var _bluebird = _interopRequireDefault(require("bluebird"));
35
36var _chunk = _interopRequireDefault(require("lodash/chunk"));
37
38var _fromPairs = _interopRequireDefault(require("lodash/fromPairs"));
39
40function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
41
42function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
43
44function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
46function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
48var DebugBotPlugin = /*#__PURE__*/function (_BaseBotPlugin) {
49 (0, _inherits2["default"])(DebugBotPlugin, _BaseBotPlugin);
50
51 var _super = _createSuper(DebugBotPlugin);
52
53 function DebugBotPlugin() {
54 (0, _classCallCheck2["default"])(this, DebugBotPlugin);
55 return _super.apply(this, arguments);
56 }
57
58 (0, _createClass2["default"])(DebugBotPlugin, [{
59 key: "setStartParams",
60 value: function () {
61 var _setStartParams = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(bot, user, ctx) {
62 var text, _text$split, _text$split2, command, key, props, locale, data;
63
64 return _regenerator["default"].wrap(function _callee$(_context) {
65 while (1) {
66 switch (_context.prev = _context.next) {
67 case 0:
68 // link example:
69 // https://telegram.me/bot_username?start=startPayload-key1_value_key2_value
70 text = bot.getMessageText(ctx);
71
72 if (text) {
73 _context.next = 3;
74 break;
75 }
76
77 return _context.abrupt("return");
78
79 case 3:
80 _text$split = text.split(/\s|-|_/), _text$split2 = (0, _toArray2["default"])(_text$split), command = _text$split2[0], key = _text$split2[1], props = _text$split2.slice(2);
81
82 if (!(command !== '/start' || key !== 'startPayload')) {
83 _context.next = 6;
84 break;
85 }
86
87 return _context.abrupt("return");
88
89 case 6:
90 locale = ctx.from.language_code;
91 data = (0, _fromPairs["default"])((0, _chunk["default"])(props, 2));
92 user.setRef(data);
93 user.setLang(data, locale);
94 _context.next = 12;
95 return user.save();
96
97 case 12:
98 case "end":
99 return _context.stop();
100 }
101 }
102 }, _callee);
103 }));
104
105 function setStartParams(_x, _x2, _x3) {
106 return _setStartParams.apply(this, arguments);
107 }
108
109 return setStartParams;
110 }()
111 }, {
112 key: "runBot",
113 value: function () {
114 var _runBot = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(bot, name) {
115 var _this$config, _this$config2, _this$config3, _this$config4;
116
117 return _regenerator["default"].wrap(function _callee2$(_context2) {
118 while (1) {
119 switch (_context2.prev = _context2.next) {
120 case 0:
121 if (this.app) {
122 _context2.next = 2;
123 break;
124 }
125
126 throw new _err["default"]('!app');
127
128 case 2:
129 if (!(((_this$config = this.config) === null || _this$config === void 0 ? void 0 : _this$config.logger) !== false)) {
130 _context2.next = 5;
131 break;
132 }
133
134 _context2.next = 5;
135 return this.runLogger(bot, name);
136
137 case 5:
138 if (!(((_this$config2 = this.config) === null || _this$config2 === void 0 ? void 0 : _this$config2.ping) !== false)) {
139 _context2.next = 8;
140 break;
141 }
142
143 _context2.next = 8;
144 return this.runPing(bot);
145
146 case 8:
147 if (!(((_this$config3 = this.config) === null || _this$config3 === void 0 ? void 0 : _this$config3.chat) !== false)) {
148 _context2.next = 11;
149 break;
150 }
151
152 _context2.next = 11;
153 return this.runChatId(bot, name);
154
155 case 11:
156 if (!(((_this$config4 = this.config) === null || _this$config4 === void 0 ? void 0 : _this$config4.link) !== false)) {
157 _context2.next = 14;
158 break;
159 }
160
161 _context2.next = 14;
162 return this.runLink(bot);
163
164 case 14:
165 case "end":
166 return _context2.stop();
167 }
168 }
169 }, _callee2, this);
170 }));
171
172 function runBot(_x4, _x5) {
173 return _runBot.apply(this, arguments);
174 }
175
176 return runBot;
177 }()
178 }, {
179 key: "runPing",
180 value: function () {
181 var _runPing = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(bot) {
182 var _this = this;
183
184 return _regenerator["default"].wrap(function _callee4$(_context4) {
185 while (1) {
186 switch (_context4.prev = _context4.next) {
187 case 0:
188 bot.on('message', /*#__PURE__*/function () {
189 var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(ctx) {
190 var ms, v, text;
191 return _regenerator["default"].wrap(function _callee3$(_context3) {
192 while (1) {
193 switch (_context3.prev = _context3.next) {
194 case 0:
195 if (!bot.isMessageCommand(ctx, 'kill')) {
196 _context3.next = 7;
197 break;
198 }
199
200 _this.log.error('KILL FORM USER', bot.getMessageUserId(ctx));
201
202 bot.reply(ctx, '[ok]');
203 _context3.next = 5;
204 return _bluebird["default"].delay(1000);
205
206 case 5:
207 process.exit(1);
208 return _context3.abrupt("return", null);
209
210 case 7:
211 if (!bot.isMessageCommand(ctx, 'ping')) {
212 _context3.next = 10;
213 break;
214 }
215
216 ms = Math.floor((Date.now() / 1000 - ctx.message.date) * 1000);
217 return _context3.abrupt("return", bot.reply(ctx, "[pong] ".concat(ms, "ms")));
218
219 case 10:
220 if (!bot.isMessageCommands(ctx, ['v', 'powered', 'poweredby'])) {
221 _context3.next = 15;
222 break;
223 }
224
225 if (!_this.botsModule) _this.log.warn('!botsModule');
226 v = _this.botsModule.v || 0;
227 text = "\n*BotKit* `v".concat(v, "` \nPowerful starter kit for bot development on Telegram, Discord, Instagram, Twitter, Facebook, WhatsApp, Vkontakte\n\nDo you want bot? Ask @isuvorov\n\u041C\u043E\u0436\u0435\u043C \u0441\u0434\u0435\u043B\u0430\u0442\u044C \u0442\u0435\u0431\u0435 \u0442\u0430\u043A\u043E\u0433\u043E \u0436\u0435, \u043F\u0438\u0448\u0438 \uD83D\uDE09\n\nDocs: [@lskjs/lskjs](https://github.com/lskjs/lskjs)\nNpm: [@lskjs/bots](https://npmjs.com/package/@lskjs/bots)\nAny question: @lskjschat\n\nMade on @LSKjs with \u2764\uFE0F");
228 return _context3.abrupt("return", bot.reply(ctx, text, {
229 parse_mode: 'MarkdownV2'
230 }));
231
232 case 15:
233 return _context3.abrupt("return", null);
234
235 case 16:
236 case "end":
237 return _context3.stop();
238 }
239 }
240 }, _callee3);
241 }));
242
243 return function (_x7) {
244 return _ref.apply(this, arguments);
245 };
246 }());
247
248 case 1:
249 case "end":
250 return _context4.stop();
251 }
252 }
253 }, _callee4);
254 }));
255
256 function runPing(_x6) {
257 return _runPing.apply(this, arguments);
258 }
259
260 return runPing;
261 }() // eslint-disable-next-line @typescript-eslint/no-unused-vars
262
263 }, {
264 key: "runChatId",
265 value: function () {
266 var _runChatId = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(bot, name) {
267 return _regenerator["default"].wrap(function _callee5$(_context5) {
268 while (1) {
269 switch (_context5.prev = _context5.next) {
270 case 0:
271 bot.on('message', function (ctx) {
272 if (!bot.isMessageCommands(ctx, ['id', 'ид', 'chatid', 'чат'])) return;
273
274 if (bot.provider === 'vk') {
275 ctx.reply(ctx.message.reply_message ? ctx.message.reply_message.from_id : ctx.message.from_id);
276 }
277
278 if (bot.provider === 'telegram') {
279 var renderMessage = function renderMessage(message) {
280 return "id: `".concat(message.message_id, "` [").concat(bot.getMessageType(message), "]");
281 };
282
283 var renderChat = function renderChat(chat) {
284 return "chatId: `".concat(chat.id, "` ").concat(chat.type === 'supergroup' ? '[supergroup]' : '');
285 }; // [${chat.title}]
286
287
288 var renderUser = function renderUser(from) {
289 return "userId: `".concat(from.id, "` ").concat(from.is_bot ? '[bot]' : '');
290 };
291
292 var text = ['*Message*', renderMessage(ctx.message), ctx.message.from && renderUser(ctx.message.from), ctx.message.chat && renderChat(ctx.message.chat), ctx.message.reply_to_message && '\n*Replied message*', ctx.message.reply_to_message && renderMessage(ctx.message.reply_to_message), ctx.message.reply_to_message && ctx.message.reply_to_message.from && renderUser(ctx.message.reply_to_message.from), ctx.message.reply_to_message && ctx.message.reply_to_message.forward_from && '\n*Forwarded user*', ctx.message.reply_to_message && ctx.message.reply_to_message.forward_from && renderUser(ctx.message.reply_to_message.forward_from)].filter(Boolean).join('\n');
293 bot.reply(ctx, text, {
294 parse_mode: 'MarkdownV2'
295 });
296 }
297 });
298
299 case 1:
300 case "end":
301 return _context5.stop();
302 }
303 }
304 }, _callee5);
305 }));
306
307 function runChatId(_x8, _x9) {
308 return _runChatId.apply(this, arguments);
309 }
310
311 return runChatId;
312 }()
313 }, {
314 key: "runLogger",
315 value: function () {
316 var _runLogger = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(bot, name) {
317 var _this2 = this;
318
319 var BotsEventModel, BotsTelegramMessageModel, BotsTelegramUserModel, BotsTelegramChatModel, provider;
320 return _regenerator["default"].wrap(function _callee7$(_context7) {
321 while (1) {
322 switch (_context7.prev = _context7.next) {
323 case 0:
324 _context7.next = 2;
325 return this.botsModule.module('models.BotsEventModel');
326
327 case 2:
328 BotsEventModel = _context7.sent;
329 _context7.next = 5;
330 return this.botsModule.module('models.BotsTelegramMessageModel');
331
332 case 5:
333 BotsTelegramMessageModel = _context7.sent;
334 _context7.next = 8;
335 return this.botsModule.module('models.BotsTelegramUserModel');
336
337 case 8:
338 BotsTelegramUserModel = _context7.sent;
339 _context7.next = 11;
340 return this.botsModule.module('models.BotsTelegramChatModel');
341
342 case 11:
343 BotsTelegramChatModel = _context7.sent;
344 provider = bot.provider;
345 bot.eventTypes.forEach(function (type) {
346 bot.on(type, /*#__PURE__*/function () {
347 var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(ctx) {
348 var eventData, _this2$config, messageType, _eventData, sender_chat, chat, chatUserId, id, _yield$BotsTelegramCh, _this2$config2, _messageType, _eventData2, from, _chat, user, telegramUserId, _chatUserId, _id, _yield$BotsTelegramCh2;
349
350 return _regenerator["default"].wrap(function _callee6$(_context6) {
351 while (1) {
352 switch (_context6.prev = _context6.next) {
353 case 0:
354 if (!(provider === 'telegram' && type === 'callback_query')) {
355 _context6.next = 5;
356 break;
357 }
358
359 eventData = ctx.update.callback_query;
360
361 _this2.log.trace("<".concat(_this2.name, "/").concat(name, "> [").concat(type, "]"), eventData);
362
363 _context6.next = 47;
364 break;
365
366 case 5:
367 if (!(provider === 'telegram' && type === 'channel_post')) {
368 _context6.next = 22;
369 break;
370 }
371
372 eventData = ctx.update.channel_post;
373
374 _this2.log.trace("<".concat(_this2.name, "/").concat(name, "> [").concat(type, "]"), eventData);
375
376 if (!(((_this2$config = _this2.config) === null || _this2$config === void 0 ? void 0 : _this2$config.save) === false)) {
377 _context6.next = 10;
378 break;
379 }
380
381 return _context6.abrupt("return");
382
383 case 10:
384 messageType = bot.getMessageType(ctx);
385 _eventData = eventData, sender_chat = _eventData.sender_chat, chat = _eventData.chat;
386
387 if (!(chat && chat.id < 0)) {
388 _context6.next = 18;
389 break;
390 }
391
392 id = chat.id;
393 _context6.next = 16;
394 return BotsTelegramChatModel.findOneAndUpdate({
395 id: id
396 }, {
397 id: id
398 }, {
399 "new": true,
400 upsert: true
401 });
402
403 case 16:
404 _yield$BotsTelegramCh = _context6.sent;
405 chatUserId = _yield$BotsTelegramCh._id;
406
407 case 18:
408 _context6.next = 20;
409 return BotsTelegramMessageModel.create(_objectSpread({
410 botId: bot.getBotId(),
411 sender_chat: sender_chat,
412 chatUserId: chatUserId,
413 type: messageType
414 }, eventData));
415
416 case 20:
417 _context6.next = 47;
418 break;
419
420 case 22:
421 if (!(provider === 'telegram' && type === 'message')) {
422 _context6.next = 45;
423 break;
424 }
425
426 eventData = ctx.message;
427
428 _this2.log.trace("<".concat(_this2.name, "/").concat(name, "> [").concat(type, "]"), eventData);
429
430 if (!(((_this2$config2 = _this2.config) === null || _this2$config2 === void 0 ? void 0 : _this2$config2.save) === false)) {
431 _context6.next = 27;
432 break;
433 }
434
435 return _context6.abrupt("return");
436
437 case 27:
438 // Don't wait
439 _messageType = bot.getMessageType(ctx);
440 _eventData2 = eventData, from = _eventData2.from, _chat = _eventData2.chat;
441 _context6.next = 31;
442 return BotsTelegramUserModel.findOneAndUpdate({
443 id: from.id
444 }, from, {
445 "new": true,
446 upsert: true
447 });
448
449 case 31:
450 user = _context6.sent;
451 telegramUserId = user._id;
452 _context6.next = 35;
453 return _this2.setStartParams(bot, user, ctx);
454
455 case 35:
456 if (!(_chat && _chat.id < 0)) {
457 _context6.next = 41;
458 break;
459 }
460
461 _id = _chat.id;
462 _context6.next = 39;
463 return BotsTelegramChatModel.findOneAndUpdate({
464 id: _id
465 }, {
466 from: from,
467 id: _id
468 }, {
469 "new": true,
470 upsert: true
471 });
472
473 case 39:
474 _yield$BotsTelegramCh2 = _context6.sent;
475 _chatUserId = _yield$BotsTelegramCh2._id;
476
477 case 41:
478 _context6.next = 43;
479 return BotsTelegramMessageModel.create(_objectSpread({
480 botId: bot.getBotId(),
481 telegramUserId: telegramUserId,
482 chatUserId: _chatUserId,
483 type: _messageType
484 }, eventData));
485
486 case 43:
487 _context6.next = 47;
488 break;
489
490 case 45:
491 _this2.log.warn("<".concat(_this2.name, "/").concat(name, "> [").concat(provider, "/").concat(type, "] LOGGER NOT IMPLEMENTED"));
492
493 if (_this2.debug) _this2.log.trace('[CTX]', ctx);
494
495 case 47:
496 _context6.next = 49;
497 return BotsEventModel.create({
498 botId: bot.getBotId(),
499 provider: bot.provider,
500 type: type,
501 data: eventData
502 });
503
504 case 49:
505 case "end":
506 return _context6.stop();
507 }
508 }
509 }, _callee6);
510 }));
511
512 return function (_x12) {
513 return _ref2.apply(this, arguments);
514 };
515 }());
516 });
517
518 case 14:
519 case "end":
520 return _context7.stop();
521 }
522 }
523 }, _callee7, this);
524 }));
525
526 function runLogger(_x10, _x11) {
527 return _runLogger.apply(this, arguments);
528 }
529
530 return runLogger;
531 }()
532 /**
533 * Вешает обработчик который слушает команды на реплаи к сообщениям.
534 *
535 * Если команда совпадет со белым списком ('link', 'линк', 'ссылку')
536 * то бот пытается сгенерить ссылку на реплайнутое сообщение и удалить
537 * сообщение которое его стриггерило.
538 *
539 * @param bot
540 */
541
542 }, {
543 key: "runLink",
544 value: function () {
545 var _runLink = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(bot) {
546 return _regenerator["default"].wrap(function _callee9$(_context9) {
547 while (1) {
548 switch (_context9.prev = _context9.next) {
549 case 0:
550 bot.on('message', /*#__PURE__*/function () {
551 var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(ctx) {
552 var chatId, removeMessageId, messageId, text;
553 return _regenerator["default"].wrap(function _callee8$(_context8) {
554 while (1) {
555 switch (_context8.prev = _context8.next) {
556 case 0:
557 if (bot.isMessageCommands(ctx, ['link', 'линк', 'ссылку'])) {
558 _context8.next = 2;
559 break;
560 }
561
562 return _context8.abrupt("return");
563
564 case 2:
565 chatId = bot.getMessageChatId(ctx);
566 removeMessageId = bot.getMessageId(ctx);
567
568 if (chatId) {
569 _context8.next = 6;
570 break;
571 }
572
573 throw new _err["default"]('!chatId');
574
575 case 6:
576 if (removeMessageId) {
577 _context8.next = 8;
578 break;
579 }
580
581 throw new _err["default"]('!removeMessageId');
582
583 case 8:
584 messageId = bot.getRepliedMessageId(ctx);
585
586 if (!messageId) {
587 messageId = removeMessageId;
588 removeMessageId = null;
589 }
590
591 text = (0, _privateLinker.getPrivateLinkToMessage)({
592 chatId: chatId,
593 messageId: messageId
594 });
595 _context8.next = 13;
596 return bot.reply(ctx, text);
597
598 case 13:
599 if (!removeMessageId) {
600 _context8.next = 16;
601 break;
602 }
603
604 _context8.next = 16;
605 return ctx.deleteMessage(removeMessageId);
606
607 case 16:
608 case "end":
609 return _context8.stop();
610 }
611 }
612 }, _callee8);
613 }));
614
615 return function (_x14) {
616 return _ref3.apply(this, arguments);
617 };
618 }());
619
620 case 1:
621 case "end":
622 return _context9.stop();
623 }
624 }
625 }, _callee9);
626 }));
627
628 function runLink(_x13) {
629 return _runLink.apply(this, arguments);
630 }
631
632 return runLink;
633 }()
634 }]);
635 return DebugBotPlugin;
636}(_botsPlugin.BaseBotPlugin);
637
638exports.DebugBotPlugin = DebugBotPlugin;
639var _default = DebugBotPlugin;
640exports["default"] = _default;
641//# sourceMappingURL=DebugBotPlugin.js.map
\No newline at end of file