UNPKG

10.1 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = getActiveRules;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
14var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
16var _flatten = _interopRequireDefault(require("lodash/flatten"));
17
18var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
19
20var _some = _interopRequireDefault(require("lodash/some"));
21
22function updateRules(_x) {
23 return _updateRules.apply(this, arguments);
24}
25
26function _updateRules() {
27 _updateRules = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
28 var ctx, bot, BotsUserDataModel, fromId, data, userRules, rules;
29 return _regenerator["default"].wrap(function _callee$(_context) {
30 while (1) {
31 switch (_context.prev = _context.next) {
32 case 0:
33 ctx = _ref.ctx, bot = _ref.bot;
34 _context.next = 3;
35 return this.botsModule.module('models.BotsUserDataModel');
36
37 case 3:
38 BotsUserDataModel = _context.sent;
39 fromId = bot.getUserId(ctx);
40 data = {
41 telegramUserId: fromId,
42 'info.rules': {
43 $exists: true
44 }
45 };
46 _context.next = 8;
47 return BotsUserDataModel.find(data).select('info.rules').lean();
48
49 case 8:
50 userRules = _context.sent;
51 rules = (0, _flatten["default"])(userRules.map(function (_ref3) {
52 var info = _ref3.info;
53 return info.rules;
54 }));
55 return _context.abrupt("return", [].concat((0, _toConsumableArray2["default"])(this.rules), (0, _toConsumableArray2["default"])(rules)));
56
57 case 11:
58 case "end":
59 return _context.stop();
60 }
61 }
62 }, _callee, this);
63 }));
64 return _updateRules.apply(this, arguments);
65}
66
67function getActiveRules() {
68 return _getActiveRules.apply(this, arguments);
69}
70
71function _getActiveRules() {
72 _getActiveRules = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
73 var _message$sticker,
74 _message$sticker2,
75 _this = this;
76
77 var _ref2,
78 ctx,
79 bot,
80 pack,
81 message,
82 rules,
83 checkUserId,
84 checkChatType,
85 checkChatId,
86 checkMessageType,
87 checkMessageText,
88 checkStickerEmoji,
89 checkStickerSetName,
90 checkNextRoute,
91 checkCriteria,
92 activeRules,
93 _args2 = arguments;
94
95 return _regenerator["default"].wrap(function _callee2$(_context2) {
96 while (1) {
97 switch (_context2.prev = _context2.next) {
98 case 0:
99 _ref2 = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}, ctx = _ref2.ctx, bot = _ref2.bot;
100 pack = {};
101 message = bot.getMessage(ctx);
102 pack.userId = bot.getUserId(ctx);
103 pack.chatType = bot.getMessageChatType(ctx);
104 pack.chatId = bot.getMessageChatId(ctx);
105 pack.messageType = bot.getMessageType(ctx);
106 pack.messageText = bot.getMessageText(ctx);
107 pack.stickerEmoji = (_message$sticker = message.sticker) === null || _message$sticker === void 0 ? void 0 : _message$sticker.emoji;
108 pack.stickerSetName = (_message$sticker2 = message.sticker) === null || _message$sticker2 === void 0 ? void 0 : _message$sticker2.set_name;
109 pack.nextRoute = bot.getNextRoute(ctx);
110 _context2.next = 13;
111 return updateRules.call(this, {
112 ctx: ctx,
113 bot: bot
114 });
115
116 case 13:
117 rules = _context2.sent;
118 this.log.trace('getActiveRules rules', rules.length); // TODO: подумать как унифицировать, функции абсолютно одинаковые
119
120 checkUserId = function checkUserId(item) {
121 if (Array.isArray(item)) return (0, _some["default"])(item, checkUserId);
122 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
123 return item === pack.userId; // return ['number', 'string'].includes(typeof item) && String(item) === String(pack.userId); // TODO: подумать нужна ли проверка на тип и приведение к строке
124 };
125
126 checkChatType = function checkChatType(item) {
127 if (Array.isArray(item)) return (0, _some["default"])(item, checkChatType);
128 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
129 return item === pack.chatType;
130 };
131
132 checkChatId = function checkChatId(item) {
133 if (Array.isArray(item)) return (0, _some["default"])(item, checkChatId);
134 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
135 return item === pack.chatId; // return ['number', 'string'].includes(typeof item) && String(item) === String(pack.chatId); // TODO: подумать нужна ли проверка на тип и приведение к строке
136 };
137
138 checkMessageType = function checkMessageType(item) {
139 if (Array.isArray(item)) return (0, _some["default"])(item, checkMessageType);
140 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
141 return item === pack.messageType;
142 };
143
144 checkMessageText = function checkMessageText(item) {
145 if (Array.isArray(item)) return (0, _some["default"])(item, checkMessageText);
146 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
147 if (item instanceof RegExp) return item.test(pack.messageText);
148 return item === pack.messageText;
149 };
150
151 checkStickerEmoji = function checkStickerEmoji(item) {
152 if (Array.isArray(item)) return (0, _some["default"])(item, checkStickerEmoji);
153 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
154 if (item instanceof RegExp) return item.test(pack.stickerEmoji);
155 return item === pack.stickerEmoji;
156 };
157
158 checkStickerSetName = function checkStickerSetName(item) {
159 if (Array.isArray(item)) return (0, _some["default"])(item, checkStickerSetName);
160 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
161 if (item instanceof RegExp) return item.test(pack.stickerSetName);
162 return item === pack.stickerSetName;
163 };
164
165 checkNextRoute = function checkNextRoute(item) {
166 if (Array.isArray(item)) return (0, _some["default"])(item, checkNextRoute);
167 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
168 if (item instanceof RegExp) return item.test(pack.nextRoute);
169 return item === pack.nextRoute;
170 };
171
172 checkCriteria = function checkCriteria(item) {
173 if (Array.isArray(item)) return (0, _some["default"])(item, checkCriteria);
174 if ((0, _isFunction["default"])(item) && !item(pack)) return false;
175 var userId = item.userId,
176 chatType = item.chatType,
177 chatId = item.chatId,
178 messageType = item.messageType,
179 messageText = item.messageText,
180 stickerEmoji = item.stickerEmoji,
181 stickerSetName = item.stickerSetName,
182 nextRoute = item.nextRoute;
183
184 if (userId && !checkUserId(userId)) {
185 _this.log.trace('!checkUserId');
186
187 return false;
188 }
189
190 if (chatType && !checkChatType(chatType)) {
191 _this.log.trace('!checkChatType');
192
193 return false;
194 }
195
196 if (chatId && !checkChatId(chatId)) {
197 _this.log.trace('!checkChatId');
198
199 return false;
200 }
201
202 if (messageType && !checkMessageType(messageType)) {
203 _this.log.trace('!checkMessageType');
204
205 return false;
206 }
207
208 if (messageText && !checkMessageText(messageText)) {
209 _this.log.trace('!checkMessageText');
210
211 return false;
212 }
213
214 if (stickerEmoji && !checkStickerEmoji(stickerEmoji)) {
215 _this.log.trace('!checkStickerEmoji');
216
217 return false;
218 }
219
220 if (stickerSetName && !checkStickerSetName(stickerSetName)) {
221 _this.log.trace('!checkStickerSetName');
222
223 return false;
224 }
225
226 if (nextRoute && !checkNextRoute(nextRoute)) {
227 _this.log.trace('!checkNextRoute');
228
229 return false;
230 }
231
232 return true;
233 };
234
235 activeRules = rules.filter(function (rule) {
236 var criteria = rule.criteria,
237 action = rule.action;
238 if (!criteria) return false;
239
240 if (!checkCriteria(criteria)) {
241 _this.log.trace('!checkCriteria');
242
243 return false;
244 }
245
246 if (!action) {
247 _this.log.trace('!action');
248
249 return false;
250 }
251
252 return true;
253 });
254 this.log.trace('getActiveRules', pack, '=>', activeRules);
255 return _context2.abrupt("return", activeRules);
256
257 case 27:
258 case "end":
259 return _context2.stop();
260 }
261 }
262 }, _callee2, this);
263 }));
264 return _getActiveRules.apply(this, arguments);
265}
266//# sourceMappingURL=getActiveRules.js.map
\No newline at end of file