def endswith(text: str, *texts: str, strip: bool = True): if strip: return make_graph_deco(PrefixNode)( text[::-1], *map(lambda x: x[::-1], texts), key=key_message_content_string_reversed_lstripped) else: return make_graph_deco(PrefixNode)( text[::-1], *map(lambda x: x[::-1], texts), key=key_message_content_string_reversed)
from functools import partial from ajenga.event import EventType from ajenga.router.keyfunc import KeyFunctionImpl from ajenga.router.std import EqualNode, make_graph_deco from ajenga.router.trie import PrefixNode key_event_type = KeyFunctionImpl(lambda event: event.type) key_meta_type = KeyFunctionImpl(lambda event: event.meta_type) key_meta_plugin = KeyFunctionImpl(lambda event: event.plugin) key_channel = KeyFunctionImpl(lambda event: event.channel) event_type_is = partial(make_graph_deco(EqualNode), key=key_event_type) meta_type_is = partial(make_graph_deco(EqualNode), key=key_meta_type) meta_plugin_is = partial(make_graph_deco(EqualNode), key=key_meta_plugin) channel_is = partial(make_graph_deco(EqualNode), key=key_channel) def channel(channel: str): return event_type_is(EventType.Custom) & channel_is(channel) from . import message from .message import is_message
def startswith(text: str, *texts: str, strip: bool = True): if strip: return make_graph_deco(PrefixNode)(text, *texts, key=key_message_content_string_lstripped) else: return make_graph_deco(PrefixNode)(text, *texts, key=key_message_content_string)
def equals(text: str, *texts: str, strip: bool = True): if strip: return make_graph_deco(EqualNode)(text, *texts, key=key_message_content_string_stripped) else: return make_graph_deco(EqualNode)(text, *texts, key=key_message_content_string)
def has(msg_type: Type[MessageElement], *or_more: Type[MessageElement]): return make_graph_deco(MessageTypeNode)(msg_type, *or_more)
key_message_content_string_reversed_stripped = KeyFunctionImpl( lambda event: event.message.as_plain()[::-1].strip()) key_message_content_string_reversed_lstripped = KeyFunctionImpl( lambda event: event.message.as_plain()[::-1].lstrip()) key_message_qq = KeyFunctionImpl(lambda event: event.sender.qq) key_message_group = KeyFunctionImpl(lambda event: event.group) key_message_permission = KeyFunctionImpl(lambda event: event.sender.permission) is_message = event_type_is(*MessageEventTypes) is_friend = event_type_is(EventType.FriendMessage) is_group = event_type_is(EventType.GroupMessage) is_temp = event_type_is(EventType.TempMessage) is_private = is_friend | is_temp qq_from = partial(make_graph_deco(EqualNode), key=key_message_qq) group_from = partial(make_graph_deco(EqualNode), key=key_message_group) permission_is = partial(make_graph_deco(EqualNode), key=key_message_permission) def equals(text: str, *texts: str, strip: bool = True): if strip: return make_graph_deco(EqualNode)(text, *texts, key=key_message_content_string_stripped) else: return make_graph_deco(EqualNode)(text, *texts, key=key_message_content_string) def startswith(text: str, *texts: str, strip: bool = True): if strip: return make_graph_deco(PrefixNode)(text, *texts, key=key_message_content_string_lstripped)