Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

72 lines
2.7KB

  1. from fastapi import APIRouter,Request
  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
  6. contacts_router = APIRouter(prefix="/api/contacts")
  7. class GetContactsRequest(BaseModel):
  8. wxid: str
  9. cache: bool = True # 默认为 True
  10. class DeleteContactsRequest(BaseModel):
  11. wxid: str
  12. friendWxid:str
  13. @contacts_router.post("/getfriends",response_model=None)
  14. async def get_friends(request: Request, body: GetContactsRequest):
  15. wxid = body.wxid
  16. cache=body.cache
  17. k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  18. print(k,loginfo)
  19. if not k:
  20. return {"code":404,"message":f"{wxid} 没有对应的登录信息"}
  21. if cache:
  22. return await request.app.state.gewe_service.get_contacts_brief_from_cache_async(wxid)
  23. else:
  24. token_id=loginfo.get('tokenId','')
  25. app_id=loginfo.get('appId','')
  26. ret,msg,contacts_list=await request.app.state.gewe_service.fetch_contacts_list_async(token_id,app_id)
  27. if ret!=200:
  28. return {'code':ret,'message':msg}
  29. friend_wxids = [c for c in contacts_list['friends'] if c not in ['fmessage', 'medianote','weixin','weixingongzhong']] # 可以调整截取范围
  30. data=await request.app.state.gewe_service.save_contacts_brief_to_cache_async(token_id, app_id, wxid, friend_wxids)
  31. print(f'{wxid}获取实时好友信息')
  32. return data
  33. @contacts_router.post("/deletefriend",response_model=None)
  34. async def delete_friends(request: Request, body: DeleteContactsRequest):
  35. wxid = body.wxid
  36. friend_wxid = body.friendWxid
  37. k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  38. if not k:
  39. return {"code":404,"message":f"{wxid} 没有用户信息"}
  40. token_id=loginfo.get('tokenId','')
  41. app_id=loginfo.get('appId','')
  42. ret, msg, data = await request.app.state.gewe_service.wxchat.delete_friend_async(token_id, app_id, friend_wxid)
  43. if ret !=200:
  44. return {
  45. 'code': ret,
  46. 'message': "删除好友失败"
  47. }
  48. ret, msg, contacts_list = await request.app.state.gewe_service.fetch_contacts_list_async(token_id, app_id)
  49. if ret !=200:
  50. return {
  51. 'code': ret,
  52. 'message': '获取联系人列表失败'
  53. }
  54. friend_wxids = [c for c in contacts_list['friends'] if c not in ['fmessage', 'medianote','weixin','weixingongzhong']] # 可以调整截取范围
  55. data=await request.app.state.gewe_service.save_contacts_brief_to_cache_async(token_id, app_id, wxid, friend_wxids)
  56. return data