🐛 私聊时修改插件时删除私聊帮助

This commit is contained in:
HibiKier 2024-09-07 13:16:41 +08:00
parent 0a5ab83ffe
commit 807b2f6504
2 changed files with 101 additions and 100 deletions

View File

@ -1,16 +1,16 @@
from nonebot.adapters import Bot from nonebot.adapters import Bot
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from nonebot_plugin_alconna import AlconnaQuery, Arparma, Match, Query
from nonebot_plugin_session import EventSession from nonebot_plugin_session import EventSession
from nonebot_plugin_alconna import Match, Query, Arparma, AlconnaQuery
from zhenxun.configs.config import Config
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.enum import BlockType, PluginType from zhenxun.configs.config import Config
from zhenxun.utils.message import MessageUtils from zhenxun.utils.message import MessageUtils
from zhenxun.utils.enum import BlockType, PluginType
from zhenxun.configs.utils import RegisterConfig, PluginExtraData
from ._data_source import PluginManage, build_plugin, build_task from .command import _status_matcher, _group_status_matcher
from .command import _group_status_matcher, _status_matcher from ._data_source import PluginManage, build_task, build_plugin, delete_help_image
base_config = Config.get("plugin_switch") base_config = Config.get("plugin_switch")
@ -40,36 +40,35 @@ __plugin_meta__ = PluginMetadata(
version="0.1", version="0.1",
plugin_type=PluginType.SUPER_AND_ADMIN, plugin_type=PluginType.SUPER_AND_ADMIN,
superuser_help=""" superuser_help="""
超级管理员额外命令 格式:
格式: 插件列表
插件列表 开启/关闭[功能名称] ?[-t ["private", "p", "group", "g"](关闭类型)] ?[-g 群组Id]
开启/关闭[功能名称] ?[-t ["private", "p", "group", "g"](关闭类型)] ?[-g 群组Id]
开启/关闭插件df[功能名称]: 开启/关闭指定插件进群默认状态 开启/关闭插件df[功能名称]: 开启/关闭指定插件进群默认状态
开启/关闭所有插件df: 开启/关闭所有插件进群默认状态 开启/关闭所有插件df: 开启/关闭所有插件进群默认状态
开启/关闭所有插件: 开启/关闭所有插件:
私聊中: 开启/关闭所有插件全局状态 私聊中: 开启/关闭所有插件全局状态
群组中: 开启/关闭当前群组所有插件状态 群组中: 开启/关闭当前群组所有插件状态
开启/关闭群被动[name] ?[-g [group_id]] 开启/关闭群被动[name] ?[-g [group_id]]
私聊中: 开启/关闭全局指定的被动状态 私聊中: 开启/关闭全局指定的被动状态
群组中: 开启/关闭当前群组指定的被动状态 群组中: 开启/关闭当前群组指定的被动状态
示例: 示例:
关闭群被动早晚安 关闭群被动早晚安
关闭群被动早晚安 -g 12355555 关闭群被动早晚安 -g 12355555
开启/关闭所有群被动 ?[-g [group_id]] 开启/关闭所有群被动 ?[-g [group_id]]
私聊中: 开启/关闭全局或指定群组被动状态 私聊中: 开启/关闭全局或指定群组被动状态
示例: 示例:
开启所有群被动: 开启全局所有被动 开启所有群被动: 开启全局所有被动
开启所有群被动 -g 12345678: 开启群组12345678所有被动 开启所有群被动 -g 12345678: 开启群组12345678所有被动
私聊下: 私聊下:
示例: 示例:
开启签到 : 全局开启签到 开启签到 : 全局开启签到
关闭签到 : 全局关闭签到 关闭签到 : 全局关闭签到
关闭签到 p : 全局私聊关闭签到 关闭签到 p : 全局私聊关闭签到
关闭签到 -g 12345678 : 关闭群组12345678的签到功能(普通管理员无法开启) 关闭签到 -g 12345678 : 关闭群组12345678的签到功能(普通管理员无法开启)
""", """,
admin_level=base_config.get("CHANGE_GROUP_SWITCH_LEVEL", 2), admin_level=base_config.get("CHANGE_GROUP_SWITCH_LEVEL", 2),
configs=[ configs=[
@ -117,8 +116,7 @@ async def _(
if not all.result and not plugin_name.available: if not all.result and not plugin_name.available:
await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) await MessageUtils.build_message("请输入功能名称").finish(reply_to=True)
name = plugin_name.result name = plugin_name.result
gid = session.id3 or session.id2 if gid := session.id3 or session.id2:
if gid:
"""修改当前群组的数据""" """修改当前群组的数据"""
if task.result: if task.result:
if all.result: if all.result:
@ -129,31 +127,28 @@ async def _(
logger.info( logger.info(
f"开启群组被动 {name}", arparma.header_result, session=session f"开启群组被动 {name}", arparma.header_result, session=session
) )
elif session.id1 in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改"""
result = await PluginManage.set_default_status(name, True)
logger.info(
f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result,
session=session,
)
elif all.result:
"""所有插件"""
result = await PluginManage.set_all_plugin_status(
True, default_status.result, gid
)
logger.info(
"开启群组中全部功能",
arparma.header_result,
session=session,
)
else: else:
if session.id1 in bot.config.superusers and default_status.result: result = await PluginManage.unblock_group_plugin(name, gid)
"""单个插件的进群默认修改""" logger.info(f"开启功能 {name}", arparma.header_result, session=session)
result = await PluginManage.set_default_status(name, True) delete_help_image(gid)
logger.info(
f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result,
session=session,
)
else:
if all.result:
"""所有插件"""
result = await PluginManage.set_all_plugin_status(
True, default_status.result, gid
)
logger.info(
"开启群组中全部功能",
arparma.header_result,
session=session,
)
else:
result = await PluginManage.unblock_group_plugin(name, gid)
logger.info(
f"开启功能 {name}", arparma.header_result, session=session
)
await MessageUtils.build_message(result).finish(reply_to=True) await MessageUtils.build_message(result).finish(reply_to=True)
elif session.id1 in bot.config.superusers: elif session.id1 in bot.config.superusers:
"""私聊""" """私聊"""
@ -170,7 +165,8 @@ async def _(
True, default_status.result, group_id True, default_status.result, group_id
) )
logger.info( logger.info(
f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", "超级用户开启全部功能全局开关"
f" {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result, arparma.header_result,
session=session, session=session,
) )
@ -204,7 +200,6 @@ async def _(
arparma.header_result, arparma.header_result,
session=session, session=session,
) )
await MessageUtils.build_message(result).finish(reply_to=True)
else: else:
result = await PluginManage.superuser_unblock(name, None, group_id) result = await PluginManage.superuser_unblock(name, None, group_id)
logger.info( logger.info(
@ -213,7 +208,8 @@ async def _(
session=session, session=session,
target=group_id, target=group_id,
) )
await MessageUtils.build_message(result).finish(reply_to=True) delete_help_image()
await MessageUtils.build_message(result).finish(reply_to=True)
@_status_matcher.assign("close") @_status_matcher.assign("close")
@ -231,43 +227,35 @@ async def _(
if not all.result and not plugin_name.available: if not all.result and not plugin_name.available:
await MessageUtils.build_message("请输入功能名称").finish(reply_to=True) await MessageUtils.build_message("请输入功能名称").finish(reply_to=True)
name = plugin_name.result name = plugin_name.result
gid = session.id3 or session.id2 if gid := session.id3 or session.id2:
if gid:
"""修改当前群组的数据""" """修改当前群组的数据"""
if task.result: if task.result:
if all.result: if all.result:
result = await PluginManage.block_group_all_task(gid) result = await PluginManage.block_group_all_task(gid)
logger.info(f"开启所有群组被动", arparma.header_result, session=session) logger.info("开启所有群组被动", arparma.header_result, session=session)
else: else:
result = await PluginManage.block_group_task(name, gid) result = await PluginManage.block_group_task(name, gid)
logger.info( logger.info(
f"关闭群组被动 {name}", arparma.header_result, session=session f"关闭群组被动 {name}", arparma.header_result, session=session
) )
elif session.id1 in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改"""
result = await PluginManage.set_default_status(name, False)
logger.info(
f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result,
session=session,
)
elif all.result:
"""所有插件"""
result = await PluginManage.set_all_plugin_status(
False, default_status.result, gid
)
logger.info("关闭群组中全部功能", arparma.header_result, session=session)
else: else:
if session.id1 in bot.config.superusers and default_status.result: result = await PluginManage.block_group_plugin(name, gid)
"""单个插件的进群默认修改""" logger.info(f"关闭功能 {name}", arparma.header_result, session=session)
result = await PluginManage.set_default_status(name, False) delete_help_image(gid)
logger.info(
f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result,
session=session,
)
else:
if all.result:
"""所有插件"""
result = await PluginManage.set_all_plugin_status(
False, default_status.result, gid
)
logger.info(
f"关闭群组中全部功能",
arparma.header_result,
session=session,
)
else:
result = await PluginManage.block_group_plugin(name, gid)
logger.info(
f"关闭功能 {name}", arparma.header_result, session=session
)
await MessageUtils.build_message(result).finish(reply_to=True) await MessageUtils.build_message(result).finish(reply_to=True)
elif session.id1 in bot.config.superusers: elif session.id1 in bot.config.superusers:
group_id = group.result if group.available else None group_id = group.result if group.available else None
@ -283,7 +271,8 @@ async def _(
False, default_status.result, group_id False, default_status.result, group_id
) )
logger.info( logger.info(
f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}", "超级用户关闭全部功能全局开关"
f" {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result, arparma.header_result,
session=session, session=session,
) )
@ -317,13 +306,13 @@ async def _(
arparma.header_result, arparma.header_result,
session=session, session=session,
) )
await MessageUtils.build_message(result).finish(reply_to=True)
else: else:
_type = BlockType.ALL _type = BlockType.ALL
if block_type.available: if block_type.result in ["p", "private"]:
if block_type.result in ["p", "private"]: if block_type.available:
_type = BlockType.PRIVATE _type = BlockType.PRIVATE
elif block_type.result in ["g", "group"]: elif block_type.result in ["g", "group"]:
if block_type.available:
_type = BlockType.GROUP _type = BlockType.GROUP
result = await PluginManage.superuser_block(name, _type, group_id) result = await PluginManage.superuser_block(name, _type, group_id)
logger.info( logger.info(
@ -332,7 +321,8 @@ async def _(
session=session, session=session,
target=group_id, target=group_id,
) )
await MessageUtils.build_message(result).finish(reply_to=True) delete_help_image()
await MessageUtils.build_message(result).finish(reply_to=True)
@_group_status_matcher.handle() @_group_status_matcher.handle()
@ -362,11 +352,7 @@ async def _(
): ):
image = await build_task(session.id3 or session.id2) image = await build_task(session.id3 or session.id2)
if image: if image:
logger.info( logger.info("查看群被动列表", arparma.header_result, session=session)
f"查看群被动列表",
arparma.header_result,
session=session,
)
await MessageUtils.build_message(image).finish(reply_to=True) await MessageUtils.build_message(image).finish(reply_to=True)
else: else:
await MessageUtils.build_message("获取群被动任务失败...").finish(reply_to=True) await MessageUtils.build_message("获取群被动任务失败...").finish(reply_to=True)

View File

@ -3,8 +3,23 @@ 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.models.group_console import GroupConsole
from zhenxun.utils.exception import GroupInfoNotFound from zhenxun.utils.exception import GroupInfoNotFound
from zhenxun.configs.path_config import DATA_PATH, IMAGE_PATH
from zhenxun.utils.image_utils import RowStyle, BuildImage, ImageTemplate from zhenxun.utils.image_utils import RowStyle, BuildImage, ImageTemplate
HELP_FILE = IMAGE_PATH / "SIMPLE_HELP.png"
GROUP_HELP_PATH = DATA_PATH / "group_help"
def delete_help_image(gid: str | None = None):
"""删除帮助图片"""
if gid:
file = GROUP_HELP_PATH / f"{gid}.png"
if file.exists():
file.unlink()
elif HELP_FILE.exists():
HELP_FILE.unlink()
def plugin_row_style(column: str, text: str) -> RowStyle: def plugin_row_style(column: str, text: str) -> RowStyle:
"""被动技能文本风格 """被动技能文本风格
@ -421,7 +436,7 @@ class PluginManage:
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: elif f"super:{task.module}," in group.block_task:
return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用" # noqa: E501
else: else:
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"])