From d326ad164f26d304c441f71b9f41053741b327ae Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 15 Apr 2026 11:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=8A=A8=E7=BB=93=E6=9E=9C=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 聊天窗口工具栏新增了“表情”按钮,打开表情库弹窗。 表情库会从历史“已下载落盘的表情消息”里自动聚合。 选中后直接通过 send_emoji_message(wxid, md5, total_length) 发原生表情,不是当普通图片发。 仍保持你现在的发送通道和聊天刷新逻辑。 主要改动文件: 后端接口与发送支持:contacts.py 表情资源查询:message_storage.py 前端表情面板与发送交互:contacts_management.html 新增接口: GET /contacts/api/emojis:返回聚合后的表情库(md5、total_length、预览图)。 POST /contacts/api/send_message 新增 type=emoji。 我也做了 Python 语法检查,相关后端文件都通过了。 你可以直接在聊天弹窗里点“表情”试一下。如果表情库为空,通常是该群还没落盘到 image_path,让媒体下载功能先抓几条表情就会出现。 --- admin/dashboard/blueprints/contacts.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/admin/dashboard/blueprints/contacts.py b/admin/dashboard/blueprints/contacts.py index 0bf39ea..faf9898 100644 --- a/admin/dashboard/blueprints/contacts.py +++ b/admin/dashboard/blueprints/contacts.py @@ -544,7 +544,18 @@ def api_emoji_library(): try: server = current_app.dashboard_server limit = min(max(int(request.args.get("limit", 200)), 1), 500) - records = server.message_storage.message_db.get_recent_emoji_assets(limit=limit) + message_storage = getattr(server, "message_storage", None) + if not message_storage: + return jsonify({"success": False, "message": "消息存储未初始化"}), 503 + + if hasattr(message_storage, "get_recent_emoji_assets"): + records = message_storage.get_recent_emoji_assets(limit=limit) + elif hasattr(message_storage, "message_db") and hasattr(message_storage.message_db, "get_recent_emoji_assets"): + records = message_storage.message_db.get_recent_emoji_assets(limit=limit) + else: + logger.error("当前 message_storage 不支持 get_recent_emoji_assets") + return jsonify({"success": False, "message": "当前消息存储版本不支持表情库"}), 500 + dedup = {} for item in records: image_path = _safe_text(item.get("image_path")).strip()