2023-03-19 21:05:34 +08:00
|
|
|
|
from typing import Any, Tuple
|
|
|
|
|
|
|
2021-12-16 11:16:28 +08:00
|
|
|
|
from nonebot import on_command, on_message, on_regex
|
2023-03-19 21:05:34 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11 import (
|
|
|
|
|
|
GROUP,
|
|
|
|
|
|
Bot,
|
|
|
|
|
|
GroupMessageEvent,
|
|
|
|
|
|
Message,
|
|
|
|
|
|
MessageEvent,
|
|
|
|
|
|
PrivateMessageEvent,
|
|
|
|
|
|
)
|
2023-05-22 20:56:42 +08:00
|
|
|
|
from nonebot.params import CommandArg, RegexGroup
|
2023-03-19 21:05:34 +08:00
|
|
|
|
from nonebot.permission import SUPERUSER
|
2022-12-26 18:40:34 +08:00
|
|
|
|
|
2023-03-19 21:05:34 +08:00
|
|
|
|
from configs.config import NICKNAME, Config
|
|
|
|
|
|
from services.log import logger
|
2022-12-26 18:40:34 +08:00
|
|
|
|
from utils.message_builder import image
|
2023-03-19 21:05:34 +08:00
|
|
|
|
from utils.utils import get_message_text, is_number
|
|
|
|
|
|
|
2022-02-19 18:20:19 +08:00
|
|
|
|
from ._data_source import (
|
2023-03-19 21:05:34 +08:00
|
|
|
|
change_global_task_status,
|
2021-11-23 21:44:59 +08:00
|
|
|
|
change_group_switch,
|
|
|
|
|
|
get_plugin_status,
|
|
|
|
|
|
group_current_status,
|
2023-03-19 21:05:34 +08:00
|
|
|
|
set_group_bot_status,
|
|
|
|
|
|
set_plugin_status,
|
2021-11-23 21:44:59 +08:00
|
|
|
|
)
|
|
|
|
|
|
from .rule import switch_rule
|
|
|
|
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "群功能开关 [Admin]"
|
|
|
|
|
|
|
|
|
|
|
|
__plugin_usage__ = """
|
|
|
|
|
|
usage:
|
|
|
|
|
|
群内功能与被动技能开关
|
|
|
|
|
|
指令:
|
|
|
|
|
|
开启/关闭[功能]
|
|
|
|
|
|
群被动状态
|
|
|
|
|
|
开启全部被动
|
|
|
|
|
|
关闭全部被动
|
2021-12-16 11:16:28 +08:00
|
|
|
|
醒来/休息吧
|
2021-11-23 21:44:59 +08:00
|
|
|
|
示例:开启/关闭色图
|
|
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_superuser_usage__ = """
|
|
|
|
|
|
usage:
|
2022-12-26 18:40:34 +08:00
|
|
|
|
(私聊)功能总开关与指定群禁用
|
2021-11-23 21:44:59 +08:00
|
|
|
|
指令:
|
|
|
|
|
|
功能状态
|
|
|
|
|
|
开启/关闭[功能] [group]
|
|
|
|
|
|
开启/关闭[功能] ['private'/'group']
|
2022-12-26 18:40:34 +08:00
|
|
|
|
开启被动/关闭被动[被动名称] # 全局被动控制
|
2021-11-23 21:44:59 +08:00
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_des__ = "群内功能开关"
|
|
|
|
|
|
__plugin_cmd__ = [
|
|
|
|
|
|
"开启/关闭[功能]",
|
|
|
|
|
|
"群被动状态",
|
|
|
|
|
|
"开启全部被动",
|
|
|
|
|
|
"关闭全部被动",
|
2021-12-16 11:16:28 +08:00
|
|
|
|
"醒来/休息吧",
|
2021-11-23 21:44:59 +08:00
|
|
|
|
"功能状态 [_superuser]",
|
|
|
|
|
|
"开启/关闭[功能] [group] [_superuser]",
|
|
|
|
|
|
"开启/关闭[功能] ['private'/'group'] [_superuser]",
|
|
|
|
|
|
]
|
|
|
|
|
|
__plugin_version__ = 0.1
|
|
|
|
|
|
__plugin_author__ = "HibiKier"
|
|
|
|
|
|
__plugin_settings__ = {
|
|
|
|
|
|
"admin_level": Config.get_config("admin_bot_manage", "CHANGE_GROUP_SWITCH_LEVEL"),
|
2023-03-19 21:05:34 +08:00
|
|
|
|
"cmd": ["开启功能", "关闭功能", "开关"],
|
2021-11-23 21:44:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
switch_rule_matcher = on_message(rule=switch_rule, priority=4, block=True)
|
|
|
|
|
|
|
|
|
|
|
|
plugins_status = on_command("功能状态", permission=SUPERUSER, priority=5, block=True)
|
|
|
|
|
|
|
|
|
|
|
|
group_task_status = on_command("群被动状态", permission=GROUP, priority=5, block=True)
|
|
|
|
|
|
|
2021-12-16 11:16:28 +08:00
|
|
|
|
group_status = on_regex("^(休息吧|醒来)$", permission=GROUP, priority=5, block=True)
|
|
|
|
|
|
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
@switch_rule_matcher.handle()
|
2023-03-19 21:05:34 +08:00
|
|
|
|
async def _(
|
|
|
|
|
|
bot: Bot,
|
|
|
|
|
|
event: MessageEvent,
|
|
|
|
|
|
):
|
|
|
|
|
|
msg = get_message_text(event.message).strip()
|
|
|
|
|
|
msg_split = msg.split()
|
|
|
|
|
|
_cmd = msg_split[0]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if isinstance(event, GroupMessageEvent):
|
|
|
|
|
|
await switch_rule_matcher.send(await change_group_switch(_cmd, event.group_id))
|
2023-03-19 21:05:34 +08:00
|
|
|
|
logger.info(f"使用群功能管理命令 {_cmd}", "功能管理", event.user_id, event.group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
else:
|
|
|
|
|
|
if str(event.user_id) in bot.config.superusers:
|
2023-03-19 21:05:34 +08:00
|
|
|
|
block_type = " ".join(msg_split[1:])
|
2021-11-23 21:44:59 +08:00
|
|
|
|
block_type = block_type if block_type else "a"
|
2023-03-19 21:05:34 +08:00
|
|
|
|
if ("关闭被动" in _cmd or "开启被动" in _cmd) and isinstance(
|
|
|
|
|
|
event, PrivateMessageEvent
|
|
|
|
|
|
):
|
2022-12-26 18:40:34 +08:00
|
|
|
|
await switch_rule_matcher.send(change_global_task_status(_cmd))
|
|
|
|
|
|
elif is_number(block_type):
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if not int(block_type) in [
|
2023-03-19 21:05:34 +08:00
|
|
|
|
g["group_id"] for g in await bot.get_group_list()
|
2021-11-23 21:44:59 +08:00
|
|
|
|
]:
|
|
|
|
|
|
await switch_rule_matcher.finish(f"{NICKNAME}未加入群聊:{block_type}")
|
|
|
|
|
|
await change_group_switch(_cmd, int(block_type), True)
|
|
|
|
|
|
group_name = (await bot.get_group_info(group_id=int(block_type)))[
|
|
|
|
|
|
"group_name"
|
|
|
|
|
|
]
|
|
|
|
|
|
await switch_rule_matcher.send(
|
2022-12-11 01:30:23 +08:00
|
|
|
|
f"已{_cmd[:2]}群聊 {group_name}({block_type}) 的 {_cmd[2:]} 功能"
|
2021-11-23 21:44:59 +08:00
|
|
|
|
)
|
|
|
|
|
|
elif block_type in ["all", "private", "group", "a", "p", "g"]:
|
|
|
|
|
|
block_type = "all" if block_type == "a" else block_type
|
|
|
|
|
|
block_type = "private" if block_type == "p" else block_type
|
|
|
|
|
|
block_type = "group" if block_type == "g" else block_type
|
2023-05-22 20:56:42 +08:00
|
|
|
|
set_plugin_status(_cmd, block_type) # type: ignore
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if block_type == "all":
|
|
|
|
|
|
await switch_rule_matcher.send(f"已{_cmd[:2]}功能:{_cmd[2:]}")
|
|
|
|
|
|
elif block_type == "private":
|
|
|
|
|
|
await switch_rule_matcher.send(f"已在私聊中{_cmd[:2]}功能:{_cmd[2:]}")
|
|
|
|
|
|
else:
|
|
|
|
|
|
await switch_rule_matcher.send(f"已在群聊中{_cmd[:2]}功能:{_cmd[2:]}")
|
|
|
|
|
|
else:
|
|
|
|
|
|
await switch_rule_matcher.finish("格式错误:关闭[功能] [group]/[p/g]")
|
2023-03-19 21:05:34 +08:00
|
|
|
|
logger.info(f"使用功能管理命令 {_cmd} | {block_type}", f"{_cmd}", event.user_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@plugins_status.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _():
|
2021-11-23 21:44:59 +08:00
|
|
|
|
await plugins_status.send(await get_plugin_status())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@group_task_status.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
2023-05-23 23:05:27 +08:00
|
|
|
|
await group_task_status.send(image(b64=await group_current_status(str(event.group_id))))
|
2021-12-16 11:16:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@group_status.handle()
|
2022-02-21 15:59:17 +08:00
|
|
|
|
async def _(event: GroupMessageEvent, reg_group: Tuple[Any, ...] = RegexGroup()):
|
|
|
|
|
|
cmd = reg_group[0]
|
2022-02-19 18:20:19 +08:00
|
|
|
|
if cmd == "休息吧":
|
2023-05-23 23:05:27 +08:00
|
|
|
|
msg = set_group_bot_status(str(event.group_id), False)
|
2022-02-19 18:20:19 +08:00
|
|
|
|
else:
|
2023-05-23 23:05:27 +08:00
|
|
|
|
msg = set_group_bot_status(str(event.group_id), True)
|
2022-02-19 18:20:19 +08:00
|
|
|
|
await group_status.send(msg)
|
2023-03-19 21:05:34 +08:00
|
|
|
|
logger.info(f"使用总开关命令: {cmd}", cmd, event.user_id, event.group_id)
|