Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

126 Zeilen
3.8KB

  1. from fastapi import APIRouter,Request,HTTPException
  2. from pydantic import BaseModel
  3. from fastapi import APIRouter, Depends
  4. from pydantic import BaseModel, ValidationError
  5. from model.models import AgentConfig,validate_wxid,auth_required_time
  6. import threading
  7. import asyncio
  8. import time
  9. from typing import Dict, Tuple, Any
  10. sns_router = APIRouter(prefix="/api/sns")
  11. class SendTextRequest(BaseModel):
  12. wxid: str
  13. content:str
  14. class SendImagesRequest(BaseModel):
  15. wxid: str
  16. content:str
  17. imageUrls:list
  18. class SendVideoRequest(BaseModel):
  19. wxid: str
  20. content:str
  21. videoUrl:str
  22. videoThumbUrl:str
  23. async def auth_required_time(request: Request,wxid:str):
  24. if not wxid:
  25. return {"code": 400, "message": "wxid 不能为空"}
  26. # 模拟获取登录信息
  27. k, loginfo = await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  28. if not loginfo:
  29. return {"code": 404, "message": f"{wxid} 微信信息不存在"}
  30. login_status = loginfo.get('status', '0')
  31. if login_status != '1':
  32. return {"code": 401, "message": f"{wxid} 已经离线"}
  33. creation_timestamp = int(loginfo.get('create_at', time.time()))
  34. current_timestamp = time.time()
  35. three_days_seconds = 3 * 24 * 60 * 60 # 三天的秒数
  36. diff_flag = (current_timestamp - creation_timestamp) >= three_days_seconds
  37. if not diff_flag:
  38. return {'code': 401, 'message': '用户创建不够三天,不能使用该功能'}
  39. return k, loginfo
  40. @sns_router.post("/sendtext", response_model=None)
  41. async def send_text(request: Request, body: SendTextRequest, ):
  42. wxid = body.wxid
  43. content = body.content
  44. auth = await auth_required_time(request, wxid)
  45. if isinstance(auth, Dict):
  46. return auth
  47. k, loginfo = auth
  48. token_id = loginfo.get('tokenId')
  49. app_id = loginfo.get('appId')
  50. ret, msg, data = await request.app.state.gewe_service.send_text_sns_async(token_id, app_id, content)
  51. if ret != 200:
  52. return {
  53. 'code': ret,
  54. 'message': msg
  55. }
  56. return data
  57. @sns_router.post("/sendimages", response_model=None)
  58. async def send_text(request: Request, body: SendImagesRequest, ):
  59. wxid = body.wxid
  60. content = body.content
  61. image_urls=body.imageUrls
  62. auth = await auth_required_time(request, wxid)
  63. if isinstance(auth, Dict):
  64. return auth
  65. k, loginfo = auth
  66. token_id = loginfo.get('tokenId')
  67. app_id = loginfo.get('appId')
  68. ret, msg, data =await request.app.state.gewe_service.upload_sns_image_async(token_id, app_id, image_urls)
  69. if ret != 200:
  70. return {
  71. 'code': ret,
  72. 'message': msg
  73. }
  74. ret, msg, data = await request.app.state.gewe_service.send_image_sns_async(token_id, app_id, content,data)
  75. if ret != 200:
  76. return {
  77. 'code': ret,
  78. 'message': msg
  79. }
  80. return data
  81. @sns_router.post("/sendvideo", response_model=None)
  82. async def send_video(request: Request, body: SendVideoRequest, ):
  83. wxid = body.wxid
  84. content = body.content
  85. video_url=body.videoUrl
  86. video_thumb_url=body.videoThumbUrl
  87. auth = await auth_required_time(request, wxid)
  88. if isinstance(auth, Dict):
  89. return auth
  90. k, loginfo = auth
  91. token_id = loginfo.get('tokenId')
  92. app_id = loginfo.get('appId')
  93. ret, msg, data = await request.app.state.gewe_service.upload_sns_video_async(token_id, app_id, video_url,video_thumb_url)
  94. if ret != 200:
  95. return {
  96. 'code': ret,
  97. 'message': msg
  98. }
  99. ret, msg, data = await request.app.state.gewe_service.send_video_sns_async(token_id, app_id, content,data)
  100. if ret != 200:
  101. return {
  102. 'code': ret,
  103. 'message': msg
  104. }
  105. return data