diff --git a/nonebot/config.py b/nonebot/config.py index c8d2cc19..818f7c36 100644 --- a/nonebot/config.py +++ b/nonebot/config.py @@ -29,6 +29,9 @@ from pydantic.env_settings import ( env_file_sentinel, ) +from nonebot.log import logger +from nonebot.utils import escape_tag + class CustomEnvSettings(EnvSettingsSource): def __call__(self, settings: BaseSettings) -> Dict[str, Any]: @@ -90,9 +93,11 @@ class CustomEnvSettings(EnvSettingsSource): env_val = env_vars[env_name] try: if env_val: - env_val = settings.__config__.json_loads(env_val) + env_val = settings.__config__.json_loads(env_val.strip()) except ValueError as e: - pass + logger.opt(colors=True, exception=e).trace( + f"Error while parsing JSON for {escape_tag(env_name)}. Assumed as string." + ) d[env_name] = env_val diff --git a/nonebot/drivers/aiohttp.py b/nonebot/drivers/aiohttp.py index c2e50481..243de63d 100644 --- a/nonebot/drivers/aiohttp.py +++ b/nonebot/drivers/aiohttp.py @@ -72,16 +72,16 @@ class Mixin(ForwardMixin): else: raise RuntimeError(f"Unsupported HTTP version: {setup.version}") - session = aiohttp.ClientSession(version=version, trust_env=True) - async with session.ws_connect( - setup.url, - method=setup.method, - timeout=setup.timeout or 10, - headers=setup.headers, - proxy=setup.proxy, - ) as ws: - websocket = WebSocket(request=setup, session=session, websocket=ws) - yield websocket + async with aiohttp.ClientSession(version=version, trust_env=True) as session: + async with session.ws_connect( + setup.url, + method=setup.method, + timeout=setup.timeout or 10, + headers=setup.headers, + proxy=setup.proxy, + ) as ws: + websocket = WebSocket(request=setup, session=session, websocket=ws) + yield websocket class WebSocket(BaseWebSocket): diff --git a/nonebot/message.py b/nonebot/message.py index a3b41a17..6611598b 100644 --- a/nonebot/message.py +++ b/nonebot/message.py @@ -303,7 +303,12 @@ async def handle_event(bot: "Bot", event: "Event") -> None: return # Trie Match - TrieRule.get_value(bot, event, state) + try: + TrieRule.get_value(bot, event, state) + except Exception as e: + logger.opt(colors=True, exception=e).warning( + "Error while parsing command for event" + ) break_flag = False for priority in sorted(matchers.keys()):