🐛 修复被动的默认开关指令

This commit is contained in:
HibiKier 2025-06-30 21:54:49 +08:00
parent 8b9ae7255b
commit 2ca735598f
3 changed files with 116 additions and 64 deletions

View File

@ -1,7 +1,7 @@
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_alconna import AlconnaQuery, Arparma, Match, Query
from nonebot_plugin_session import EventSession from nonebot_plugin_uninfo import Uninfo
from zhenxun.configs.config import Config from zhenxun.configs.config import Config
from zhenxun.configs.utils import PluginExtraData, RegisterConfig from zhenxun.configs.utils import PluginExtraData, RegisterConfig
@ -9,7 +9,7 @@ from zhenxun.services.log import logger
from zhenxun.utils.enum import BlockType, PluginType from zhenxun.utils.enum import BlockType, PluginType
from zhenxun.utils.message import MessageUtils from zhenxun.utils.message import MessageUtils
from ._data_source import PluginManage, build_plugin, build_task, delete_help_image from ._data_source import PluginManager, build_plugin, build_task, delete_help_image
from .command import _group_status_matcher, _status_matcher from .command import _group_status_matcher, _status_matcher
base_config = Config.get("plugin_switch") base_config = Config.get("plugin_switch")
@ -57,6 +57,11 @@ __plugin_meta__ = PluginMetadata(
关闭群被动早晚安 关闭群被动早晚安
关闭群被动早晚安 -g 12355555 关闭群被动早晚安 -g 12355555
开启/关闭默认群被动 [被动名称]
私聊下: 开启/关闭群被动默认状态
示例:
关闭默认群被动 早晚安
开启/关闭所有群被动 ?[-g [group_id]] 开启/关闭所有群被动 ?[-g [group_id]]
私聊中: 开启/关闭全局或指定群组被动状态 私聊中: 开启/关闭全局或指定群组被动状态
示例: 示例:
@ -87,10 +92,10 @@ __plugin_meta__ = PluginMetadata(
@_status_matcher.assign("$main") @_status_matcher.assign("$main")
async def _( async def _(
bot: Bot, bot: Bot,
session: EventSession, session: Uninfo,
arparma: Arparma, arparma: Arparma,
): ):
if session.id1 in bot.config.superusers: if session.user.id in bot.config.superusers:
image = await build_plugin() image = await build_plugin()
logger.info( logger.info(
"查看功能列表", "查看功能列表",
@ -105,7 +110,7 @@ async def _(
@_status_matcher.assign("open") @_status_matcher.assign("open")
async def _( async def _(
bot: Bot, bot: Bot,
session: EventSession, session: Uninfo,
arparma: Arparma, arparma: Arparma,
plugin_name: Match[str], plugin_name: Match[str],
group: Match[str], group: Match[str],
@ -114,22 +119,23 @@ async def _(
all: Query[bool] = AlconnaQuery("all.value", False), all: Query[bool] = AlconnaQuery("all.value", False),
): ):
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
if gid := session.id3 or session.id2: if session.group:
group_id = session.group.id
"""修改当前群组的数据""" """修改当前群组的数据"""
if task.result: if task.result:
if all.result: if all.result:
result = await PluginManage.unblock_group_all_task(gid) result = await PluginManager.unblock_group_all_task(group_id)
logger.info("开启所有群组被动", arparma.header_result, session=session) logger.info("开启所有群组被动", arparma.header_result, session=session)
else: else:
result = await PluginManage.unblock_group_task(name, gid) result = await PluginManager.unblock_group_task(name, group_id)
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: elif session.user.id in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改""" """单个插件的进群默认修改"""
result = await PluginManage.set_default_status(name, True) result = await PluginManager.set_default_status(name, True)
logger.info( logger.info(
f"超级用户开启 {name} 功能进群默认开关", f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result, arparma.header_result,
@ -137,8 +143,8 @@ async def _(
) )
elif all.result: elif all.result:
"""所有插件""" """所有插件"""
result = await PluginManage.set_all_plugin_status( result = await PluginManager.set_all_plugin_status(
True, default_status.result, gid True, default_status.result, group_id
) )
logger.info( logger.info(
"开启群组中全部功能", "开启群组中全部功能",
@ -146,22 +152,24 @@ async def _(
session=session, session=session,
) )
else: else:
result = await PluginManage.unblock_group_plugin(name, gid) result = await PluginManager.unblock_group_plugin(name, group_id)
logger.info(f"开启功能 {name}", arparma.header_result, session=session) logger.info(f"开启功能 {name}", arparma.header_result, session=session)
delete_help_image(gid) delete_help_image(group_id)
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.user.id in bot.config.superusers:
"""私聊""" """私聊"""
group_id = group.result if group.available else None group_id = group.result if group.available else None
if all.result: if all.result:
if task.result: if task.result:
"""关闭全局或指定群全部被动""" """关闭全局或指定群全部被动"""
if group_id: if group_id:
result = await PluginManage.unblock_group_all_task(group_id) result = await PluginManager.unblock_group_all_task(group_id)
else: else:
result = await PluginManage.unblock_global_all_task() result = await PluginManager.unblock_global_all_task(
default_status.result
)
else: else:
result = await PluginManage.set_all_plugin_status( result = await PluginManager.set_all_plugin_status(
True, default_status.result, group_id True, default_status.result, group_id
) )
logger.info( logger.info(
@ -171,8 +179,8 @@ async def _(
session=session, session=session,
) )
await MessageUtils.build_message(result).finish(reply_to=True) await MessageUtils.build_message(result).finish(reply_to=True)
if default_status.result: if default_status.result and not task.result:
result = await PluginManage.set_default_status(name, True) result = await PluginManager.set_default_status(name, True)
logger.info( logger.info(
f"超级用户开启 {name} 功能进群默认开关", f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result, arparma.header_result,
@ -186,7 +194,7 @@ async def _(
name = split_list[0] name = split_list[0]
group_id = split_list[1] group_id = split_list[1]
if group_id: if group_id:
result = await PluginManage.superuser_task_handle(name, group_id, True) result = await PluginManager.superuser_task_handle(name, group_id, True)
logger.info( logger.info(
f"超级用户开启被动技能 {name}", f"超级用户开启被动技能 {name}",
arparma.header_result, arparma.header_result,
@ -194,14 +202,16 @@ async def _(
target=group_id, target=group_id,
) )
else: else:
result = await PluginManage.unblock_global_task(name) result = await PluginManager.unblock_global_task(
name, default_status.result
)
logger.info( logger.info(
f"超级用户开启全局被动技能 {name}", f"超级用户开启全局被动技能 {name}",
arparma.header_result, arparma.header_result,
session=session, session=session,
) )
else: else:
result = await PluginManage.superuser_unblock(name, None, group_id) result = await PluginManager.superuser_unblock(name, None, group_id)
logger.info( logger.info(
f"超级用户开启功能 {name}", f"超级用户开启功能 {name}",
arparma.header_result, arparma.header_result,
@ -215,7 +225,7 @@ async def _(
@_status_matcher.assign("close") @_status_matcher.assign("close")
async def _( async def _(
bot: Bot, bot: Bot,
session: EventSession, session: Uninfo,
arparma: Arparma, arparma: Arparma,
plugin_name: Match[str], plugin_name: Match[str],
block_type: Match[str], block_type: Match[str],
@ -225,22 +235,23 @@ async def _(
all: Query[bool] = AlconnaQuery("all.value", False), all: Query[bool] = AlconnaQuery("all.value", False),
): ):
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
if gid := session.id3 or session.id2: if session.group:
group_id = session.group.id
"""修改当前群组的数据""" """修改当前群组的数据"""
if task.result: if task.result:
if all.result: if all.result:
result = await PluginManage.block_group_all_task(gid) result = await PluginManager.block_group_all_task(group_id)
logger.info("开启所有群组被动", arparma.header_result, session=session) logger.info("开启所有群组被动", arparma.header_result, session=session)
else: else:
result = await PluginManage.block_group_task(name, gid) result = await PluginManager.block_group_task(name, group_id)
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: elif session.user.id in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改""" """单个插件的进群默认修改"""
result = await PluginManage.set_default_status(name, False) result = await PluginManager.set_default_status(name, False)
logger.info( logger.info(
f"超级用户开启 {name} 功能进群默认开关", f"超级用户开启 {name} 功能进群默认开关",
arparma.header_result, arparma.header_result,
@ -248,26 +259,28 @@ async def _(
) )
elif all.result: elif all.result:
"""所有插件""" """所有插件"""
result = await PluginManage.set_all_plugin_status( result = await PluginManager.set_all_plugin_status(
False, default_status.result, gid False, default_status.result, group_id
) )
logger.info("关闭群组中全部功能", arparma.header_result, session=session) logger.info("关闭群组中全部功能", arparma.header_result, session=session)
else: else:
result = await PluginManage.block_group_plugin(name, gid) result = await PluginManager.block_group_plugin(name, group_id)
logger.info(f"关闭功能 {name}", arparma.header_result, session=session) logger.info(f"关闭功能 {name}", arparma.header_result, session=session)
delete_help_image(gid) delete_help_image(group_id)
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.user.id in bot.config.superusers:
group_id = group.result if group.available else None group_id = group.result if group.available else None
if all.result: if all.result:
if task.result: if task.result:
"""关闭全局或指定群全部被动""" """关闭全局或指定群全部被动"""
if group_id: if group_id:
result = await PluginManage.block_group_all_task(group_id) result = await PluginManager.block_group_all_task(group_id)
else: else:
result = await PluginManage.block_global_all_task() result = await PluginManager.block_global_all_task(
default_status.result
)
else: else:
result = await PluginManage.set_all_plugin_status( result = await PluginManager.set_all_plugin_status(
False, default_status.result, group_id False, default_status.result, group_id
) )
logger.info( logger.info(
@ -277,8 +290,8 @@ async def _(
session=session, session=session,
) )
await MessageUtils.build_message(result).finish(reply_to=True) await MessageUtils.build_message(result).finish(reply_to=True)
if default_status.result: if default_status.result and not task.result:
result = await PluginManage.set_default_status(name, False) result = await PluginManager.set_default_status(name, False)
logger.info( logger.info(
f"超级用户关闭 {name} 功能进群默认开关", f"超级用户关闭 {name} 功能进群默认开关",
arparma.header_result, arparma.header_result,
@ -292,7 +305,9 @@ async def _(
name = split_list[0] name = split_list[0]
group_id = split_list[1] group_id = split_list[1]
if group_id: if group_id:
result = await PluginManage.superuser_task_handle(name, group_id, False) result = await PluginManager.superuser_task_handle(
name, group_id, False
)
logger.info( logger.info(
f"超级用户关闭被动技能 {name}", f"超级用户关闭被动技能 {name}",
arparma.header_result, arparma.header_result,
@ -300,7 +315,9 @@ async def _(
target=group_id, target=group_id,
) )
else: else:
result = await PluginManage.block_global_task(name) result = await PluginManager.block_global_task(
name, default_status.result
)
logger.info( logger.info(
f"超级用户关闭全局被动技能 {name}", f"超级用户关闭全局被动技能 {name}",
arparma.header_result, arparma.header_result,
@ -314,7 +331,7 @@ async def _(
elif block_type.result in ["g", "group"]: elif block_type.result in ["g", "group"]:
if block_type.available: if block_type.available:
_type = BlockType.GROUP _type = BlockType.GROUP
result = await PluginManage.superuser_block(name, _type, group_id) result = await PluginManager.superuser_block(name, _type, group_id)
logger.info( logger.info(
f"超级用户关闭功能 {name}, 禁用类型: {_type}", f"超级用户关闭功能 {name}, 禁用类型: {_type}",
arparma.header_result, arparma.header_result,
@ -327,19 +344,20 @@ async def _(
@_group_status_matcher.handle() @_group_status_matcher.handle()
async def _( async def _(
session: EventSession, session: Uninfo,
arparma: Arparma, arparma: Arparma,
status: str, status: str,
): ):
if gid := session.id3 or session.id2: if session.group:
group_id = session.group.id
if status == "sleep": if status == "sleep":
await PluginManage.sleep(gid) await PluginManager.sleep(group_id)
logger.info("进行休眠", arparma.header_result, session=session) logger.info("进行休眠", arparma.header_result, session=session)
await MessageUtils.build_message("那我先睡觉了...").finish() await MessageUtils.build_message("那我先睡觉了...").finish()
else: else:
if await PluginManage.is_wake(gid): if await PluginManager.is_wake(group_id):
await MessageUtils.build_message("我还醒着呢!").finish() await MessageUtils.build_message("我还醒着呢!").finish()
await PluginManage.wake(gid) await PluginManager.wake(group_id)
logger.info("醒来", arparma.header_result, session=session) logger.info("醒来", arparma.header_result, session=session)
await MessageUtils.build_message("呜..醒来了...").finish() await MessageUtils.build_message("呜..醒来了...").finish()
return MessageUtils.build_message("群组id为空...").send() return MessageUtils.build_message("群组id为空...").send()
@ -347,10 +365,10 @@ async def _(
@_status_matcher.assign("task") @_status_matcher.assign("task")
async def _( async def _(
session: EventSession, session: Uninfo,
arparma: Arparma, arparma: Arparma,
): ):
image = await build_task(session.id3 or session.id2) image = await build_task(session.group.id if session.group else None)
if image: if image:
logger.info("查看群被动列表", arparma.header_result, session=session) logger.info("查看群被动列表", arparma.header_result, session=session)
await MessageUtils.build_message(image).finish(reply_to=True) await MessageUtils.build_message(image).finish(reply_to=True)

View File

@ -155,7 +155,7 @@ async def build_task(group_id: str | None) -> BuildImage:
) )
class PluginManage: class PluginManager:
@classmethod @classmethod
async def set_default_status(cls, plugin_name: str, status: bool) -> str: async def set_default_status(cls, plugin_name: str, status: bool) -> str:
"""设置插件进群默认状态 """设置插件进群默认状态
@ -342,17 +342,21 @@ class PluginManage:
return await cls._change_group_task("", group_id, True, True) return await cls._change_group_task("", group_id, True, True)
@classmethod @classmethod
async def block_global_all_task(cls) -> str: async def block_global_all_task(cls, is_default: bool) -> str:
"""禁用全局被动技能 """禁用全局被动技能
返回: 返回:
str: 返回信息 str: 返回信息
""" """
await TaskInfo.all().update(status=False) if is_default:
return "已全局禁用所有被动状态" await TaskInfo.all().update(default_status=False)
return "已禁用所有被动进群默认状态"
else:
await TaskInfo.all().update(status=False)
return "已全局禁用所有被动状态"
@classmethod @classmethod
async def block_global_task(cls, name: str) -> str: async def block_global_task(cls, name: str, is_default: bool = False) -> str:
"""禁用全局被动技能 """禁用全局被动技能
参数: 参数:
@ -361,31 +365,47 @@ class PluginManage:
返回: 返回:
str: 返回信息 str: 返回信息
""" """
await TaskInfo.filter(name=name).update(status=False) if is_default:
return f"已全局禁用被动状态 {name}" await TaskInfo.filter(name=name).update(default_status=False)
return f"已禁用被动进群默认状态 {name}"
else:
await TaskInfo.filter(name=name).update(status=False)
return f"已全局禁用被动状态 {name}"
@classmethod @classmethod
async def unblock_global_all_task(cls) -> str: async def unblock_global_all_task(cls, is_default: bool) -> str:
"""开启全局被动技能 """开启全局被动技能
参数:
is_default: 是否为默认状态
返回: 返回:
str: 返回信息 str: 返回信息
""" """
await TaskInfo.all().update(status=True) if is_default:
return "已全局开启所有被动状态" await TaskInfo.all().update(default_status=True)
return "已开启所有被动进群默认状态"
else:
await TaskInfo.all().update(status=True)
return "已全局开启所有被动状态"
@classmethod @classmethod
async def unblock_global_task(cls, name: str) -> str: async def unblock_global_task(cls, name: str, is_default: bool = False) -> str:
"""开启全局被动技能 """开启全局被动技能
参数: 参数:
name: 被动技能名称 name: 被动技能名称
is_default: 是否为默认状态
返回: 返回:
str: 返回信息 str: 返回信息
""" """
await TaskInfo.filter(name=name).update(status=True) if is_default:
return f"已全局开启被动状态 {name}" await TaskInfo.filter(name=name).update(default_status=True)
return f"已开启被动进群默认状态 {name}"
else:
await TaskInfo.filter(name=name).update(status=True)
return f"已全局开启被动状态 {name}"
@classmethod @classmethod
async def unblock_group_plugin(cls, plugin_name: str, group_id: str) -> str: async def unblock_group_plugin(cls, plugin_name: str, group_id: str) -> str:

View File

@ -73,6 +73,20 @@ _status_matcher.shortcut(
prefix=True, prefix=True,
) )
_status_matcher.shortcut(
r"开启(所有|全部)默认群被动",
command="switch",
arguments=["open", "--task", "--all", "-df"],
prefix=True,
)
_status_matcher.shortcut(
r"关闭(所有|全部)默认群被动",
command="switch",
arguments=["close", "--task", "--all", "-df"],
prefix=True,
)
_status_matcher.shortcut( _status_matcher.shortcut(
r"开启(所有|全部)群被动", r"开启(所有|全部)群被动",