Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
 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