更加细致的群被动管理

This commit is contained in:
HibiKier 2024-08-07 00:11:49 +08:00
parent 45ad5d8e4e
commit e07851aecf
3 changed files with 164 additions and 65 deletions

View File

@ -51,6 +51,19 @@ __plugin_meta__ = PluginMetadata(
私聊中: 开启/关闭所有插件全局状态
群组中: 开启/关闭当前群组所有插件状态
开启/关闭群被动[name] ?[-g [group_id]]
私聊中: 开启/关闭全局指定的被动状态
群组中: 开启/关闭当前群组指定的被动状态
示例:
关闭群被动早晚安
关闭群被动早晚安 -g 12355555
开启/关闭所有群被动 -[g ?[group_id]]
私聊中: 开启/关闭全局或指定群组被动状态
示例:
开启所有群被动: 开启全局所有被动
开启所有群被动 -g 12345678: 开启群组12345678所有被动
私聊下:
示例:
开启签到 : 全局开启签到
@ -106,7 +119,7 @@ async def _(
name = plugin_name.result
gid = session.id3 or session.id2
if gid:
"""群组中使用命令"""
"""修改当前群组的数据"""
if task.result:
if all.result:
result = await PluginManage.unblock_group_all_task(gid)
@ -137,7 +150,7 @@ async def _(
session=session,
)
else:
result = await PluginManage.block_group_plugin(name, gid)
result = await PluginManage.unblock_group_plugin(name, gid)
logger.info(
f"开启功能 {name}", arparma.header_result, session=session
)
@ -146,14 +159,21 @@ async def _(
"""私聊"""
group_id = group.result if group.available else None
if all.result:
result = await PluginManage.set_all_plugin_status(
True, default_status.result, group_id
)
logger.info(
f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result,
session=session,
)
if task.result:
"""关闭全局或指定群全部被动"""
if group_id:
result = await PluginManage.unblock_group_all_task(group_id)
else:
result = await PluginManage.unblock_global_all_task()
else:
result = await PluginManage.set_all_plugin_status(
True, default_status.result, group_id
)
logger.info(
f"超级用户开启全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result,
session=session,
)
await Text(result).finish(reply=True)
if default_status.result:
result = await PluginManage.set_default_status(name, True)
@ -165,13 +185,25 @@ async def _(
)
await Text(result).finish(reply=True)
if task.result:
result = await PluginManage.superuser_task_handle(name, group_id, True)
logger.info(
f"超级用户开启被动技能 {name}",
arparma.header_result,
session=session,
target=group_id,
)
split_list = name.split()
if len(split_list) > 1:
name = split_list[0]
group_id = split_list[1]
if group_id:
result = await PluginManage.superuser_task_handle(name, group_id, True)
logger.info(
f"超级用户开启被动技能 {name}",
arparma.header_result,
session=session,
target=group_id,
)
else:
result = await PluginManage.unblock_global_task(name)
logger.info(
f"超级用户开启全局被动技能 {name}",
arparma.header_result,
session=session,
)
await Text(result).finish(reply=True)
else:
result = await PluginManage.superuser_block(name, None, group_id)
@ -201,6 +233,7 @@ async def _(
name = plugin_name.result
gid = session.id3 or session.id2
if gid:
"""修改当前群组的数据"""
if task.result:
if all.result:
result = await PluginManage.block_group_all_task(gid)
@ -231,7 +264,7 @@ async def _(
session=session,
)
else:
result = await PluginManage.unblock_group_plugin(name, gid)
result = await PluginManage.block_group_plugin(name, gid)
logger.info(
f"关闭功能 {name}", arparma.header_result, session=session
)
@ -239,14 +272,21 @@ async def _(
elif session.id1 in bot.config.superusers:
group_id = group.result if group.available else None
if all.result:
result = await PluginManage.set_all_plugin_status(
False, default_status.result, group_id
)
logger.info(
f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result,
session=session,
)
if task.result:
"""关闭全局或指定群全部被动"""
if group_id:
result = await PluginManage.block_group_all_task(group_id)
else:
result = await PluginManage.block_global_all_task()
else:
result = await PluginManage.set_all_plugin_status(
False, default_status.result, group_id
)
logger.info(
f"超级用户关闭全部功能全局开关 {f'指定群组: {group_id}' if group_id else ''}",
arparma.header_result,
session=session,
)
await Text(result).finish(reply=True)
if default_status.result:
result = await PluginManage.set_default_status(name, False)
@ -258,13 +298,25 @@ async def _(
)
await Text(result).finish(reply=True)
if task.result:
result = await PluginManage.superuser_task_handle(name, group_id, False)
logger.info(
f"超级用户关闭被动技能 {name}",
arparma.header_result,
session=session,
target=group_id,
)
split_list = name.split()
if len(split_list) > 1:
name = split_list[0]
group_id = split_list[1]
if group_id:
result = await PluginManage.superuser_task_handle(name, group_id, False)
logger.info(
f"超级用户关闭被动技能 {name}",
arparma.header_result,
session=session,
target=group_id,
)
else:
result = await PluginManage.block_global_task(name)
logger.info(
f"超级用户关闭全局被动技能 {name}",
arparma.header_result,
session=session,
)
await Text(result).finish(reply=True)
else:
_type = BlockType.ALL

View File

@ -189,8 +189,14 @@ class PluginManage:
if group := await GroupConsole.get_or_none(
group_id=group_id, channel_id__isnull=True
):
module_list = await PluginInfo.filter(
plugin_type=PluginType.NORMAL
).values_list("module", flat=True)
if status:
group.block_plugin = ""
for module in module_list:
group.block_plugin = group.block_plugin.replace(
f"{module},", ""
)
else:
module_list = await PluginInfo.filter(
plugin_type=PluginType.NORMAL
@ -271,7 +277,7 @@ class PluginManage:
返回:
str: 返回信息
"""
return await cls._change_group_plugin(plugin_name, group_id, True)
return await cls._change_group_plugin(plugin_name, group_id, False)
@classmethod
async def unblock_group_task(cls, task_name: str, group_id: str) -> str:
@ -323,6 +329,52 @@ class PluginManage:
"""
return await cls._change_group_task("", group_id, True, True)
@classmethod
async def block_global_all_task(cls) -> str:
"""禁用全局被动技能
返回:
str: 返回信息
"""
await TaskInfo.all().update(status=False)
return "已全局禁用所有被动状态"
@classmethod
async def block_global_task(cls, name: str) -> str:
"""禁用全局被动技能
参数:
name: 被动技能名称
返回:
str: 返回信息
"""
await TaskInfo.filter(name=name).update(status=False)
return f"已全局禁用被动状态 {name}"
@classmethod
async def unblock_global_all_task(cls) -> str:
"""开启全局被动技能
返回:
str: 返回信息
"""
await TaskInfo.all().update(status=True)
return "已全局开启所有被动状态"
@classmethod
async def unblock_global_task(cls, name: str) -> str:
"""开启全局被动技能
参数:
name: 被动技能名称
返回:
str: 返回信息
"""
await TaskInfo.filter(name=name).update(status=True)
return f"已全局开启被动状态 {name}"
@classmethod
async def unblock_group_plugin(cls, plugin_name: str, group_id: str) -> str:
"""启用群组插件
@ -334,7 +386,7 @@ class PluginManage:
返回:
str: 返回信息
"""
return await cls._change_group_plugin(plugin_name, group_id, False)
return await cls._change_group_plugin(plugin_name, group_id, True)
@classmethod
async def _change_group_task(
@ -361,7 +413,8 @@ class PluginManage:
if status:
group.block_task = ",".join(modules) + "," # type: ignore
else:
group.block_task = ""
for module in modules:
group.block_task = group.block_task.replace(f"{module},", "")
await group.save(update_fields=["block_task"])
return f"已成功{status_str}全部被动技能!"
else:
@ -372,6 +425,8 @@ class PluginManage:
if status:
group.block_task += f"{task.module},"
else:
if f"super:{task.module}," in group.block_task:
return f"{status_str} {task_name} 被动技能失败,当前群组该被动已被管理员禁用"
group.block_task = group.block_task.replace(f"{task.module},", "")
await group.save(update_fields=["block_task"])
return f"已成功{status_str} {task_name} 被动技能!"
@ -443,10 +498,8 @@ class PluginManage:
else:
group.block_task += f"super:{task.module},"
await group.save(update_fields=["block_task"])
else:
task.status = status
await task.save(update_fields=["status"])
return f"已成功将被动技能 {task_name} 全局{status_str}!"
return f"已成功将群组 {group_id} 被动技能 {task_name} {status_str}!"
return "没有找到这个群组喔..."
return "没有找到这个功能喔..."
@classmethod

View File

@ -16,24 +16,17 @@ _status_matcher = on_alconna(
Option("-t|--task", action=store_true, help_text="被动技能"),
Option("-df|--default", action=store_true, help_text="进群默认开关"),
Option("--all", action=store_true, help_text="全部插件/被动"),
Option("-g|--group", Args["group?", str], help_text="指定群组"),
Subcommand(
"open",
Args["plugin_name?", [str, int]],
Option(
"-g|--group",
Args["group", str],
),
),
Subcommand(
"close",
Args["plugin_name?", [str, int]],
Option(
"-t|--type",
Args["block_type", ["all", "a", "private", "p", "group", "g"]],
),
Option(
"-g|--group",
Args["group", str],
Args["block_type?", ["all", "a", "private", "p", "group", "g"]],
),
),
),
@ -67,12 +60,20 @@ _status_matcher.shortcut(
_status_matcher.shortcut(
r"开启群被动(?P<name>.+)",
r"开启群被动\s*(?P<name>.+)",
command="switch",
arguments=["open", "{name}", "--task"],
prefix=True,
)
_status_matcher.shortcut(
r"关闭群被动\s*(?P<name>.+)",
command="switch",
arguments=["close", "{name}", "--task"],
prefix=True,
)
_status_matcher.shortcut(
r"开启(所有|全部)群被动",
command="switch",
@ -117,14 +118,6 @@ _status_matcher.shortcut(
)
_status_matcher.shortcut(
r"关闭群被动(?P<name>.+)",
command="switch",
arguments=["close", "{name}", "--task"],
prefix=True,
)
_status_matcher.shortcut(
r"关闭所有(插件|功能)",
command="switch",
@ -139,6 +132,13 @@ _status_matcher.shortcut(
prefix=True,
)
_status_matcher.shortcut(
r"关闭(?P<name>.+)",
command="switch",
arguments=["close", "{name}"],
prefix=True,
)
_status_matcher.shortcut(
r"关闭(插件|功能)df(?P<name>.+)",
command="switch",
@ -146,12 +146,6 @@ _status_matcher.shortcut(
prefix=True,
)
_status_matcher.shortcut(
r"关闭(?P<name>.+)",
command="switch",
arguments=["close", "{name}"],
prefix=True,
)
_group_status_matcher.shortcut(
r"醒来",