🐛 修复群权限检测获取群问题并优化代码

This commit is contained in:
HibiKier 2024-08-02 21:38:32 +08:00
parent 36047693aa
commit 51fcdf649e
6 changed files with 117 additions and 89 deletions

View File

@ -21,8 +21,6 @@ from zhenxun.utils.image_utils import (
) )
from zhenxun.utils.rules import admin_check, ensure_group from zhenxun.utils.rules import admin_check, ensure_group
base_config = Config.get("admin_bot_manage")
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(
name="群组管理员帮助", name="群组管理员帮助",
description="管理员帮助列表", description="管理员帮助列表",

View File

@ -3,7 +3,7 @@ from nonebot.adapters.onebot.v11 import GroupAdminNoticeEvent
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from zhenxun.configs.config import Config from zhenxun.configs.config import Config
from zhenxun.configs.utils import PluginExtraData from zhenxun.configs.utils import PluginExtraData, RegisterConfig
from zhenxun.models.level_user import LevelUser from zhenxun.models.level_user import LevelUser
from zhenxun.services.log import logger from zhenxun.services.log import logger
from zhenxun.utils.enum import PluginType from zhenxun.utils.enum import PluginType
@ -13,7 +13,18 @@ __plugin_meta__ = PluginMetadata(
description="检测群管理员变动, 添加与删除管理员默认权限, 当配置项 ADMIN_DEFAULT_AUTH 为空时, 不会添加管理员权限", description="检测群管理员变动, 添加与删除管理员默认权限, 当配置项 ADMIN_DEFAULT_AUTH 为空时, 不会添加管理员权限",
usage="", usage="",
extra=PluginExtraData( extra=PluginExtraData(
author="HibiKier", version="0.1", plugin_type=PluginType.HIDDEN author="HibiKier",
version="0.1",
plugin_type=PluginType.HIDDEN,
configs=[
RegisterConfig(
module="admin_bot_manage",
key="ADMIN_DEFAULT_AUTH",
value=5,
help="设置群欢迎消息所需要的管理员权限等级",
default_value=5,
)
],
).dict(), ).dict(),
) )

View File

@ -35,6 +35,7 @@ __plugin_meta__ = PluginMetadata(
admin_level=base_config.get("SET_GROUP_WELCOME_MESSAGE_LEVEL", 2), admin_level=base_config.get("SET_GROUP_WELCOME_MESSAGE_LEVEL", 2),
configs=[ configs=[
RegisterConfig( RegisterConfig(
module="admin_bot_manage",
key="SET_GROUP_WELCOME_MESSAGE_LEVEL", key="SET_GROUP_WELCOME_MESSAGE_LEVEL",
value=2, value=2,
help="设置群欢迎消息所需要的管理员权限等级", help="设置群欢迎消息所需要的管理员权限等级",

View File

@ -417,9 +417,12 @@ class AuthChecker:
""" """
if group_id := session.id3 or session.id2: if group_id := session.id3 or session.id2:
text = message.extract_plain_text() text = message.extract_plain_text()
group, _ = await GroupConsole.get_or_create( group = await GroupConsole.get_or_none(
group_id=group_id, channel_id__isnull=True group_id=group_id, channel_id__isnull=True
) )
if not group:
"""群不存在"""
raise IgnoredException("群不存在")
if group.level < 0: if group.level < 0:
"""群权限小于0""" """群权限小于0"""
logger.debug( logger.debug(

View File

@ -49,7 +49,7 @@ __plugin_meta__ = PluginMetadata(
module="invite_manager", module="invite_manager",
key="flag", key="flag",
value=True, value=True,
help="强制拉群后进群回复内容", help="强制拉群后进群退出并回复内容",
default_value=True, default_value=True,
type=bool, type=bool,
), ),
@ -113,91 +113,106 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent | GroupMemberIncreaseEvent
group = await GroupConsole.get_or_none( group = await GroupConsole.get_or_none(
group_id=group_id, channel_id__isnull=True group_id=group_id, channel_id__isnull=True
) )
if (not group or group.group_flag == 0) and base_config.get("flag"): if not group or group.group_flag == 0:
"""群聊不存在或被强制拉群,退出该群""" """群聊不存在或被强制拉群"""
try: if base_config.get("flag"):
if result_msg := base_config.get("message"): """退出群组"""
await bot.send_group_msg( try:
group_id=event.group_id, message=result_msg if result_msg := base_config.get("message"):
await bot.send_group_msg(
group_id=event.group_id, message=result_msg
)
await bot.set_group_leave(group_id=event.group_id)
await bot.send_private_msg(
user_id=int(superuser),
message=f"触发强制入群保护,已成功退出群聊 {group_id}...",
) )
await bot.set_group_leave(group_id=event.group_id) logger.info(
await bot.send_private_msg( f"强制拉群或未有群信息,退出群聊成功",
user_id=int(superuser), "入群检测",
message=f"触发强制入群保护,已成功退出群聊 {group_id}...", group_id=event.group_id,
)
logger.info(
f"强制拉群或未有群信息,退出群聊成功",
"入群检测",
group_id=event.group_id,
)
if req := await FgRequest.get_or_none(group_id=group_id):
req.handle_type = RequestHandleType.IGNORE
await req.save(update_fields=["handle_type"])
except Exception as e:
logger.error(
f"强制拉群或未有群信息,退出群聊失败",
"入群检测",
group_id=event.group_id,
e=e,
)
await bot.send_private_msg(
user_id=int(superuser),
message=f"触发强制入群保护,退出群聊 {event.group_id} 失败...",
)
elif not GroupConsole.exists(group_id=group_id, channel_id__isnull=True):
"""默认群功能开关"""
block_plugin = ""
if plugin_list := await PluginInfo.filter(default_status=False).all():
for plugin in plugin_list:
block_plugin += f"{plugin.module},"
group_info = await bot.get_group_info(group_id=event.group_id)
await GroupConsole.create(
group_id=group_info["group_id"],
group_name=group_info["group_name"],
max_member_count=group_info["max_member_count"],
member_count=group_info["member_count"],
group_flag=1,
block_plugin=block_plugin,
platform="qq",
)
admin_default_auth = Config.get_config(
"admin_bot_manage", "ADMIN_DEFAULT_AUTH"
)
# 即刻刷新权限
for user_info in await bot.get_group_member_list(group_id=event.group_id):
"""即刻刷新权限"""
if (
user_info["role"]
in [
"owner",
"admin",
]
and not await LevelUser.is_group_flag(
user_info["user_id"], group_id
) )
and admin_default_auth is not None if req := await FgRequest.get_or_none(
group_id=group_id, handle_type__isnull=True
):
req.handle_type = RequestHandleType.IGNORE
await req.save(update_fields=["handle_type"])
except Exception as e:
logger.error(
f"强制拉群或未有群信息,退出群聊失败",
"入群检测",
group_id=event.group_id,
e=e,
)
await bot.send_private_msg(
user_id=int(superuser),
message=f"触发强制入群保护,退出群聊 {event.group_id} 失败...",
)
await GroupConsole.filter(group_id=group_id).delete()
else:
"""允许群组并设置群认证,默认群功能开关"""
if group:
await GroupConsole.filter(
group_id=group_id, channel_id__isnull=True
).update(group_flag=1)
else:
block_plugin = ""
if plugin_list := await PluginInfo.filter(
default_status=False
).all():
for plugin in plugin_list:
block_plugin += f"{plugin.module},"
group_info = await bot.get_group_info(group_id=event.group_id)
await GroupConsole.create(
group_id=group_info["group_id"],
group_name=group_info["group_name"],
max_member_count=group_info["max_member_count"],
member_count=group_info["member_count"],
group_flag=1,
block_plugin=block_plugin,
platform="qq",
)
"""刷新群管理员权限"""
admin_default_auth = Config.get_config(
"admin_bot_manage", "ADMIN_DEFAULT_AUTH"
)
# 即刻刷新权限
for user_info in await bot.get_group_member_list(
group_id=event.group_id
): ):
await LevelUser.set_level( """即刻刷新权限"""
user_info["user_id"], if (
user_info["group_id"], user_info["role"]
admin_default_auth, in [
) "owner",
logger.debug( "admin",
f"添加默认群管理员权限: {admin_default_auth}", ]
"入群检测", and not await LevelUser.is_group_flag(
session=user_info["user_id"], user_info["user_id"], group_id
group_id=user_info["group_id"], )
) and admin_default_auth is not None
if str(user_info["user_id"]) in bot.config.superusers: ):
await LevelUser.set_level( await LevelUser.set_level(
user_info["user_id"], user_info["group_id"], 9 user_info["user_id"],
) user_info["group_id"],
logger.debug( admin_default_auth,
f"添加超级用户权限: 9", )
"入群检测", logger.debug(
session=user_info["user_id"], f"添加默认群管理员权限: {admin_default_auth}",
group_id=user_info["group_id"], "入群检测",
) session=user_info["user_id"],
group_id=user_info["group_id"],
)
if str(user_info["user_id"]) in bot.config.superusers:
await LevelUser.set_level(
user_info["user_id"], user_info["group_id"], 9
)
logger.debug(
f"添加超级用户权限: 9",
"入群检测",
session=user_info["user_id"],
group_id=user_info["group_id"],
)
else: else:
join_time = datetime.now() join_time = datetime.now()
user_info = await bot.get_group_member_info( user_info = await bot.get_group_member_info(

View File

@ -67,7 +67,7 @@ class ConfigGroup(BaseModel):
"""配置项列表""" """配置项列表"""
def get(self, c: str, default: Any = None) -> Any: def get(self, c: str, default: Any = None) -> Any:
cfg = self.configs.get(c) cfg = self.configs.get(c.upper())
if cfg is not None: if cfg is not None:
if cfg.value is not None: if cfg.value is not None:
return cfg.value return cfg.value