mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
✨ 优化插件分类逻辑,增加插件ID排序,并更新插件信息返回结构
This commit is contained in:
parent
eec59b98ff
commit
454d80fc3f
@ -52,4 +52,6 @@ async def classify_plugin(
|
|||||||
if not classify.get(menu):
|
if not classify.get(menu):
|
||||||
classify[menu] = []
|
classify[menu] = []
|
||||||
classify[menu].append(handle(bot, plugin, group, is_detail))
|
classify[menu].append(handle(bot, plugin, group, is_detail))
|
||||||
|
for value in classify.values():
|
||||||
|
value.sort(key=lambda x: x.id)
|
||||||
return classify
|
return classify
|
||||||
|
|||||||
@ -21,6 +21,8 @@ class Item(BaseModel):
|
|||||||
"""插件名称"""
|
"""插件名称"""
|
||||||
sta: int
|
sta: int
|
||||||
"""插件状态"""
|
"""插件状态"""
|
||||||
|
id: int
|
||||||
|
"""插件id"""
|
||||||
|
|
||||||
|
|
||||||
class PluginList(BaseModel):
|
class PluginList(BaseModel):
|
||||||
@ -80,10 +82,9 @@ def __handle_item(
|
|||||||
sta = 2
|
sta = 2
|
||||||
if f"{plugin.module}," in group.block_plugin:
|
if f"{plugin.module}," in group.block_plugin:
|
||||||
sta = 1
|
sta = 1
|
||||||
if bot:
|
if bot and f"{plugin.module}," in bot.block_plugins:
|
||||||
if f"{plugin.module}," in bot.block_plugins:
|
sta = 2
|
||||||
sta = 2
|
return Item(plugin_name=plugin.name, sta=sta, id=plugin.id)
|
||||||
return Item(plugin_name=plugin.name, sta=sta)
|
|
||||||
|
|
||||||
|
|
||||||
def build_plugin_data(classify: dict[str, list[Item]]) -> list[dict[str, str]]:
|
def build_plugin_data(classify: dict[str, list[Item]]) -> list[dict[str, str]]:
|
||||||
@ -142,7 +143,7 @@ async def build_html_image(
|
|||||||
template_name="zhenxun_menu.html",
|
template_name="zhenxun_menu.html",
|
||||||
templates={"plugin_list": plugin_list},
|
templates={"plugin_list": plugin_list},
|
||||||
pages={
|
pages={
|
||||||
"viewport": {"width": 1903, "height": 975},
|
"viewport": {"width": 1903, "height": 10},
|
||||||
"base_url": f"file://{TEMPLATE_PATH}",
|
"base_url": f"file://{TEMPLATE_PATH}",
|
||||||
},
|
},
|
||||||
wait=2,
|
wait=2,
|
||||||
|
|||||||
@ -97,68 +97,10 @@ def build_plugin_data(classify: dict[str, list[Item]]) -> list[dict[str, str]]:
|
|||||||
}
|
}
|
||||||
for menu, value in classify.items()
|
for menu, value in classify.items()
|
||||||
]
|
]
|
||||||
plugin_list = build_line_data(plugin_list)
|
plugin_list.insert(0, {"name": menu_key, "items": max_data})
|
||||||
plugin_list.insert(
|
|
||||||
0,
|
|
||||||
build_plugin_line(
|
|
||||||
menu_key if menu_key not in ["normal", "功能"] else "主要功能",
|
|
||||||
max_data,
|
|
||||||
30,
|
|
||||||
100,
|
|
||||||
True,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
return plugin_list
|
|
||||||
|
|
||||||
|
|
||||||
def build_plugin_line(
|
|
||||||
name: str, items: list, left: int, width: int | None = None, is_max: bool = False
|
|
||||||
) -> dict:
|
|
||||||
"""构造插件行数据
|
|
||||||
|
|
||||||
参数:
|
|
||||||
name: 菜单名称
|
|
||||||
items: 插件名称列表
|
|
||||||
left: 左边距
|
|
||||||
width: 总插件长度.
|
|
||||||
is_max: 是否为最大长度的插件菜单
|
|
||||||
|
|
||||||
返回:
|
|
||||||
dict: 插件数据
|
|
||||||
"""
|
|
||||||
_plugins = []
|
|
||||||
width = width or 50
|
|
||||||
if len(items) // 2 > 6 or is_max:
|
|
||||||
width = 100
|
|
||||||
plugin_list1 = []
|
|
||||||
plugin_list2 = []
|
|
||||||
for i in range(len(items)):
|
|
||||||
if i % 2:
|
|
||||||
plugin_list1.append(items[i])
|
|
||||||
else:
|
|
||||||
plugin_list2.append(items[i])
|
|
||||||
_plugins = [(30, 50, plugin_list1), (0, 50, plugin_list2)]
|
|
||||||
else:
|
|
||||||
_plugins = [(left, 100, items)]
|
|
||||||
return {"name": name, "items": _plugins, "width": width}
|
|
||||||
|
|
||||||
|
|
||||||
def build_line_data(plugin_list: list[dict]) -> list[dict]:
|
|
||||||
"""构造插件数据
|
|
||||||
|
|
||||||
参数:
|
|
||||||
plugin_list: 插件列表
|
|
||||||
|
|
||||||
返回:
|
|
||||||
list[dict]: 插件数据
|
|
||||||
"""
|
|
||||||
left = 30
|
|
||||||
data = []
|
|
||||||
for plugin in plugin_list:
|
for plugin in plugin_list:
|
||||||
data.append(build_plugin_line(plugin["name"], plugin["items"], left))
|
plugin["items"].sort(key=lambda x: x.id)
|
||||||
if len(plugin["items"]) // 2 <= 6:
|
return plugin_list
|
||||||
left = 15 if left == 30 else 30
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
async def build_zhenxun_image(
|
async def build_zhenxun_image(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user