完善表情资产后台能力并补充群总结落库

- 新增表情资产表,支持表情文件落盘后的资产沉淀、查询与发送时间回写
- 将表情下载从消息主链路中移出,改为后台定时批处理,降低同步入库阻塞风险
- 抽取通用 CDN 下载与 base64 落盘能力,统一图片与表情文件处理方式
- 在后台通讯录聊天窗口增加表情资产面板,支持查看资产并直接选择发送表情
- 新增后台表情资产接口,支持按群过滤最近表情素材
- 优化消息列表中的表情消息展示,支持在后台直接预览表情图片
- 启动时不再同步补偿历史表情,统一交由定时任务处理,避免影响系统稳定性
- 新增群总结落库表,支持将每日总结写入数据库,便于后续知识库提取与复用
- 将定时总结结果写入数据库,保留总结文本、周期信息、消息数量和元数据
This commit is contained in:
liuwei
2026-04-02 17:52:17 +08:00
parent a4b87f4c7a
commit 2a54650a6f
11 changed files with 671 additions and 17 deletions

View File

@@ -403,9 +403,46 @@ def api_send_message():
'message': '消息发送中'
})
elif msg_type == 'emoji':
md5 = content.get('md5') if isinstance(content, dict) else None
total_length = int((content or {}).get('total_length') or 0) if isinstance(content, dict) else 0
if not md5 or total_length <= 0:
return jsonify({'success': False, 'message': '缺少表情参数'})
send_message_in_thread(server.client.send_emoji_message, wxid, md5, total_length)
server.emoji_asset_db.mark_sent(md5)
return jsonify({
'success': True,
'message': '表情发送中'
})
else:
return jsonify({'success': False, 'message': '不支持的消息类型'})
except Exception as e:
logger.exception(f"发送消息失败: {e}")
return jsonify({'success': False, 'message': str(e)}), 500
@contacts_bp.route('/api/emoji_assets', methods=['GET'])
@login_required
def api_emoji_assets():
"""获取表情资产列表API"""
try:
server = current_app.dashboard_server
limit = min(max(int(request.args.get("limit", 60) or 60), 1), 200)
roomid = request.args.get("roomid", "").strip()
assets = server.emoji_asset_db.list_assets(limit=limit, chatroom_id=roomid)
for asset in assets:
source_wxid = asset.get("source_wxid", "")
asset["source_name"] = server.contact_manager.get_nickname(source_wxid) or source_wxid
source_chatroom_id = asset.get("source_chatroom_id", "")
asset["source_chatroom_name"] = server.contact_manager.get_nickname(source_chatroom_id) or source_chatroom_id
return jsonify({
"success": True,
"data": {
"assets": assets
}
})
except Exception as e:
logger.error(f"获取表情资产列表失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500