Merge pull request #1336 from exynos967/dev

fix: 撤回通知日志优化并避免二次空日志
pull/1338/head
SengokuCola 2025-10-31 19:58:29 +08:00 committed by GitHub
commit 6d70cf7528
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 46 additions and 4 deletions

View File

@ -149,8 +149,51 @@ class ChatBot:
async def handle_notice_message(self, message: MessageRecv):
if message.message_info.message_id == "notice":
message.is_notify = True
logger.info("notice消息")
print(message)
logger.debug("notice消息")
try:
seg = message.message_segment
mi = message.message_info
sub_type = None
scene = None
msg_id = None
recalled_id = None
if getattr(seg, "type", None) == "notify" and isinstance(getattr(seg, "data", None), dict):
sub_type = seg.data.get("sub_type")
scene = seg.data.get("scene")
msg_id = seg.data.get("message_id")
recalled = seg.data.get("recalled_user_info") or {}
if isinstance(recalled, dict):
recalled_id = recalled.get("user_id")
op = mi.user_info
gid = mi.group_info.group_id if mi.group_info else None
# 撤回事件打印;无法获取被撤回者则省略
if sub_type == "recall":
op_name = getattr(op, "user_cardname", None) or getattr(op, "user_nickname", None) or str(getattr(op, "user_id", None))
recalled_name = None
try:
if isinstance(recalled, dict):
recalled_name = (
recalled.get("user_cardname")
or recalled.get("user_nickname")
or str(recalled.get("user_id"))
)
except Exception:
pass
if recalled_name and str(recalled_id) != str(getattr(op, "user_id", None)):
logger.info(f"{op_name} 撤回了 {recalled_name} 的消息")
else:
logger.info(f"{op_name} 撤回了消息")
else:
logger.debug(
f"[notice] sub_type={sub_type} scene={scene} op={getattr(op,'user_nickname',None)}({getattr(op,'user_id',None)}) "
f"gid={gid} msg_id={msg_id} recalled={recalled_id}"
)
except Exception:
logger.info("[notice] (简略) 收到一条通知事件")
return True
@ -215,8 +258,7 @@ class ChatBot:
message.message_segment = Seg(type="seglist", data=modified_message.message_segments)
if await self.handle_notice_message(message):
# return
pass
return
# 处理消息内容,生成纯文本
await message.process()