選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

contacts_endpoint.py 2.7KB

1ヶ月前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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