2023-02-18 18:46:54 +08:00
|
|
|
|
from typing import Tuple
|
|
|
|
|
|
|
|
|
|
|
|
from nonebot import on_command, on_regex
|
2022-06-07 19:57:34 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11 import (
|
|
|
|
|
|
GROUP,
|
2023-02-18 18:46:54 +08:00
|
|
|
|
Bot,
|
2022-06-07 19:57:34 +08:00
|
|
|
|
GroupMessageEvent,
|
|
|
|
|
|
Message,
|
2023-02-18 18:46:54 +08:00
|
|
|
|
MessageEvent,
|
2022-06-07 19:57:34 +08:00
|
|
|
|
)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
from nonebot.params import Command, CommandArg
|
2021-11-23 21:44:59 +08:00
|
|
|
|
from nonebot.permission import SUPERUSER
|
|
|
|
|
|
from nonebot.rule import to_me
|
2023-02-18 18:46:54 +08:00
|
|
|
|
|
|
|
|
|
|
from configs.config import NICKNAME
|
2021-11-23 21:44:59 +08:00
|
|
|
|
from models.group_info import GroupInfo
|
|
|
|
|
|
from services.log import logger
|
2023-02-18 18:46:54 +08:00
|
|
|
|
from utils.depends import OneCommand
|
|
|
|
|
|
from utils.image_utils import text2image
|
|
|
|
|
|
from utils.manager import group_manager, plugins2settings_manager
|
|
|
|
|
|
from utils.message_builder import image
|
|
|
|
|
|
from utils.utils import is_number
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "管理群操作 [Superuser]"
|
|
|
|
|
|
__plugin_usage__ = """
|
|
|
|
|
|
usage:
|
|
|
|
|
|
群权限 | 群白名单 | 退出群 操作
|
2023-02-18 18:46:54 +08:00
|
|
|
|
退群,添加/删除群白名单,添加/删除群认证,当在群聊中这五个命令且没有指定群号时,默认指定当前群聊
|
|
|
|
|
|
指令:
|
|
|
|
|
|
退群 ?[group_id]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
修改群权限 [group_id] [等级]
|
2023-02-18 18:46:54 +08:00
|
|
|
|
修改群权限 [等级]: 该命令仅在群聊时生效,默认修改当前群聊
|
|
|
|
|
|
添加群白名单 ?*[group_id]
|
|
|
|
|
|
删除群白名单 ?*[group_id]
|
|
|
|
|
|
添加群认证 ?*[group_id]
|
|
|
|
|
|
删除群认证 ?*[group_id]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
查看群白名单
|
|
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_des__ = "管理群操作"
|
|
|
|
|
|
__plugin_cmd__ = [
|
|
|
|
|
|
"退群 [group_id]",
|
|
|
|
|
|
"修改群权限 [group_id] [等级]",
|
|
|
|
|
|
"添加群白名单 *[group_id]",
|
|
|
|
|
|
"删除群白名单 *[group_id]",
|
|
|
|
|
|
"添加群认证 *[group_id]",
|
|
|
|
|
|
"删除群认证 *[group_id]",
|
|
|
|
|
|
"查看群白名单",
|
|
|
|
|
|
]
|
|
|
|
|
|
__plugin_version__ = 0.1
|
|
|
|
|
|
__plugin_author__ = "HibiKier"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
del_group = on_command("退群", rule=to_me(), permission=SUPERUSER, priority=1, block=True)
|
|
|
|
|
|
|
|
|
|
|
|
add_group_level = on_command("修改群权限", priority=1, permission=SUPERUSER, block=True)
|
|
|
|
|
|
my_group_level = on_command(
|
|
|
|
|
|
"查看群权限", aliases={"群权限"}, priority=5, permission=GROUP, block=True
|
|
|
|
|
|
)
|
|
|
|
|
|
what_up_group_level = on_regex(
|
2023-02-18 18:46:54 +08:00
|
|
|
|
"(:?提高|提升|升高|增加|加上).*?群权限",
|
2021-11-23 21:44:59 +08:00
|
|
|
|
rule=to_me(),
|
|
|
|
|
|
priority=5,
|
|
|
|
|
|
permission=GROUP,
|
|
|
|
|
|
block=True,
|
|
|
|
|
|
)
|
|
|
|
|
|
manager_group_whitelist = on_command(
|
|
|
|
|
|
"添加群白名单", aliases={"删除群白名单"}, priority=1, permission=SUPERUSER, block=True
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
show_group_whitelist = on_command(
|
|
|
|
|
|
"查看群白名单", priority=1, permission=SUPERUSER, block=True
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
group_auth = on_command(
|
|
|
|
|
|
"添加群认证", aliases={"删除群认证"}, priority=1, permission=SUPERUSER, block=True
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@del_group.handle()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()):
|
2022-02-19 18:20:19 +08:00
|
|
|
|
group_id = arg.extract_plain_text().strip()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if not group_id and isinstance(event, GroupMessageEvent):
|
|
|
|
|
|
group_id = event.group_id
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if group_id:
|
|
|
|
|
|
if is_number(group_id):
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_list = [x["group_id"] for x in await bot.get_group_list()]
|
|
|
|
|
|
group_id = int(group_id)
|
|
|
|
|
|
if group_id not in group_list:
|
|
|
|
|
|
logger.debug("群聊不存在", "退群", event.user_id, target=group_id)
|
|
|
|
|
|
await del_group.finish(f"{NICKNAME}未在该群聊中...")
|
2021-11-23 21:44:59 +08:00
|
|
|
|
try:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await bot.set_group_leave(group_id=group_id)
|
|
|
|
|
|
logger.info(f"{NICKNAME}退出群聊成功", "退群", event.user_id, target=group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
await del_group.send(f"退出群聊 {group_id} 成功", at_sender=True)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_manager.delete_group(group_id)
|
|
|
|
|
|
await GroupInfo.filter(group_id=group_id).delete()
|
2021-11-23 21:44:59 +08:00
|
|
|
|
except Exception as e:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
logger.error(f"退出群聊失败", "退群", event.user_id, target=group_id, e=e)
|
|
|
|
|
|
await del_group.send(f"退出群聊 {group_id} 失败", at_sender=True)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
else:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await del_group.send(f"请输入正确的群号", at_sender=True)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
else:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await del_group.send(f"请输入群号", at_sender=True)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@add_group_level.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()):
|
|
|
|
|
|
msg = arg.extract_plain_text().strip()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
msg = msg.split()
|
2021-11-23 21:44:59 +08:00
|
|
|
|
group_id = 0
|
|
|
|
|
|
level = 0
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if isinstance(event, GroupMessageEvent) and len(msg) == 1:
|
|
|
|
|
|
msg = [event.group_id, msg[0]]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if not msg:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await add_group_level.finish("缺失参数...")
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if len(msg) < 2:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await add_group_level.finish("缺失参数...")
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if is_number(msg[0]) and is_number(msg[1]):
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_id = int(msg[0])
|
2021-11-23 21:44:59 +08:00
|
|
|
|
level = int(msg[1])
|
|
|
|
|
|
else:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await add_group_level.finish("参数错误...群号和等级必须是数字..")
|
2021-11-23 21:44:59 +08:00
|
|
|
|
old_level = group_manager.get_group_level(group_id)
|
|
|
|
|
|
group_manager.set_group_level(group_id, level)
|
|
|
|
|
|
await add_group_level.send("修改成功...", at_sender=True)
|
|
|
|
|
|
if level > -1:
|
|
|
|
|
|
await bot.send_group_msg(
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_id=group_id, message=f"管理员修改了此群权限:{old_level} -> {level}"
|
2021-11-23 21:44:59 +08:00
|
|
|
|
)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
logger.info(f"修改群权限:{level}", "修改群权限", event.user_id, target=group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@my_group_level.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
2021-11-23 21:44:59 +08:00
|
|
|
|
level = group_manager.get_group_level(event.group_id)
|
|
|
|
|
|
tmp = ""
|
|
|
|
|
|
data = plugins2settings_manager.get_data()
|
|
|
|
|
|
for module in data:
|
2022-11-21 20:43:41 +08:00
|
|
|
|
if data[module].level > level:
|
|
|
|
|
|
plugin_name = data[module].cmd[0]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if plugin_name == "pixiv":
|
|
|
|
|
|
plugin_name = "搜图 p站排行"
|
|
|
|
|
|
tmp += f"{plugin_name}\n"
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if not tmp:
|
|
|
|
|
|
await my_group_level.finish(f"当前群权限:{level}")
|
|
|
|
|
|
await my_group_level.finish(
|
|
|
|
|
|
f"当前群权限:{level}\n目前无法使用的功能:\n"
|
|
|
|
|
|
+ image(await text2image(tmp, padding=10, color="#f9f6f2"))
|
|
|
|
|
|
)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@what_up_group_level.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _():
|
2021-11-23 21:44:59 +08:00
|
|
|
|
await what_up_group_level.finish(
|
2023-02-18 18:46:54 +08:00
|
|
|
|
f"[此功能用于防止内鬼,如果引起不便那真是抱歉了]\n" f"目前提高群权限的方法:\n" f"\t1.超级管理员修改权限"
|
2021-11-23 21:44:59 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@manager_group_whitelist.handle()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
async def _(
|
|
|
|
|
|
bot: Bot, event: MessageEvent, cmd: str = OneCommand(), arg: Message = CommandArg()
|
|
|
|
|
|
):
|
2022-04-26 14:45:04 +08:00
|
|
|
|
msg = arg.extract_plain_text().strip().split()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if not msg and isinstance(event, GroupMessageEvent):
|
|
|
|
|
|
msg = [event.group_id]
|
|
|
|
|
|
if not msg:
|
|
|
|
|
|
await manager_group_whitelist.finish("请输入群号")
|
2022-06-07 19:57:34 +08:00
|
|
|
|
all_group = [g["group_id"] for g in await bot.get_group_list()]
|
2023-02-18 18:46:54 +08:00
|
|
|
|
error_group = []
|
2021-11-23 21:44:59 +08:00
|
|
|
|
group_list = []
|
2023-02-18 18:46:54 +08:00
|
|
|
|
for group_id in msg:
|
|
|
|
|
|
if is_number(group_id) and int(group_id) in all_group:
|
|
|
|
|
|
group_list.append(int(group_id))
|
|
|
|
|
|
else:
|
|
|
|
|
|
logger.debug(f"群号不合法或不存在", cmd, target=group_id)
|
|
|
|
|
|
error_group.append(group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
if group_list:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
for group_id in group_list:
|
2022-02-19 18:20:19 +08:00
|
|
|
|
if cmd in ["添加群白名单"]:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_manager.add_group_white_list(group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
else:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_manager.delete_group_white_list(group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
group_list = [str(x) for x in group_list]
|
2022-06-07 19:57:34 +08:00
|
|
|
|
await manager_group_whitelist.send("已成功将 " + "\n".join(group_list) + " " + cmd)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group_manager.save()
|
|
|
|
|
|
if error_group:
|
|
|
|
|
|
await manager_group_whitelist.send("以下群聊不合法或不存在:\n" + "\n".join(error_group))
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@show_group_whitelist.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _():
|
2023-02-18 18:46:54 +08:00
|
|
|
|
group = [str(g) for g in group_manager.get_group_white_list()]
|
|
|
|
|
|
if not group:
|
|
|
|
|
|
await show_group_whitelist.finish("没有任何群在群白名单...")
|
|
|
|
|
|
await show_group_whitelist.send("目前的群白名单:\n" + "\n".join(group))
|
2021-11-23 21:44:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@group_auth.handle()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
async def _(
|
|
|
|
|
|
bot: Bot, event: MessageEvent, cmd: str = OneCommand(), arg: Message = CommandArg()
|
|
|
|
|
|
):
|
2022-02-19 18:20:19 +08:00
|
|
|
|
msg = arg.extract_plain_text().strip().split()
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if isinstance(event, GroupMessageEvent) and not msg:
|
|
|
|
|
|
msg = [event.group_id]
|
|
|
|
|
|
if not msg:
|
|
|
|
|
|
await manager_group_whitelist.finish("请输入群号")
|
|
|
|
|
|
error_group = []
|
|
|
|
|
|
all_group = [g["group_id"] for g in await bot.get_group_list()]
|
2021-11-23 21:44:59 +08:00
|
|
|
|
for group_id in msg:
|
|
|
|
|
|
group_id = int(group_id)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
if is_number(group_id) and group_id in all_group:
|
|
|
|
|
|
if cmd[:2] == "添加":
|
2021-11-23 21:44:59 +08:00
|
|
|
|
try:
|
|
|
|
|
|
group_info = await bot.get_group_info(group_id=group_id)
|
2023-02-18 18:46:54 +08:00
|
|
|
|
await GroupInfo.update_or_create(
|
|
|
|
|
|
group_id=group_info["group_id"],
|
|
|
|
|
|
defaults={
|
|
|
|
|
|
"group_flag": 1,
|
|
|
|
|
|
"group_name": group_info["group_name"],
|
|
|
|
|
|
"max_member_count": group_info["max_member_count"],
|
|
|
|
|
|
"member_count": group_info["member_count"],
|
|
|
|
|
|
},
|
|
|
|
|
|
)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
await group_auth.send(f"添加群认证 {group_id} 发生错误!")
|
|
|
|
|
|
logger.error(f"添加群认证发生错误", cmd, target=group_id, e=e)
|
|
|
|
|
|
else:
|
|
|
|
|
|
await group_auth.send(f"已为 {group_id} {cmd[:2]}群认证..")
|
|
|
|
|
|
logger.info(f"添加群认证成功", cmd, target=group_id)
|
|
|
|
|
|
else:
|
|
|
|
|
|
if group := await GroupInfo.filter(group_id=group_id).first():
|
|
|
|
|
|
await group.update_or_create(
|
|
|
|
|
|
group_id=group_id, defaults={"group_flag": 0}
|
|
|
|
|
|
)
|
|
|
|
|
|
await group_auth.send(f"已删除 {group_id} 群认证..")
|
|
|
|
|
|
logger.info(f"删除群认证成功", cmd, target=group_id)
|
|
|
|
|
|
else:
|
|
|
|
|
|
await group_auth.send(f"未查找到群聊: {group_id}")
|
|
|
|
|
|
logger.info(f"未找到群聊", cmd, target=group_id)
|
2021-11-23 21:44:59 +08:00
|
|
|
|
else:
|
2023-02-18 18:46:54 +08:00
|
|
|
|
logger.debug(f"群号不合法或不存在", cmd, target=group_id)
|
|
|
|
|
|
error_group.append(str(group_id))
|
|
|
|
|
|
if error_group:
|
|
|
|
|
|
await manager_group_whitelist.send("以下群聊不合法或不存在:\n" + "\n".join(error_group))
|