mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-05 20:00:04 +08:00
feat: show ban info in request notices (#2125)
Co-authored-by: jiang <helloworld@jiang.cn>
This commit is contained in:
@@ -15,6 +15,7 @@ from nonebot_plugin_session import EventSession
|
|||||||
|
|
||||||
from zhenxun.configs.config import BotConfig, Config
|
from zhenxun.configs.config import BotConfig, Config
|
||||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
from zhenxun.configs.utils import PluginExtraData, RegisterConfig
|
||||||
|
from zhenxun.models.ban_console import BanConsole
|
||||||
from zhenxun.models.event_log import EventLog
|
from zhenxun.models.event_log import EventLog
|
||||||
from zhenxun.models.fg_request import FgRequest
|
from zhenxun.models.fg_request import FgRequest
|
||||||
from zhenxun.models.friend_user import FriendUser
|
from zhenxun.models.friend_user import FriendUser
|
||||||
@@ -86,6 +87,44 @@ async def _safe_get_group_info(bot, group_id: str):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _format_ban_target(ban_data: BanConsole) -> str:
|
||||||
|
user_id = ban_data.user_id or ""
|
||||||
|
group_id = ban_data.group_id or ""
|
||||||
|
if user_id and group_id:
|
||||||
|
return f"用户 {user_id} 在群组 {group_id}"
|
||||||
|
if user_id:
|
||||||
|
return f"用户 {user_id}"
|
||||||
|
return f"群组 {group_id}"
|
||||||
|
|
||||||
|
|
||||||
|
async def _build_permanent_ban_tip(
|
||||||
|
*targets: tuple[str | None, str | None],
|
||||||
|
) -> str:
|
||||||
|
ban_list: list[BanConsole] = []
|
||||||
|
seen: set[tuple[str, str]] = set()
|
||||||
|
for user_id, group_id in targets:
|
||||||
|
ban_data = await BanConsole.get_ban(user_id=user_id, group_id=group_id)
|
||||||
|
if not ban_data or ban_data.duration != -1:
|
||||||
|
continue
|
||||||
|
key = (ban_data.user_id or "", ban_data.group_id or "")
|
||||||
|
if key in seen:
|
||||||
|
continue
|
||||||
|
seen.add(key)
|
||||||
|
ban_list.append(ban_data)
|
||||||
|
if not ban_list:
|
||||||
|
return ""
|
||||||
|
lines = ["", "永久黑名单提示:"]
|
||||||
|
for ban_data in ban_list:
|
||||||
|
lines.extend(
|
||||||
|
[
|
||||||
|
f"- {_format_ban_target(ban_data)} 在黑名单中",
|
||||||
|
f" 操作员ID:{ban_data.operator}",
|
||||||
|
f" 封禁原因:{ban_data.ban_reason or '无'}",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
|
||||||
@friend_req.handle()
|
@friend_req.handle()
|
||||||
async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSession):
|
async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSession):
|
||||||
logger.debug("收录好友请求...", "好友请求", target=event.user_id)
|
logger.debug("收录好友请求...", "好友请求", target=event.user_id)
|
||||||
@@ -124,6 +163,7 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi
|
|||||||
cache_key = str(event.user_id)
|
cache_key = str(event.user_id)
|
||||||
if not cache.get(cache_key):
|
if not cache.get(cache_key):
|
||||||
cache.set(cache_key, "1")
|
cache.set(cache_key, "1")
|
||||||
|
ban_tip = await _build_permanent_ban_tip((str(event.user_id), None))
|
||||||
results = await PlatformUtils.send_superuser(
|
results = await PlatformUtils.send_superuser(
|
||||||
bot,
|
bot,
|
||||||
f"*****一份好友申请*****\n"
|
f"*****一份好友申请*****\n"
|
||||||
@@ -131,7 +171,8 @@ async def _(bot: v12Bot | v11Bot, event: FriendRequestEvent, session: EventSessi
|
|||||||
f"昵称:{nickname}({event.user_id})\n"
|
f"昵称:{nickname}({event.user_id})\n"
|
||||||
f"自动同意:{'√' if base_config.get('AUTO_ADD_FRIEND') else '×'}\n"
|
f"自动同意:{'√' if base_config.get('AUTO_ADD_FRIEND') else '×'}\n"
|
||||||
f"日期:{datetime.now().replace(microsecond=0)}\n"
|
f"日期:{datetime.now().replace(microsecond=0)}\n"
|
||||||
f"备注:{event.comment}",
|
f"备注:{event.comment}"
|
||||||
|
f"{ban_tip}",
|
||||||
)
|
)
|
||||||
if message_ids := [
|
if message_ids := [
|
||||||
str(r[1].msg_ids[0]["message_id"])
|
str(r[1].msg_ids[0]["message_id"])
|
||||||
@@ -210,13 +251,19 @@ async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSessio
|
|||||||
group_id=str(event.group_id),
|
group_id=str(event.group_id),
|
||||||
handle_type=RequestHandleType.APPROVE,
|
handle_type=RequestHandleType.APPROVE,
|
||||||
)
|
)
|
||||||
|
ban_tip = await _build_permanent_ban_tip(
|
||||||
|
(str(event.user_id), None),
|
||||||
|
(str(event.user_id), str(event.group_id)),
|
||||||
|
(None, str(event.group_id)),
|
||||||
|
)
|
||||||
results = await PlatformUtils.send_superuser(
|
results = await PlatformUtils.send_superuser(
|
||||||
bot,
|
bot,
|
||||||
f"*****一份入群申请*****\n"
|
f"*****一份入群申请*****\n"
|
||||||
f"ID:{f.id}\n"
|
f"ID:{f.id}\n"
|
||||||
f"申请人:{nickname}({event.user_id})\n群聊:"
|
f"申请人:{nickname}({event.user_id})\n群聊:"
|
||||||
f"{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}\n"
|
f"{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}\n"
|
||||||
"注: 该请求已自动同意",
|
"注: 该请求已自动同意"
|
||||||
|
f"{ban_tip}",
|
||||||
)
|
)
|
||||||
await asyncio.sleep(random.randint(1, 5))
|
await asyncio.sleep(random.randint(1, 5))
|
||||||
await bot.send_private_msg(
|
await bot.send_private_msg(
|
||||||
@@ -263,13 +310,19 @@ async def _(bot: v12Bot | v11Bot, event: GroupRequestEvent, session: EventSessio
|
|||||||
if kick_count
|
if kick_count
|
||||||
else ""
|
else ""
|
||||||
)
|
)
|
||||||
|
ban_tip = await _build_permanent_ban_tip(
|
||||||
|
(str(event.user_id), None),
|
||||||
|
(str(event.user_id), str(event.group_id)),
|
||||||
|
(None, str(event.group_id)),
|
||||||
|
)
|
||||||
results = await PlatformUtils.send_superuser(
|
results = await PlatformUtils.send_superuser(
|
||||||
bot,
|
bot,
|
||||||
f"*****一份入群申请*****\n"
|
f"*****一份入群申请*****\n"
|
||||||
f"ID:{f.id}\n"
|
f"ID:{f.id}\n"
|
||||||
f"申请人:{nickname}({event.user_id})\n群聊:"
|
f"申请人:{nickname}({event.user_id})\n群聊:"
|
||||||
f"{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}"
|
f"{event.group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}"
|
||||||
f"{kick_message}",
|
f"{kick_message}"
|
||||||
|
f"{ban_tip}",
|
||||||
)
|
)
|
||||||
if message_ids := [
|
if message_ids := [
|
||||||
str(r[1].msg_ids[0]["message_id"]) for r in results if r[1] and r[1].msg_ids
|
str(r[1].msg_ids[0]["message_id"]) for r in results if r[1] and r[1].msg_ids
|
||||||
|
|||||||
Reference in New Issue
Block a user