def get_value(cls, bot: Bot, event: Event, state: T_State) -> CMD_RESULT: prefix = CMD_RESULT( command=None, raw_command=None, command_arg=None, command_start=None ) state[PREFIX_KEY] = prefix if event.get_type() != "message": return prefix message = event.get_message() message_seg: MessageSegment = message[0] if message_seg.is_text(): segment_text = str(message_seg).lstrip() pf = cls.prefix.longest_prefix(segment_text) if pf: value: TRIE_VALUE = pf.value prefix[RAW_CMD_KEY] = pf.key prefix[CMD_START_KEY] = value.command_start prefix[CMD_KEY] = value.command msg = message.copy() msg.pop(0) new_message = msg.__class__(segment_text[len(pf.key) :].lstrip()) for new_segment in reversed(new_message): msg.insert(0, new_segment) prefix[CMD_ARG_KEY] = msg return prefix
async def command_env_settings(bot: Bot, event: Event, state: T_State, matcher: Matcher, regex: str): env_vars = os.environ.copy() old_python_env = env_vars.get("PYTHONPATH", "") if old_python_env.strip() == "": old_python_env = [] else: old_python_env = old_python_env.split(":") env_vars["PYTHONPATH"] = ":".join(old_python_env + [str(PROJECT_ROOT)]) if event is not None: env_vars["BOT_USER_ID"] = str(event.get_user_id()) env_vars["BOT_SESSION_ID"] = str(event.get_session_id()) if event.is_tome(): env_vars["TO_BOT"] = str(1) env_vars["BOT_EVENT_TYPE"] = str(event.get_type()) msg = str(event.get_plaintext()) env_vars["BOT_EVENT_MESSAGE"] = msg group_id = getattr(event, "group_id", None) if group_id is not None: env_vars["BOT_GROUP_ID"] = str(group_id) if regex is not None: match = re.match(regex, msg, flags=re.MULTILINE | re.DOTALL) if match: _, origin_command, command_text = match.groups() env_vars["BOT_EVENT_COMMAND"] = origin_command env_vars["BOT_EVENT_COMMAND_ARGS"] = command_text return env_vars
async def check_rule( cls, bot: Bot, event: Event, state: T_State, stack: Optional[AsyncExitStack] = None, dependency_cache: Optional[T_DependencyCache] = None, ) -> bool: """ :说明: 检查是否满足匹配规则 :参数: * ``bot: Bot``: Bot 对象 * ``event: Event``: 上报事件 * ``state: T_State``: 当前状态 :返回: - ``bool``: 是否满足匹配规则 """ event_type = event.get_type() return event_type == (cls.type or event_type) and await cls.rule( bot, event, state, stack, dependency_cache )
async def check_perm( cls, bot: Bot, event: Event, stack: Optional[AsyncExitStack] = None, dependency_cache: Optional[T_DependencyCache] = None, ) -> bool: """ :说明: 检查是否满足触发权限 :参数: * ``bot: Bot``: Bot 对象 * ``event: Event``: 上报事件 :返回: - ``bool``: 是否满足权限 """ event_type = event.get_type() return event_type == (cls.type or event_type) and await cls.permission( bot, event, stack, dependency_cache )
async def _event_type(event: Event) -> str: return event.get_type()
async def __call__(self, bot: Bot, event: Event) -> bool: return event.get_type() == "message" and ( f"{bot.adapter.get_name().split(maxsplit=1)[0].lower()}:{event.get_user_id()}" in bot.config.superusers or event.get_user_id() in bot.config.superusers # 兼容旧配置 )