From 81b6927e111aa41532dfe2a943d23a23772978db Mon Sep 17 00:00:00 2001 From: wling-art Date: Thu, 5 Dec 2024 20:43:37 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E4=BC=98=E5=8C=96=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=E8=AF=B7=E6=B1=82=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E7=BE=A4=E6=88=90=E5=91=98=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=EF=BC=9B=E6=9B=B4=E6=96=B0=E7=BE=A4=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E5=92=8C=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/addfirend/__init__.py | 46 +++++++++--------- src/plugins/removegroup/__init__.py | 73 ++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 24 deletions(-) diff --git a/src/plugins/addfirend/__init__.py b/src/plugins/addfirend/__init__.py index 86c6773..a9dc9eb 100644 --- a/src/plugins/addfirend/__init__.py +++ b/src/plugins/addfirend/__init__.py @@ -29,31 +29,9 @@ def format_time(_time: int) -> str: @addfriend.handle() async def _(bot: Bot, event: RequestEvent): - if bot.self_id in special_qqid and isinstance(event, FriendRequestEvent): - nickname = (await bot.get_stranger_info(user_id=event.user_id, no_cache=True))[ - "nickname" - ] - try: - group_list = await bot.get_group_member_list(group_id=713478803) - except Exception: - logger.exception("获取群列表失败") - approve = event.user_id in [member["user_id"] for member in group_list] - msg = ( - "⚠收到一条好友请求:\n" - f"flag: {event.flag}\n" - f"user: {event.user_id}\n" - f"name: {nickname}\n" - f"time: {format_time(event.time)}\n" - f"自动同意/拒绝(是否在用户群): {approve}\n" - f"验证信息:\n" - f"{event.comment}" - ) - await bot.set_friend_add_request(flag=event.flag, approve=approve) - elif isinstance(event, GroupRequestEvent): + if isinstance(event, GroupRequestEvent): if event.sub_type != "invite": return - # 必须是好友,不能是临时对话 - # 获取好友列表对比 friend_list = await bot.get_friend_list() if event.user_id not in [friend["user_id"] for friend in friend_list]: @@ -95,6 +73,26 @@ async def _(bot: Bot, event: RequestEvent): ) await asyncio.sleep(1) await bot.set_group_leave(group_id=event.group_id) + elif bot.self_id in special_qqid and isinstance(event, FriendRequestEvent): + nickname = (await bot.get_stranger_info(user_id=event.user_id, no_cache=True))[ + "nickname" + ] + try: + group_list = await bot.get_group_member_list(group_id=713478803) + except Exception: + logger.exception("获取群列表失败") + approve = event.user_id in [member["user_id"] for member in group_list] + msg = ( + "⚠收到一条好友请求:\n" + f"flag: {event.flag}\n" + f"user: {event.user_id}\n" + f"name: {nickname}\n" + f"time: {format_time(event.time)}\n" + f"自动同意/拒绝(是否在用户群): {approve}\n" + f"验证信息:\n" + f"{event.comment}" + ) + await bot.set_friend_add_request(flag=event.flag, approve=approve) elif bot.self_id not in special_qqid and isinstance(event, FriendRequestEvent): nickname = (await bot.get_stranger_info(user_id=event.user_id, no_cache=True))[ "nickname" @@ -111,5 +109,7 @@ async def _(bot: Bot, event: RequestEvent): f"{event.comment}" ) await bot.set_friend_add_request(flag=event.flag, approve=approve) + else: + return for super_id in SUPERUSER_list: await bot.send_private_msg(user_id=int(super_id), message=msg) diff --git a/src/plugins/removegroup/__init__.py b/src/plugins/removegroup/__init__.py index 1250ed3..4e712a3 100644 --- a/src/plugins/removegroup/__init__.py +++ b/src/plugins/removegroup/__init__.py @@ -1,8 +1,9 @@ # 获取所有群消息 -from nonebot import on_command +from nonebot import logger, on_command from nonebot.adapters.onebot.v11 import Bot +from sympy import loggamma # 事件响应函数 rlist = on_command("removegrouplist") @@ -29,6 +30,7 @@ async def _(bot: Bot): # 获取群列表 group_list = await bot.get_group_list() # 获取群信息 + await rlist.send("开始检查人数类") for group_info in group_list: # 获取群成员数量 member_count = group_info["member_count"] @@ -38,6 +40,39 @@ async def _(bot: Bot): await rlist.send( f"群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count}" ) + # 检查每个群的人有没有自己的好友 + await rlist.send("开始检查好友类") + + # 提前获取好友列表和群成员列表缓存 + friend_list = await bot.get_friend_list() + friend_list_qq = [friend["user_id"] for friend in friend_list] + + group_member_lists = {} + for group_info in group_list: + group_member_list = await bot.get_group_member_list( + group_id=group_info["group_id"] + ) + group_member_lists[group_info["group_id"]] = [ + member["user_id"] for member in group_member_list + ] + # 输出进度,百分比和当前群号和数量 + logger.info( + f"获取所有群的成员进度已完成{group_list.index(group_info)/len(group_list)*100:.2f}% 已完成:{group_list.index(group_info)}/{len(group_list)}" + ) + + for group_info in group_list: + # 获取群成员数量 + member_count = group_info["member_count"] + group_member_list_qq = group_member_lists[group_info["group_id"]] + + if not set(friend_list_qq) & set(group_member_list_qq): + await rlist.send( + f"群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count}" + ) + # 输出日志进度,百分比和当前群号和(数量/总数),输出两个set的交集在群里的占比 + logger.info( + f"已完成{group_list.index(group_info)/len(group_list)*100:.2f}% 群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count} 交集占比:{len(set(friend_list_qq) & set(group_member_list_qq))/len(set(friend_list_qq)):.2f} 交集数量:{len(set(friend_list_qq) & set(group_member_list_qq))}" + ) await rlist.finish("已发送所有群信息") @@ -52,6 +87,7 @@ async def _(bot: Bot): # 获取群列表 group_list = await bot.get_group_list() # 获取群信息 + await rgroup.send("开始检查人数类") for group_info in group_list: # 获取群成员数量 member_count = group_info["member_count"] @@ -62,4 +98,39 @@ async def _(bot: Bot): await rgroup.send( f"群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count} 已移除" ) + # 检查每个群的人有没有自己的好友 + await rgroup.send("开始检查好友类") + + # 提前获取好友列表和群成员列表缓存 + friend_list = await bot.get_friend_list() + friend_list_qq = [friend["user_id"] for friend in friend_list] + + group_member_lists = {} + for group_info in group_list: + group_member_list = await bot.get_group_member_list( + group_id=group_info["group_id"] + ) + group_member_lists[group_info["group_id"]] = [ + member["user_id"] for member in group_member_list + ] + # 输出进度,百分比和当前群号和数量 + logger.info( + f"获取所有群的成员进度已完成{group_list.index(group_info)/len(group_list)*100:.2f}% 已完成:{group_list.index(group_info)}/{len(group_list)}" + ) + + for group_info in group_list: + # 获取群成员数量 + member_count = group_info["member_count"] + group_member_list_qq = group_member_lists[group_info["group_id"]] + + if not set(friend_list_qq) & set(group_member_list_qq): + await bot.set_group_leave(group_id=group_info["group_id"]) + await rgroup.send( + f"群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count} 已移除" + ) + # 输出日志进度,百分比和当前群号和(数量/总数),输出两个set的交集在群里的占比 + logger.info( + f"已完成{group_list.index(group_info)/len(group_list)*100:.2f}% 群号:{group_info['group_id']} 群名:{group_info['group_name']} 群成员数量:{member_count} 交集占比:{len(set(friend_list_qq) & set(group_member_list_qq))/len(set(friend_list_qq)):.2f} 交集数量:{len(set(friend_list_qq) & set(group_member_list_qq))}" + ) + await rgroup.finish("已发送所有群信息")