diff --git a/.gitignore b/.gitignore
index 7618c6b..e938843 100644
--- a/.gitignore
+++ b/.gitignore
@@ -668,3 +668,4 @@ GsData.db
GenshinUID
data
plugins
+logs
diff --git a/gsuid_core/bot.py b/gsuid_core/bot.py
index ee083df..8465212 100644
--- a/gsuid_core/bot.py
+++ b/gsuid_core/bot.py
@@ -56,12 +56,8 @@ class _Bot:
async def _process(self):
while True:
data = await self.queue.get()
- task = asyncio.create_task(data)
- self.bg_tasks.add(task)
- try:
- task.add_done_callback(lambda _: self.bg_tasks.discard(task))
- except Exception as e:
- logger.error(e)
+ asyncio.create_task(data)
+ self.queue.task_done()
class Bot:
diff --git a/gsuid_core/client.py b/gsuid_core/client.py
index 3ece7df..14f9936 100644
--- a/gsuid_core/client.py
+++ b/gsuid_core/client.py
@@ -34,17 +34,22 @@ class GsClient:
async def send_msg(self):
while True:
intent = await self._input()
- if intent == '全匹配测试':
- user_id = '55551111'
+ if intent == '图片测试':
+ content = [
+ Message(
+ type='file',
+ data='xxx.json|XAclpWfLF5d66dtrHx8cqq8E+',
+ )
+ ]
else:
- user_id = '51'
+ content = [Message(type='text', data=intent)]
msg = MessageReceive(
bot_id='Nonebot',
user_type='direct',
user_pm=2,
group_id=None,
- user_id=user_id,
- content=[Message(type='text', data=intent)],
+ user_id='51',
+ content=content,
)
msg_send = msgjson.encode(msg)
await self.ws.send(msg_send)
diff --git a/gsuid_core/data_store.py b/gsuid_core/data_store.py
index 5901ec5..1e45bfa 100644
--- a/gsuid_core/data_store.py
+++ b/gsuid_core/data_store.py
@@ -1,9 +1,16 @@
from pathlib import Path
+from typing import Optional
gs_data_path = Path(__file__).parents[1] / 'data'
-def get_res_path() -> Path:
- if not gs_data_path.exists():
- gs_data_path.mkdir()
- return gs_data_path
+def get_res_path(_path: Optional[str] = None) -> Path:
+ if _path:
+ path = gs_data_path / _path
+ else:
+ path = gs_data_path
+
+ if not path.exists():
+ path.mkdir()
+
+ return path
diff --git a/gsuid_core/handler.py b/gsuid_core/handler.py
index 9648cbb..908f53e 100644
--- a/gsuid_core/handler.py
+++ b/gsuid_core/handler.py
@@ -65,7 +65,7 @@ async def handle_event(ws: _Bot, msg: MessageReceive):
# 获取用户权限,越小越高
user_pm = await get_user_pml(msg)
event = await msg_process(msg)
- logger.info(f'[收到事件] {event}')
+ logger.info('[收到事件]', event=event)
valid_event: Dict[Trigger, int] = {}
pending = [
_check_command(
diff --git a/gsuid_core/logger.py b/gsuid_core/logger.py
index 9fd2a56..99092bb 100644
--- a/gsuid_core/logger.py
+++ b/gsuid_core/logger.py
@@ -6,13 +6,15 @@ from typing import TYPE_CHECKING
import loguru
from gsuid_core.config import core_config
+from gsuid_core.models import Event, Message
+from gsuid_core.data_store import get_res_path
if TYPE_CHECKING:
# avoid sphinx autodoc resolve annotation failed
# because loguru module do not have `Logger` class actually
from loguru import Logger
-logger: "Logger" = loguru.logger
+logger: 'Logger' = loguru.logger
# https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
@@ -33,23 +35,59 @@ class LoguruHandler(logging.Handler): # pragma: no cover
)
-FORMAT = (
- "{time:MM-DD HH:mm:ss} "
- "[{level}] "
- "{name} | "
- # "{function}:{line}| "
- "{message}"
-)
+def format_event(record):
+ if 'event' in record['extra']:
+ event: Event = record['extra']['event']
+ if event.file and event.file_type != 'url':
+ file = f'{event.file[:20]}...(base64)'
+ content = [Message('file', f'{event.file_name}|{file}')]
+ else:
+ file = event.file
+ content = event.content
+ message = (
+ f'[Event] '
+ f'raw_text={event.raw_text}, '
+ f'command={event.command}, '
+ f'text={event.text}, '
+ f'image={event.image}, '
+ f'at={event.at}, '
+ f'image_list={event.image}, '
+ f'at_list={event.at_list}, '
+ f'is_tome={event.is_tome}, '
+ f'reply={event.reply}, '
+ f'file_name={event.file_name}, '
+ f'file_type={event.file_type}, '
+ f'file={file}'
+ f' | [Receive] '
+ f'bot_id={event.bot_id}, '
+ f'bot_self_id={event.bot_self_id}, '
+ f'msg_id={event.msg_id}, '
+ f'user_type={event.user_type}, '
+ f'group_id={event.group_id}, '
+ f'user_id={event.user_id}, '
+ f'user_pm={event.user_pm}, '
+ f'content={content}, '
+ )
+ else:
+ message = '{message}'
-LEVEL: str = core_config.get_config("log").get("level", "INFO")
+ time = '{time:MM-DD HH:mm:ss}'
+ level = '[{level}]'
+ def_name = '{name}'
+ return f'{time} {level} {def_name} | {message} \n'
+
+
+LEVEL: str = core_config.get_config('log').get('level', 'INFO')
logger.remove()
-logger_id = logger.add(sys.stdout, level=LEVEL, diagnose=False, format=FORMAT)
+logger_id = logger.add(
+ sys.stdout, level=LEVEL, diagnose=False, format=format_event
+)
logger.add(
- "logs/{time:YYYY-MM-DD}.log",
+ sink=get_res_path() / 'logs/{time:YYYY-MM-DD}.log',
+ format=format_event,
rotation=datetime.time(),
level=LEVEL,
diagnose=False,
- format=FORMAT,
)