From 45acf4a0941eaee340d31c95ff971618ffc945bc Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Sun, 14 Jan 2024 17:48:15 +0800 Subject: [PATCH] =?UTF-8?q?perf=F0=9F=91=8C:=20webui=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E7=AE=A1=E7=90=86api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/web_ui/api/tabs/database/__init__.py | 12 ++++--- .../web_ui/api/tabs/database/models/model.py | 3 ++ plugins/web_ui/api/tabs/manage/__init__.py | 11 +++++-- plugins/web_ui/base_model.py | 31 +++++++------------ 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/plugins/web_ui/api/tabs/database/__init__.py b/plugins/web_ui/api/tabs/database/__init__.py index 0f3eb985..da8c74e0 100644 --- a/plugins/web_ui/api/tabs/database/__init__.py +++ b/plugins/web_ui/api/tabs/database/__init__.py @@ -11,7 +11,7 @@ from configs.config import NICKNAME from services.db_context import TestSQL from utils.utils import get_matchers -from ....base_model import QueryModel, Result +from ....base_model import BaseResultModel, QueryModel, Result from ....config import QueryDateType from ....utils import authentication from .models.model import SqlModel, SqlText @@ -77,6 +77,7 @@ async def _(sql: SqlText, request: Request) -> Result: if sql.sql.lower().startswith("select"): db = Tortoise.get_connection("default") res = await db.execute_query_dict(sql.sql) + await SqlLog.add(ip or "0.0.0.0", sql.sql, "") return Result.ok(res, "执行成功啦!") else: result = await TestSQL.raw(sql.sql) @@ -89,11 +90,14 @@ async def _(sql: SqlText, request: Request) -> Result: @router.post("/get_sql_log", dependencies=[authentication()], description="sql日志列表") async def _(query: QueryModel) -> Result: - data = await SqlLog.all().offset((query.index - 1) * query.size).limit(query.size) - return Result.ok(data) + total = await SqlLog.all().count() + if (total % query.size): + total += 1 + data = await SqlLog.all().order_by("-id").offset((query.index - 1) * query.size).limit(query.size) + return Result.ok(BaseResultModel(total=total, data=data)) -@router.get("/get_sql", dependencies=[authentication()], description="常用sql") +@router.get("/get_common_sql", dependencies=[authentication()], description="常用sql") async def _(plugin_name: Optional[str] = None) -> Result: if plugin_name: return Result.ok(SQL_DICT.get(plugin_name)) diff --git a/plugins/web_ui/api/tabs/database/models/model.py b/plugins/web_ui/api/tabs/database/models/model.py index ed78c405..37c682a6 100644 --- a/plugins/web_ui/api/tabs/database/models/model.py +++ b/plugins/web_ui/api/tabs/database/models/model.py @@ -14,6 +14,9 @@ class SqlText(BaseModel): class SqlModel(BaseModel): + """ + 常用sql + """ name: str """插件中文名称""" diff --git a/plugins/web_ui/api/tabs/manage/__init__.py b/plugins/web_ui/api/tabs/manage/__init__.py index e6ce8e96..3bfdf9d5 100644 --- a/plugins/web_ui/api/tabs/manage/__init__.py +++ b/plugins/web_ui/api/tabs/manage/__init__.py @@ -51,6 +51,8 @@ GROUP_PATTERN = r'.*?Message (-?\d*) from (\d*)@\[群:(\d*)] "(.*)"' PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"' +AT_PATTERN = r'\[CQ:at,qq=(.*)\]' + IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]' @router.get("/get_group_list", dependencies=[authentication()], description="获取群组列表") @@ -405,7 +407,12 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]): msg = r.group(4) if gid not in ID2NAME: user = await GroupInfoUser.filter(user_id=uid, group_id=gid).first() - ID2NAME[gid] = user.user_name or user.nickname + ID2NAME[uid] = user.user_name or user.nickname + if at_list := re.findall(AT_PATTERN, msg): + user_list = await GroupInfoUser.filter(user_id__in=at_list, group_id=gid).all() + id2name = {u.user_id: (u.user_name or u.nickname) for u in user_list} + for qq in at_list: + msg = re.sub(rf'\[CQ:at,qq={qq}\]', f"@{id2name[qq] or ''}", msg) if msg_id in MSG_LIST: return MSG_LIST.append(msg_id) @@ -423,7 +430,7 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]): user_id=uid, group_id=gid, message=messages, - name=ID2NAME[uid], + name=ID2NAME.get(uid) or "", ava_url=AVA_URL.format(uid), ) diff --git a/plugins/web_ui/base_model.py b/plugins/web_ui/base_model.py index 2ce1a82f..384d1a7c 100644 --- a/plugins/web_ui/base_model.py +++ b/plugins/web_ui/base_model.py @@ -74,6 +74,17 @@ class QueryModel(BaseModel, Generic[T]): if size < 1: raise ValueError("每页数量小于1...") return size + + +class BaseResultModel(BaseModel): + """ + 基础返回 + """ + + total: int + """总页数""" + data: Any + """数据""" class PluginConfig(BaseModel): @@ -89,26 +100,6 @@ class PluginConfig(BaseModel): has_type: bool -class Plugin(BaseModel): - """ - 插件 - """ - - model: str - """模块名称""" - plugin_settings: Optional[PluginSetting] - """settings""" - plugin_manager: Optional[PluginManager] - """manager""" - plugin_config: Optional[Dict[str, PluginConfig]] - """配置项""" - cd_limit: Optional[PluginCd] - """cd限制""" - block_limit: Optional[PluginBlock] - """阻断限制""" - count_limit: Optional[PluginCount] - """次数限制""" - class SystemStatus(BaseModel): """