from fastapi import APIRouter,Request from pydantic import BaseModel from fastapi import APIRouter, Depends from pydantic import BaseModel, ValidationError from model.models import AgentConfig,validate_wxid contacts_router = APIRouter(prefix="/api/contacts") class GetContactsRequest(BaseModel): wxid: str cache: bool = True # 默认为 True class DeleteContactsRequest(BaseModel): wxid: str friendWxid:str @contacts_router.post("/getfriends",response_model=None) async def get_friends(request: Request, body: GetContactsRequest): wxid = body.wxid cache=body.cache k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) print(k,loginfo) if not k: return {"code":404,"message":f"{wxid} 没有对应的登录信息"} if cache: return await request.app.state.gewe_service.get_contacts_brief_from_cache_async(wxid) else: token_id=loginfo.get('tokenId','') app_id=loginfo.get('appId','') ret,msg,contacts_list=await request.app.state.gewe_service.fetch_contacts_list_async(token_id,app_id) if ret!=200: return {'code':ret,'message':msg} friend_wxids = [c for c in contacts_list['friends'] if c not in ['fmessage', 'medianote','weixin','weixingongzhong']] # 可以调整截取范围 data=await request.app.state.gewe_service.save_contacts_brief_to_cache_async(token_id, app_id, wxid, friend_wxids) print(f'{wxid}获取实时好友信息') return data @contacts_router.post("/deletefriend",response_model=None) async def delete_friends(request: Request, body: DeleteContactsRequest): wxid = body.wxid friend_wxid = body.friendWxid k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) if not k: return {"code":404,"message":f"{wxid} 没有用户信息"} token_id=loginfo.get('tokenId','') app_id=loginfo.get('appId','') ret, msg, data = await request.app.state.gewe_service.wxchat.delete_friend_async(token_id, app_id, friend_wxid) if ret !=200: return { 'code': ret, 'message': "删除好友失败" } ret, msg, contacts_list = await request.app.state.gewe_service.fetch_contacts_list_async(token_id, app_id) if ret !=200: return { 'code': ret, 'message': '获取联系人列表失败' } friend_wxids = [c for c in contacts_list['friends'] if c not in ['fmessage', 'medianote','weixin','weixingongzhong']] # 可以调整截取范围 data=await request.app.state.gewe_service.save_contacts_brief_to_cache_async(token_id, app_id, wxid, friend_wxids) return data