From ff6fc7fbddd4b06d83e7f5f2deb87553764e2781 Mon Sep 17 00:00:00 2001 From: foxplaying <166147707+foxplaying@users.noreply.github.com> Date: Thu, 30 Oct 2025 20:00:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0QQ=E9=A2=91=E9=81=93=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/recv_handler/message_handler.py | 38 ++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/recv_handler/message_handler.py b/src/recv_handler/message_handler.py index 2f2a657..09601e0 100644 --- a/src/recv_handler/message_handler.py +++ b/src/recv_handler/message_handler.py @@ -383,7 +383,7 @@ class MessageHandler: gift = meta.get("giftData", {}) gift_name = gift.get("giftName", "未知礼物") gift_msg = gift.get("giftMsg", "") - seg_message.append(Seg(type="text", data=f"[收到礼物] {gift_name}:{gift_msg}")) + seg_message.append(Seg(type="text", data=f"[收到礼物] {gift_name}:{gift_msg}")) # 推荐联系人 elif app_name == "com.tencent.contact.lua": @@ -408,7 +408,7 @@ class MessageHandler: preview_url = news.get("preview", "") if tag and title and tag in title: title = title.replace(tag, "", 1).strip(":: -— ") - seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) + seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) if preview_url: try: image_base64 = await get_image_base64(preview_url) @@ -425,7 +425,7 @@ class MessageHandler: cover_url = feed.get("cover", "") if tag and title and tag in title: title = title.replace(tag, "", 1).strip(":: -— ") - seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) + seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) if cover_url: try: image_base64 = await get_image_base64(cover_url) @@ -448,7 +448,7 @@ class MessageHandler: except Exception as e: logger.warning(f"群公告Base64解码失败: {e}") if title and text: - content = f"[{title}]:{text}" + content = f"[{title}]:{text}" elif title: content = f"[{title}]" elif text: @@ -464,7 +464,7 @@ class MessageHandler: desc = detail.get("desc", "") preview_url = detail.get("preview", "") tag = "QQ小程序" - seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) + seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) if preview_url: try: image_base64 = await get_image_base64(preview_url) @@ -500,6 +500,32 @@ class MessageHandler: except Exception as e: logger.error(f"QQ空间图片下载失败: {e}") + # QQ频道分享(含预览图) + elif app_name == "com.tencent.forum": + detail = meta.get("detail") if isinstance(meta, dict) else None + if detail: + feed = detail.get("feed", {}) + poster = detail.get("poster", {}) + channel_info = detail.get("channel_info", {}) + guild_name = channel_info.get("guild_name", "") + nick = poster.get("nick", "QQ用户") + title = feed.get("title", {}).get("contents", [{}])[0].get("text_content", {}).get("text", "帖子") + face_content = "" + for item in feed.get("contents", {}).get("contents", []): + emoji = item.get("emoji_content") + if emoji: + eid = emoji.get("id") + if eid in qq_face: + face_content += qq_face.get(eid, "") + pic_urls = [img.get("pic_url") for img in feed.get("images", []) if img.get("pic_url")] + seg_message.append(Seg(type="text", data=f"[频道帖子] [{guild_name}]{nick}:{title}{face_content}")) + for pic_url in pic_urls: + try: + image_base64 = await get_image_base64(pic_url) + seg_message.append(Seg(type="image", data=image_base64)) + except Exception as e: + logger.error(f"QQ频道图片下载失败: {e}") + # QQ地图位置分享 elif app_name == "com.tencent.map": location = meta.get("Location.Search", {}) @@ -554,7 +580,7 @@ class MessageHandler: if not desc: desc = "" - seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) + seg_message.append(Seg(type="text", data=f"[{tag}] {title}:{desc}")) # 未识别类型 else: