Skip to content

Commit

Permalink
✨ 优化好友请求处理逻辑,增加群成员检查;更新群信息输出和日志记录
Browse files Browse the repository at this point in the history
  • Loading branch information
wling-art committed Dec 5, 2024
1 parent 5cf9985 commit 81b6927
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 24 deletions.
46 changes: 23 additions & 23 deletions src/plugins/addfirend/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]:
Expand Down Expand Up @@ -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"
Expand All @@ -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)
73 changes: 72 additions & 1 deletion src/plugins/removegroup/__init__.py
Original file line number Diff line number Diff line change
@@ -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")
Expand All @@ -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"]
Expand All @@ -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("已发送所有群信息")


Expand All @@ -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"]
Expand All @@ -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("已发送所有群信息")

0 comments on commit 81b6927

Please sign in to comment.