🐛 修复插件开关有时出现错误

This commit is contained in:
HibiKier 2024-09-05 17:41:33 +08:00
parent c36bb9771c
commit 51371ba954
2 changed files with 82 additions and 90 deletions

3
.gitignore vendored
View File

@ -181,4 +181,5 @@ plugins/activity/
!/resources/image/genshin/alc/back.png !/resources/image/genshin/alc/back.png
!/data/genshin_alc/ !/data/genshin_alc/
.vscode/launch.json .vscode/launch.json
/resources/template/my_info /resources/template/my_info
plugins_/

View File

@ -1,9 +1,9 @@
from zhenxun.models.group_console import GroupConsole
from zhenxun.models.plugin_info import PluginInfo
from zhenxun.models.task_info import TaskInfo from zhenxun.models.task_info import TaskInfo
from zhenxun.models.plugin_info import PluginInfo
from zhenxun.utils.enum import BlockType, PluginType from zhenxun.utils.enum import BlockType, PluginType
from zhenxun.models.group_console import GroupConsole
from zhenxun.utils.exception import GroupInfoNotFound from zhenxun.utils.exception import GroupInfoNotFound
from zhenxun.utils.image_utils import BuildImage, ImageTemplate, RowStyle from zhenxun.utils.image_utils import RowStyle, BuildImage, ImageTemplate
def plugin_row_style(column: str, text: str) -> RowStyle: def plugin_row_style(column: str, text: str) -> RowStyle:
@ -17,16 +17,16 @@ def plugin_row_style(column: str, text: str) -> RowStyle:
RowStyle: RowStyle RowStyle: RowStyle
""" """
style = RowStyle() style = RowStyle()
if column == "全局状态": if (
if text == "开启": column == "全局状态"
style.font_color = "#67C23A" and text == "开启"
else: or column != "全局状态"
style.font_color = "#F56C6C" and column == "加载状态"
if column == "加载状态": and text == "SUCCESS"
if text == "SUCCESS": ):
style.font_color = "#67C23A" style.font_color = "#67C23A"
else: elif column in {"全局状态", "加载状态"}:
style.font_color = "#F56C6C" style.font_color = "#F56C6C"
return style return style
@ -44,22 +44,21 @@ async def build_plugin() -> BuildImage:
"金币花费", "金币花费",
] ]
plugin_list = await PluginInfo.filter(plugin_type__not=PluginType.HIDDEN).all() plugin_list = await PluginInfo.filter(plugin_type__not=PluginType.HIDDEN).all()
column_data = [] column_data = [
for plugin in plugin_list: [
column_data.append( plugin.id,
[ plugin.module,
plugin.id, plugin.name,
plugin.module, "开启" if plugin.status else "关闭",
plugin.name, plugin.block_type,
"开启" if plugin.status else "关闭", "SUCCESS" if plugin.load_status else "ERROR",
plugin.block_type, plugin.menu_type,
"SUCCESS" if plugin.load_status else "ERROR", plugin.author,
plugin.menu_type, plugin.version,
plugin.author, plugin.cost_gold,
plugin.version, ]
plugin.cost_gold, for plugin in plugin_list
] ]
)
return await ImageTemplate.table_page( return await ImageTemplate.table_page(
"Plugin", "Plugin",
"插件状态", "插件状态",
@ -80,11 +79,8 @@ def task_row_style(column: str, text: str) -> RowStyle:
RowStyle: RowStyle RowStyle: RowStyle
""" """
style = RowStyle() style = RowStyle()
if column in ["群组状态", "全局状态"]: if column in {"群组状态", "全局状态"}:
if text == "开启": style.font_color = "#67C23A" if text == "开启" else "#F56C6C"
style.font_color = "#67C23A"
else:
style.font_color = "#F56C6C"
return style return style
@ -159,12 +155,13 @@ class PluginManage:
if plugin_name.isdigit(): if plugin_name.isdigit():
plugin = await PluginInfo.get_or_none(id=int(plugin_name)) plugin = await PluginInfo.get_or_none(id=int(plugin_name))
else: else:
plugin = await PluginInfo.get_or_none(name=plugin_name) plugin = await PluginInfo.get_or_none(name=plugin_name, load_status=True)
if plugin: if plugin:
plugin.default_status = status plugin.default_status = status
await plugin.save(update_fields=["default_status"]) await plugin.save(update_fields=["default_status"])
return f'成功将 {plugin.name} 进群默认状态修改为: {"开启" if status else "关闭"}' status_text = "开启" if status else "关闭"
return f"没有找到这个功能喔..." return f"成功将 {plugin.name} 进群默认状态修改为: {status_text}"
return "没有找到这个功能喔..."
@classmethod @classmethod
async def set_all_plugin_status( async def set_all_plugin_status(
@ -206,7 +203,7 @@ class PluginManage:
return f'成功将此群组所有功能状态修改为: {"开启" if status else "关闭"}' return f'成功将此群组所有功能状态修改为: {"开启" if status else "关闭"}'
return "获取群组失败..." return "获取群组失败..."
await PluginInfo.filter(plugin_type=PluginType.NORMAL).update( await PluginInfo.filter(plugin_type=PluginType.NORMAL).update(
status=status, block_type=BlockType.ALL if not status else None status=status, block_type=None if status else BlockType.ALL
) )
return f'成功将所有功能全局状态修改为: {"开启" if status else "关闭"}' return f'成功将所有功能全局状态修改为: {"开启" if status else "关闭"}'
@ -417,19 +414,18 @@ class PluginManage:
group.block_task = group.block_task.replace(f"{module},", "") group.block_task = group.block_task.replace(f"{module},", "")
await group.save(update_fields=["block_task"]) await group.save(update_fields=["block_task"])
return f"已成功{status_str}全部被动技能!" return f"已成功{status_str}全部被动技能!"
else: elif task := await TaskInfo.get_or_none(name=task_name):
if task := await TaskInfo.get_or_none(name=task_name): group, _ = await GroupConsole.get_or_create(
group, _ = await GroupConsole.get_or_create( group_id=group_id, channel_id__isnull=True
group_id=group_id, channel_id__isnull=True )
) if status:
if status: group.block_task += f"{task.module},"
group.block_task += f"{task.module}," elif f"super:{task.module}," in group.block_task:
else: return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用"
if f"super:{task.module}," in group.block_task: else:
return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" group.block_task = group.block_task.replace(f"{task.module},", "")
group.block_task = group.block_task.replace(f"{task.module},", "") await group.save(update_fields=["block_task"])
await group.save(update_fields=["block_task"]) return f"已成功{status_str} {task_name} 被动技能!"
return f"已成功{status_str} {task_name} 被动技能!"
return "没有找到这个被动技能喔..." return "没有找到这个被动技能喔..."
@classmethod @classmethod
@ -450,12 +446,12 @@ class PluginManage:
if plugin_name.isdigit(): if plugin_name.isdigit():
plugin = await PluginInfo.get_or_none(id=int(plugin_name)) plugin = await PluginInfo.get_or_none(id=int(plugin_name))
else: else:
plugin = await PluginInfo.get_or_none(name=plugin_name) plugin = await PluginInfo.get_or_none(name=plugin_name, load_status=True)
status_str = "开启" if status else "关闭"
if plugin: if plugin:
group, _ = await GroupConsole.get_or_create( group, _ = await GroupConsole.get_or_create(
group_id=group_id, channel_id__isnull=True group_id=group_id, channel_id__isnull=True
) )
status_str = "开启" if status else "关闭"
if status: if status:
if plugin.module in group.block_plugin: if plugin.module in group.block_plugin:
group.block_plugin = group.block_plugin.replace( group.block_plugin = group.block_plugin.replace(
@ -463,11 +459,10 @@ class PluginManage:
) )
await group.save(update_fields=["block_plugin"]) await group.save(update_fields=["block_plugin"])
return f"已成功{status_str} {plugin.name} 功能!" return f"已成功{status_str} {plugin.name} 功能!"
else: elif plugin.module not in group.block_plugin:
if plugin.module not in group.block_plugin: group.block_plugin += f"{plugin.module},"
group.block_plugin += f"{plugin.module}," await group.save(update_fields=["block_plugin"])
await group.save(update_fields=["block_plugin"]) return f"已成功{status_str} {plugin.name} 功能!"
return f"已成功{status_str} {plugin.name} 功能!"
return f"该功能已经{status_str}了喔,不要重复{status_str}..." return f"该功能已经{status_str}了喔,不要重复{status_str}..."
return "没有找到这个功能喔..." return "没有找到这个功能喔..."
@ -485,22 +480,20 @@ class PluginManage:
返回: 返回:
str: 返回信息 str: 返回信息
""" """
if task := await TaskInfo.get_or_none(name=task_name): if not (task := await TaskInfo.get_or_none(name=task_name)):
return "没有找到这个功能喔..."
if group_id:
group, _ = await GroupConsole.get_or_create(
group_id=group_id, channel_id__isnull=True
)
if status:
group.block_task = group.block_task.replace(f"super:{task.module},", "")
else:
group.block_task += f"super:{task.module},"
await group.save(update_fields=["block_task"])
status_str = "开启" if status else "关闭" status_str = "开启" if status else "关闭"
if group_id: return f"已成功将群组 {group_id} 被动技能 {task_name} {status_str}!"
group, _ = await GroupConsole.get_or_create( return "没有找到这个群组喔..."
group_id=group_id, channel_id__isnull=True
)
if status:
group.block_task = group.block_task.replace(
f"super:{task.module},", ""
)
else:
group.block_task += f"super:{task.module},"
await group.save(update_fields=["block_task"])
return f"已成功将群组 {group_id} 被动技能 {task_name} {status_str}!"
return "没有找到这个群组喔..."
return "没有找到这个功能喔..."
@classmethod @classmethod
async def superuser_block( async def superuser_block(
@ -519,7 +512,7 @@ class PluginManage:
if plugin_name.isdigit(): if plugin_name.isdigit():
plugin = await PluginInfo.get_or_none(id=int(plugin_name)) plugin = await PluginInfo.get_or_none(id=int(plugin_name))
else: else:
plugin = await PluginInfo.get_or_none(name=plugin_name) plugin = await PluginInfo.get_or_none(name=plugin_name, load_status=True)
if plugin: if plugin:
if group_id: if group_id:
if group := await GroupConsole.get_or_none( if group := await GroupConsole.get_or_none(
@ -538,13 +531,12 @@ class PluginManage:
await plugin.save(update_fields=["status", "block_type"]) await plugin.save(update_fields=["status", "block_type"])
if not block_type: if not block_type:
return f"已成功将 {plugin.name} 全局启用!" return f"已成功将 {plugin.name} 全局启用!"
else: if block_type == BlockType.ALL:
if block_type == BlockType.ALL: return f"已成功将 {plugin.name} 全局关闭!"
return f"已成功将 {plugin.name} 全局关闭!" if block_type == BlockType.GROUP:
if block_type == BlockType.GROUP: return f"已成功将 {plugin.name} 全局群组关闭!"
return f"已成功将 {plugin.name} 全局群组关闭!" if block_type == BlockType.PRIVATE:
if block_type == BlockType.PRIVATE: return f"已成功将 {plugin.name} 全局私聊关闭!"
return f"已成功将 {plugin.name} 全局私聊关闭!"
return "没有找到这个功能喔..." return "没有找到这个功能喔..."
@classmethod @classmethod
@ -564,7 +556,7 @@ class PluginManage:
if plugin_name.isdigit(): if plugin_name.isdigit():
plugin = await PluginInfo.get_or_none(id=int(plugin_name)) plugin = await PluginInfo.get_or_none(id=int(plugin_name))
else: else:
plugin = await PluginInfo.get_or_none(name=plugin_name) plugin = await PluginInfo.get_or_none(name=plugin_name, load_status=True)
if plugin: if plugin:
if group_id: if group_id:
if group := await GroupConsole.get_or_none( if group := await GroupConsole.get_or_none(
@ -585,11 +577,10 @@ class PluginManage:
await plugin.save(update_fields=["status", "block_type"]) await plugin.save(update_fields=["status", "block_type"])
if not block_type: if not block_type:
return f"已成功将 {plugin.name} 全局启用!" return f"已成功将 {plugin.name} 全局启用!"
else: if block_type == BlockType.ALL:
if block_type == BlockType.ALL: return f"已成功将 {plugin.name} 全局开启!"
return f"已成功将 {plugin.name} 全局开启!" if block_type == BlockType.GROUP:
if block_type == BlockType.GROUP: return f"已成功将 {plugin.name} 全局群组开启!"
return f"已成功将 {plugin.name} 全局群组开启!" if block_type == BlockType.PRIVATE:
if block_type == BlockType.PRIVATE: return f"已成功将 {plugin.name} 全局私聊开启!"
return f"已成功将 {plugin.name} 全局私聊开启!"
return "没有找到这个功能喔..." return "没有找到这个功能喔..."