添加开启/关闭所有群被动命令

This commit is contained in:
HibiKier 2024-08-06 21:54:06 +08:00
parent 50d8059e9f
commit 45ad5d8e4e
3 changed files with 82 additions and 16 deletions

View File

@ -24,6 +24,7 @@ __plugin_meta__ = PluginMetadata(
开启/关闭[功能名称] : 开关功能 开启/关闭[功能名称] : 开关功能
开启/关闭群被动[被动名称] : 群被动开关 开启/关闭群被动[被动名称] : 群被动开关
开启/关闭所有插件 : 开启/关闭当前群组所有插件状态 开启/关闭所有插件 : 开启/关闭当前群组所有插件状态
开启/关闭所有群被动 : 开启/关闭当前群组所有群被动
群被动状态 : 查看被动技能开关状态 群被动状态 : 查看被动技能开关状态
醒来 : 结束休眠 醒来 : 结束休眠
休息吧 : 群组休眠, 不会再响应命令 休息吧 : 群组休眠, 不会再响应命令
@ -107,8 +108,14 @@ async def _(
if gid: if gid:
"""群组中使用命令""" """群组中使用命令"""
if task.result: if task.result:
result = await PluginManage.unblock_group_task(name, gid) if all.result:
logger.info(f"开启群组被动 {name}", arparma.header_result, session=session) result = await PluginManage.unblock_group_all_task(gid)
logger.info(f"开启所有群组被动", arparma.header_result, session=session)
else:
result = await PluginManage.unblock_group_task(name, gid)
logger.info(
f"开启群组被动 {name}", arparma.header_result, session=session
)
else: else:
if session.id1 in bot.config.superusers and default_status.result: if session.id1 in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改""" """单个插件的进群默认修改"""
@ -195,7 +202,14 @@ async def _(
gid = session.id3 or session.id2 gid = session.id3 or session.id2
if gid: if gid:
if task.result: if task.result:
result = await PluginManage.block_group_task(name, gid) if all.result:
result = await PluginManage.block_group_all_task(gid)
logger.info(f"开启所有群组被动", arparma.header_result, session=session)
else:
result = await PluginManage.block_group_task(name, gid)
logger.info(
f"关闭群组被动 {name}", arparma.header_result, session=session
)
else: else:
if session.id1 in bot.config.superusers and default_status.result: if session.id1 in bot.config.superusers and default_status.result:
"""单个插件的进群默认修改""" """单个插件的进群默认修改"""

View File

@ -286,6 +286,18 @@ class PluginManage:
""" """
return await cls._change_group_task(task_name, group_id, False) return await cls._change_group_task(task_name, group_id, False)
@classmethod
async def unblock_group_all_task(cls, group_id: str) -> str:
"""启用被动技能
参数:
group_id: 群组id
返回:
str: 返回信息
"""
return await cls._change_group_task("", group_id, False, True)
@classmethod @classmethod
async def block_group_task(cls, task_name: str, group_id: str) -> str: async def block_group_task(cls, task_name: str, group_id: str) -> str:
"""禁用被动技能 """禁用被动技能
@ -299,6 +311,18 @@ class PluginManage:
""" """
return await cls._change_group_task(task_name, group_id, True) return await cls._change_group_task(task_name, group_id, True)
@classmethod
async def block_group_all_task(cls, group_id: str) -> str:
"""禁用被动技能
参数:
group_id: 群组id
返回:
str: 返回信息
"""
return await cls._change_group_task("", group_id, True, True)
@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:
"""启用群组插件 """启用群组插件
@ -314,7 +338,7 @@ class PluginManage:
@classmethod @classmethod
async def _change_group_task( async def _change_group_task(
cls, task_name: str, group_id: str, status: bool cls, task_name: str, group_id: str, status: bool, is_all: bool = False
) -> str: ) -> str:
"""改变群组被动技能状态 """改变群组被动技能状态
@ -322,21 +346,35 @@ class PluginManage:
task_name: 被动技能名称 task_name: 被动技能名称
group_id: 群组Id group_id: 群组Id
status: 状态 status: 状态
is_all: 所有群被动
返回: 返回:
str: 返回信息 str: 返回信息
""" """
if task := await TaskInfo.get_or_none(name=task_name): status_str = "关闭" if status else "开启"
status_str = "关闭" if status else "开启" if is_all:
group, _ = await GroupConsole.get_or_create( modules = await TaskInfo.annotate().values_list("module", flat=True)
group_id=group_id, channel_id__isnull=True if modules:
) group, _ = await GroupConsole.get_or_create(
if status: group_id=group_id, channel_id__isnull=True
group.block_task += f"{task.module}," )
else: if status:
group.block_task = group.block_task.replace(f"{task.module},", "") group.block_task = ",".join(modules) + "," # type: ignore
await group.save(update_fields=["block_task"]) else:
return f"已成功{status_str} {task_name} 被动技能!" group.block_task = ""
await group.save(update_fields=["block_task"])
return f"已成功{status_str}全部被动技能!"
else:
if task := await TaskInfo.get_or_none(name=task_name):
group, _ = await GroupConsole.get_or_create(
group_id=group_id, channel_id__isnull=True
)
if status:
group.block_task += f"{task.module},"
else:
group.block_task = group.block_task.replace(f"{task.module},", "")
await group.save(update_fields=["block_task"])
return f"已成功{status_str} {task_name} 被动技能!"
return "没有找到这个被动技能喔..." return "没有找到这个被动技能喔..."
@classmethod @classmethod

View File

@ -15,7 +15,7 @@ _status_matcher = on_alconna(
"switch", "switch",
Option("-t|--task", action=store_true, help_text="被动技能"), Option("-t|--task", action=store_true, help_text="被动技能"),
Option("-df|--default", action=store_true, help_text="进群默认开关"), Option("-df|--default", action=store_true, help_text="进群默认开关"),
Option("--all", action=store_true, help_text="全部插件"), Option("--all", action=store_true, help_text="全部插件/被动"),
Subcommand( Subcommand(
"open", "open",
Args["plugin_name?", [str, int]], Args["plugin_name?", [str, int]],
@ -73,6 +73,20 @@ _status_matcher.shortcut(
prefix=True, prefix=True,
) )
_status_matcher.shortcut(
r"开启(所有|全部)群被动",
command="switch",
arguments=["open", "--task", "--all"],
prefix=True,
)
_status_matcher.shortcut(
r"关闭(所有|全部)群被动",
command="switch",
arguments=["close", "--task", "--all"],
prefix=True,
)
_status_matcher.shortcut( _status_matcher.shortcut(
r"开启所有(插件|功能)", r"开启所有(插件|功能)",