from fastapi import APIRouter,Request,HTTPException from pydantic import BaseModel from fastapi import APIRouter, Depends from pydantic import BaseModel, ValidationError from model.models import AgentConfig,validate_wxid,auth_required_time import threading import asyncio import time from typing import Dict, Tuple, Any sns_router = APIRouter(prefix="/api/sns") class SendTextRequest(BaseModel): wxid: str content:str class SendImagesRequest(BaseModel): wxid: str content:str imageUrls:list class SendVideoRequest(BaseModel): wxid: str content:str videoUrl:str videoThumbUrl:str async def auth_required_time(request: Request,wxid:str): if not wxid: return {"code": 400, "message": "wxid 不能为空"} # 模拟获取登录信息 k, loginfo = await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) if not loginfo: return {"code": 404, "message": f"{wxid} 微信信息不存在"} login_status = loginfo.get('status', '0') if login_status != '1': return {"code": 401, "message": f"{wxid} 已经离线"} creation_timestamp = int(loginfo.get('create_at', time.time())) current_timestamp = time.time() three_days_seconds = 3 * 24 * 60 * 60 # 三天的秒数 diff_flag = (current_timestamp - creation_timestamp) >= three_days_seconds if not diff_flag: return {'code': 401, 'message': '用户创建不够三天,不能使用该功能'} return k, loginfo @sns_router.post("/sendtext", response_model=None) async def send_text(request: Request, body: SendTextRequest, ): wxid = body.wxid content = body.content auth = await auth_required_time(request, wxid) if isinstance(auth, Dict): return auth k, loginfo = auth token_id = loginfo.get('tokenId') app_id = loginfo.get('appId') ret, msg, data = await request.app.state.gewe_service.send_text_sns_async(token_id, app_id, content) if ret != 200: return { 'code': ret, 'message': msg } return data @sns_router.post("/sendimages", response_model=None) async def send_text(request: Request, body: SendImagesRequest, ): wxid = body.wxid content = body.content image_urls=body.imageUrls auth = await auth_required_time(request, wxid) if isinstance(auth, Dict): return auth k, loginfo = auth token_id = loginfo.get('tokenId') app_id = loginfo.get('appId') ret, msg, data =await request.app.state.gewe_service.upload_sns_image_async(token_id, app_id, image_urls) if ret != 200: return { 'code': ret, 'message': msg } ret, msg, data = await request.app.state.gewe_service.send_image_sns_async(token_id, app_id, content,data) if ret != 200: return { 'code': ret, 'message': msg } return data @sns_router.post("/sendvideo", response_model=None) async def send_video(request: Request, body: SendVideoRequest, ): wxid = body.wxid content = body.content video_url=body.videoUrl video_thumb_url=body.videoThumbUrl auth = await auth_required_time(request, wxid) if isinstance(auth, Dict): return auth k, loginfo = auth token_id = loginfo.get('tokenId') app_id = loginfo.get('appId') ret, msg, data = await request.app.state.gewe_service.upload_sns_video_async(token_id, app_id, video_url,video_thumb_url) if ret != 200: return { 'code': ret, 'message': msg } ret, msg, data = await request.app.state.gewe_service.send_video_sns_async(token_id, app_id, content,data) if ret != 200: return { 'code': ret, 'message': msg } return data