def add_rules(self, rules: typing.List[AbstractRule], func: typing.Callable) -> UserLongPollEventRule: current = list() for rule in self.default_rules + rules: if isinstance(rule, str): rule = VBMLRule(rule) if not isinstance(rule, AbstractFilter): rule.create(func) current.append(rule) return self.add_handled_rule(current, func)
class PortalBranch(ClsBranch): async def branch(self, answer: Message, *args): request = DBGroups.get(answer.from_id) group = request[0] buttons_dict = utils.get_schedule_buttons(add_today=True) if answer.text in buttons_dict.keys(): button = buttons_dict[answer.text] result = schedule.get_schedule(group, button['start_date'], button['end_date']) for r in result: await answer(r, keyboard=utils.schedule_keyboard()) elif answer.text == 'debug': str = '\n'.join( [f'{btn}: {btn["start_date"]}' for btn in buttons_dict]) await answer(f'{str}', keyboard=utils.schedule_keyboard()) else: await answer("Шо? Нипонял (пасхалка найдена)", keyboard=utils.schedule_keyboard()) @rule_disposal(VBMLRule(["выйти", "назад"], lower=True)) async def exit_branch(self, answer: Message): await answer('Возвращаемся', keyboard=general_keyboard()) return ExitBranch()
def _text_rule( self, func: typing.Callable, text: typing.Union[str, Pattern, typing.List[typing.Union[str, Pattern]]], lower: bool, command: bool, pattern: str, ) -> AbstractRule: source = None if not isinstance(text, dict): texts: typing.List[typing.Union[str, Pattern]] = text if isinstance( text, list) else [text] else: source = list(text.values()) texts = list(text.keys()) patterns: typing.List[Pattern] = [] for text in texts: if not isinstance(text, Pattern): prefix = ("[" + "|".join(self.prefix) + "]") if command else "" patterns.append( self._patcher.pattern( text, pattern=(prefix + pattern) if prefix else pattern, flags=re.IGNORECASE if lower else None, )) else: patterns.append(text) rule = VBMLRule(patterns) if source: rule.watch_context = dict(zip(patterns, source)) arguments = [ arguments for pattern in patterns for arguments in pattern.arguments ] # Why? return rule
def decorator(func): pattern = Pattern( pattern=r"\[(club|public){}\|.*?]".format(self.group_id)) rule = VBMLRule(pattern) self.chat_message.add_rules([rule], func) return func