检查消息字符串是否符合指定正则表达式。 参数: regex: 正则表达式 flags: 正则表达式标记
| 655 | |
| 656 | |
| 657 | class RegexRule: |
| 658 | """检查消息字符串是否符合指定正则表达式。 |
| 659 | |
| 660 | 参数: |
| 661 | regex: 正则表达式 |
| 662 | flags: 正则表达式标记 |
| 663 | """ |
| 664 | |
| 665 | __slots__ = ("flags", "regex") |
| 666 | |
| 667 | def __init__(self, regex: str, flags: int = 0): |
| 668 | self.regex = regex |
| 669 | self.flags = flags |
| 670 | |
| 671 | def __repr__(self) -> str: |
| 672 | return f"Regex(regex={self.regex!r}, flags={self.flags})" |
| 673 | |
| 674 | def __eq__(self, other: object) -> bool: |
| 675 | return ( |
| 676 | isinstance(other, RegexRule) |
| 677 | and self.regex == other.regex |
| 678 | and self.flags == other.flags |
| 679 | ) |
| 680 | |
| 681 | def __hash__(self) -> int: |
| 682 | return hash((self.regex, self.flags)) |
| 683 | |
| 684 | async def __call__(self, event: Event, state: T_State) -> bool: |
| 685 | try: |
| 686 | msg = event.get_message() |
| 687 | except Exception: |
| 688 | return False |
| 689 | if matched := re.search(self.regex, str(msg), self.flags): |
| 690 | state[REGEX_MATCHED] = matched |
| 691 | return True |
| 692 | else: |
| 693 | return False |
| 694 | |
| 695 | |
| 696 | def regex(regex: str, flags: int | re.RegexFlag = 0) -> Rule: |