mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
🎨 添加菜单API及优化异常处理
This commit is contained in:
parent
e3d5332bbd
commit
12916e79bb
@ -13,6 +13,7 @@ from zhenxun.utils.enum import PluginType
|
||||
|
||||
from .api.logs import router as ws_log_routes
|
||||
from .api.logs.log_manager import LOG_STORAGE
|
||||
from .api.menu import router as menu_router
|
||||
from .api.tabs.dashboard import router as dashboard_router
|
||||
from .api.tabs.database import router as database_router
|
||||
from .api.tabs.main import router as main_router
|
||||
@ -80,6 +81,7 @@ BaseApiRouter.include_router(manage_router)
|
||||
BaseApiRouter.include_router(database_router)
|
||||
BaseApiRouter.include_router(plugin_router)
|
||||
BaseApiRouter.include_router(system_router)
|
||||
BaseApiRouter.include_router(menu_router)
|
||||
|
||||
|
||||
WsApiRouter = APIRouter(prefix="/zhenxun/socket")
|
||||
|
||||
@ -1 +1,2 @@
|
||||
from .tabs import * # noqa: F403
|
||||
from .menu import * # noqa: F403f
|
||||
from .tabs import * # noqa: F403f
|
||||
|
||||
26
zhenxun/builtin_plugins/web_ui/api/menu/__init__.py
Normal file
26
zhenxun/builtin_plugins/web_ui/api/menu/__init__.py
Normal file
@ -0,0 +1,26 @@
|
||||
from fastapi import APIRouter
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from zhenxun.services.log import logger
|
||||
|
||||
from ...base_model import Result
|
||||
from ...utils import authentication
|
||||
from .data_source import menu_manage
|
||||
from .model import MenuItem
|
||||
|
||||
router = APIRouter(prefix="/menu")
|
||||
|
||||
|
||||
@router.get(
|
||||
"/get_menus",
|
||||
dependencies=[authentication()],
|
||||
response_model=Result[list[MenuItem]],
|
||||
response_class=JSONResponse,
|
||||
deprecated="获取菜单列表", # type: ignore
|
||||
)
|
||||
async def _() -> Result[list[MenuItem]]:
|
||||
try:
|
||||
return Result.ok(menu_manage.get_menus(), "拿到菜单了哦!")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/get_menus 调用错误", "WebUi", e=e)
|
||||
return Result.fail(f"发生了一点错误捏 {type(e)}: {e}")
|
||||
64
zhenxun/builtin_plugins/web_ui/api/menu/data_source.py
Normal file
64
zhenxun/builtin_plugins/web_ui/api/menu/data_source.py
Normal file
@ -0,0 +1,64 @@
|
||||
import ujson as json
|
||||
|
||||
from zhenxun.configs.path_config import DATA_PATH
|
||||
from zhenxun.services.log import logger
|
||||
|
||||
from .model import MenuItem
|
||||
|
||||
|
||||
class MenuManage:
|
||||
def __init__(self) -> None:
|
||||
self.file = DATA_PATH / "web_ui" / "menu.json"
|
||||
self.menu = []
|
||||
if self.file.exists():
|
||||
try:
|
||||
self.menu = json.load(self.file.open(encoding="utf8"))
|
||||
except Exception as e:
|
||||
logger.warning("菜单文件损坏,已重新生成...", "WebUi", e=e)
|
||||
if not self.menu:
|
||||
self.menu = [
|
||||
MenuItem(
|
||||
name="仪表盘",
|
||||
module="dashboard",
|
||||
router="/dashboard",
|
||||
icon="dashboard",
|
||||
default=True,
|
||||
),
|
||||
MenuItem(
|
||||
name="真寻控制台",
|
||||
module="command",
|
||||
router="/command",
|
||||
icon="command",
|
||||
),
|
||||
MenuItem(
|
||||
name="插件列表", module="plugin", router="/plugin", icon="plugin"
|
||||
),
|
||||
MenuItem(
|
||||
name="插件商店", module="store", router="/store", icon="store"
|
||||
),
|
||||
MenuItem(
|
||||
name="好友/群组", module="manage", router="/manage", icon="user"
|
||||
),
|
||||
MenuItem(
|
||||
name="数据库管理",
|
||||
module="database",
|
||||
router="/database",
|
||||
icon="database",
|
||||
),
|
||||
MenuItem(
|
||||
name="系统信息", module="system", router="/system", icon="system"
|
||||
),
|
||||
]
|
||||
self.save()
|
||||
|
||||
def get_menus(self):
|
||||
return self.menu
|
||||
|
||||
def save(self):
|
||||
self.file.parent.mkdir(parents=True, exist_ok=True)
|
||||
temp = [menu.dict() for menu in self.menu]
|
||||
with self.file.open("w", encoding="utf8") as f:
|
||||
json.dump(temp, f, ensure_ascii=False, indent=4)
|
||||
|
||||
|
||||
menu_manage = MenuManage()
|
||||
14
zhenxun/builtin_plugins/web_ui/api/menu/model.py
Normal file
14
zhenxun/builtin_plugins/web_ui/api/menu/model.py
Normal file
@ -0,0 +1,14 @@
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class MenuItem(BaseModel):
|
||||
module: str
|
||||
"""模块名称"""
|
||||
name: str
|
||||
"""菜单名称"""
|
||||
router: str
|
||||
"""路由"""
|
||||
icon: str
|
||||
"""图标"""
|
||||
default: bool = False
|
||||
"""默认选中"""
|
||||
@ -107,7 +107,7 @@ async def _(bot_id: str) -> Result[dict[str, int]]:
|
||||
"group_count": len(await PlatformUtils.get_group_list(bot)),
|
||||
}
|
||||
return Result.ok(data, "拿到信息啦!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/get_fg_count 调用错误", "WebUi", e=e)
|
||||
@ -198,7 +198,7 @@ async def _(param: BotStatusParam):
|
||||
try:
|
||||
await BotConsole.set_bot_status(param.status, param.bot_id)
|
||||
return Result.ok(info="修改bot全局开关成功!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.fail("Bot未初始化...")
|
||||
|
||||
|
||||
|
||||
@ -53,10 +53,10 @@ async def _(bot_id: str) -> Result:
|
||||
group_id=g.group_id, group_name=g.group_name, ava_url=ava_url
|
||||
)
|
||||
)
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error("调用API错误", "/get_group_list", e=e)
|
||||
logger.error(f"{router.prefix}/get_group_list 调用错误", "WebUi", e=e)
|
||||
return Result.fail(f"{type(e)}: {e}")
|
||||
return Result.ok(group_list_result, "拿到了新鲜出炉的数据!")
|
||||
|
||||
@ -101,7 +101,7 @@ async def _(bot_id: str) -> Result[list[Friend]]:
|
||||
result_list,
|
||||
"拿到了新鲜出炉的数据!",
|
||||
)
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error("调用API错误", "/get_group_list", e=e)
|
||||
@ -180,7 +180,7 @@ async def _(param: HandleRequest) -> Result:
|
||||
except NotFoundError:
|
||||
return Result.warning_("未找到此Id请求...")
|
||||
return Result.ok(info="成功处理了请求!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/refuse_request 调用错误", "WebUi", e=e)
|
||||
@ -226,7 +226,7 @@ async def _(param: HandleRequest) -> Result:
|
||||
except ActionFailed:
|
||||
await FgRequest.expire(param.id)
|
||||
return Result.warning_("请求失败,可能该请求已失效或请求数据错误...")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/approve_request 调用错误", "WebUi", e=e)
|
||||
@ -251,7 +251,7 @@ async def _(param: LeaveGroup) -> Result:
|
||||
return Result.warning_("Bot未在该群聊中...")
|
||||
await bot.set_group_leave(group_id=param.group_id)
|
||||
return Result.ok(info="成功处理了请求!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/leave_group 调用错误", "WebUi", e=e)
|
||||
@ -276,7 +276,7 @@ async def _(param: DeleteFriend) -> Result:
|
||||
return Result.warning_("Bot未有其好友...")
|
||||
await bot.delete_friend(user_id=param.user_id)
|
||||
return Result.ok(info="成功处理了请求!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/delete_friend 调用错误", "WebUi", e=e)
|
||||
@ -298,7 +298,7 @@ async def _(bot_id: str, user_id: str) -> Result[UserDetail]:
|
||||
if result
|
||||
else Result.warning_("未找到该好友...")
|
||||
)
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/get_friend_detail 调用错误", "WebUi", e=e)
|
||||
@ -334,7 +334,7 @@ async def _(param: SendMessageParam) -> Result:
|
||||
bot, param.user_id, param.group_id, param.message
|
||||
)
|
||||
return Result.ok("发送成功!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.warning_("指定Bot未连接...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/send_message 调用错误", "WebUi", e=e)
|
||||
|
||||
@ -84,7 +84,7 @@ async def _(param: UpdatePlugin) -> Result:
|
||||
try:
|
||||
await ApiDataSource.update_plugin(param)
|
||||
return Result.ok(info="已经帮你写好啦!")
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.fail("插件数据不存在...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/update_plugin 调用错误", "WebUi", e=e)
|
||||
@ -152,7 +152,7 @@ async def _(module: str) -> Result[PluginDetail]:
|
||||
return Result.ok(
|
||||
await ApiDataSource.get_plugin_detail(module), "已经帮你写好啦!"
|
||||
)
|
||||
except ValueError:
|
||||
except (ValueError, KeyError):
|
||||
return Result.fail("插件数据不存在...")
|
||||
except Exception as e:
|
||||
logger.error(f"{router.prefix}/get_plugin 调用错误", "WebUi", e=e)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user