diff --git a/nonebot/__init__.py b/nonebot/__init__.py index 6f93bdae..213b63d2 100644 --- a/nonebot/__init__.py +++ b/nonebot/__init__.py @@ -109,6 +109,7 @@ def get_bots() -> Union[NoReturn, Dict[str, Bot]]: from nonebot.sched import scheduler +from nonebot.utils import escape_tag from nonebot.config import Env, Config from nonebot.log import logger, default_filter from nonebot.adapters.cqhttp import Bot as CQBot @@ -155,8 +156,8 @@ def init(*, _env_file: Optional[str] = None, **kwargs): _env_file=_env_file or f".env.{env.environment}") default_filter.level = "DEBUG" if config.debug else "INFO" - logger.opt( - colors=True).debug(f"Loaded Config: {config.dict()}") + logger.opt(colors=True).debug( + f"Loaded Config: {escape_tag(str(config.dict()))}") DriverClass: Type[Driver] = getattr( importlib.import_module(config.driver), "Driver") diff --git a/nonebot/message.py b/nonebot/message.py index b6c3d888..f3a69e3a 100644 --- a/nonebot/message.py +++ b/nonebot/message.py @@ -6,6 +6,7 @@ from datetime import datetime from nonebot.log import logger from nonebot.rule import TrieRule +from nonebot.utils import escape_tag from nonebot.matcher import matchers from nonebot.typing import Set, Type, Union, NoReturn from nonebot.typing import Bot, Event, Matcher, PreProcessor @@ -64,7 +65,9 @@ async def handle_event(bot: Bot, event: Event): log_msg += f"@[群:{event.group_id}]:" log_msg += ' "' + "".join( - map(lambda x: str(x) if x.type == "text" else f"{x!s}", + map( + lambda x: escape_tag(str(x)) + if x.type == "text" else f"{escape_tag(str(x))}", event.message)) + '"' # type: ignore elif event.type == "notice": log_msg += f"Notice {event.raw_event}" diff --git a/nonebot/utils.py b/nonebot/utils.py index 06bdaaa4..b442f6bd 100644 --- a/nonebot/utils.py +++ b/nonebot/utils.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import re import json import asyncio import dataclasses @@ -9,6 +10,10 @@ from functools import wraps, partial from nonebot.typing import Any, Callable, Awaitable, overrides +def escape_tag(s: str) -> str: + return re.sub(r"\s]*)>", r"\\\g<0>", s) + + def run_sync(func: Callable[..., Any]) -> Callable[..., Awaitable[Any]]: """ :说明: