Пример #1
0
    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
Пример #2
0
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
Пример #3
0
    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
        )
Пример #4
0
    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
        )
Пример #5
0
async def _event_type(event: Event) -> str:
    return event.get_type()
Пример #6
0
 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  # 兼容旧配置
     )