mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
perf👌: webui完善数据库管理api
This commit is contained in:
parent
59cb2bee8b
commit
45acf4a094
@ -11,7 +11,7 @@ from configs.config import NICKNAME
|
|||||||
from services.db_context import TestSQL
|
from services.db_context import TestSQL
|
||||||
from utils.utils import get_matchers
|
from utils.utils import get_matchers
|
||||||
|
|
||||||
from ....base_model import QueryModel, Result
|
from ....base_model import BaseResultModel, QueryModel, Result
|
||||||
from ....config import QueryDateType
|
from ....config import QueryDateType
|
||||||
from ....utils import authentication
|
from ....utils import authentication
|
||||||
from .models.model import SqlModel, SqlText
|
from .models.model import SqlModel, SqlText
|
||||||
@ -77,6 +77,7 @@ async def _(sql: SqlText, request: Request) -> Result:
|
|||||||
if sql.sql.lower().startswith("select"):
|
if sql.sql.lower().startswith("select"):
|
||||||
db = Tortoise.get_connection("default")
|
db = Tortoise.get_connection("default")
|
||||||
res = await db.execute_query_dict(sql.sql)
|
res = await db.execute_query_dict(sql.sql)
|
||||||
|
await SqlLog.add(ip or "0.0.0.0", sql.sql, "")
|
||||||
return Result.ok(res, "执行成功啦!")
|
return Result.ok(res, "执行成功啦!")
|
||||||
else:
|
else:
|
||||||
result = await TestSQL.raw(sql.sql)
|
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日志列表")
|
@router.post("/get_sql_log", dependencies=[authentication()], description="sql日志列表")
|
||||||
async def _(query: QueryModel) -> Result:
|
async def _(query: QueryModel) -> Result:
|
||||||
data = await SqlLog.all().offset((query.index - 1) * query.size).limit(query.size)
|
total = await SqlLog.all().count()
|
||||||
return Result.ok(data)
|
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:
|
async def _(plugin_name: Optional[str] = None) -> Result:
|
||||||
if plugin_name:
|
if plugin_name:
|
||||||
return Result.ok(SQL_DICT.get(plugin_name))
|
return Result.ok(SQL_DICT.get(plugin_name))
|
||||||
|
|||||||
@ -14,6 +14,9 @@ class SqlText(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class SqlModel(BaseModel):
|
class SqlModel(BaseModel):
|
||||||
|
"""
|
||||||
|
常用sql
|
||||||
|
"""
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
"""插件中文名称"""
|
"""插件中文名称"""
|
||||||
|
|||||||
@ -51,6 +51,8 @@ GROUP_PATTERN = r'.*?Message (-?\d*) from (\d*)@\[群:(\d*)] "(.*)"'
|
|||||||
|
|
||||||
PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"'
|
PRIVATE_PATTERN = r'.*?Message (-?\d*) from (\d*) "(.*)"'
|
||||||
|
|
||||||
|
AT_PATTERN = r'\[CQ:at,qq=(.*)\]'
|
||||||
|
|
||||||
IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]'
|
IMAGE_PATTERN = r'\[CQ:image,.*,url=(.*);.*?\]'
|
||||||
|
|
||||||
@router.get("/get_group_list", dependencies=[authentication()], description="获取群组列表")
|
@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)
|
msg = r.group(4)
|
||||||
if gid not in ID2NAME:
|
if gid not in ID2NAME:
|
||||||
user = await GroupInfoUser.filter(user_id=uid, group_id=gid).first()
|
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:
|
if msg_id in MSG_LIST:
|
||||||
return
|
return
|
||||||
MSG_LIST.append(msg_id)
|
MSG_LIST.append(msg_id)
|
||||||
@ -423,7 +430,7 @@ async def message_handle(sub_log: str, type: Literal["private", "group"]):
|
|||||||
user_id=uid,
|
user_id=uid,
|
||||||
group_id=gid,
|
group_id=gid,
|
||||||
message=messages,
|
message=messages,
|
||||||
name=ID2NAME[uid],
|
name=ID2NAME.get(uid) or "",
|
||||||
ava_url=AVA_URL.format(uid),
|
ava_url=AVA_URL.format(uid),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -74,6 +74,17 @@ class QueryModel(BaseModel, Generic[T]):
|
|||||||
if size < 1:
|
if size < 1:
|
||||||
raise ValueError("每页数量小于1...")
|
raise ValueError("每页数量小于1...")
|
||||||
return size
|
return size
|
||||||
|
|
||||||
|
|
||||||
|
class BaseResultModel(BaseModel):
|
||||||
|
"""
|
||||||
|
基础返回
|
||||||
|
"""
|
||||||
|
|
||||||
|
total: int
|
||||||
|
"""总页数"""
|
||||||
|
data: Any
|
||||||
|
"""数据"""
|
||||||
|
|
||||||
|
|
||||||
class PluginConfig(BaseModel):
|
class PluginConfig(BaseModel):
|
||||||
@ -89,26 +100,6 @@ class PluginConfig(BaseModel):
|
|||||||
has_type: bool
|
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):
|
class SystemStatus(BaseModel):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user