|
- 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
|