You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.2KB

  1. from flask_restful import Resource, reqparse
  2. from pydantic import BaseModel, ValidationError
  3. from flask import jsonify,request,json
  4. from common import redis_helper,utils
  5. from wechat import gewe_chat
  6. from dataclasses import dataclass, asdict
  7. from typing import List
  8. import json
  9. from model import Models
  10. class GetWxchatConfigResource(Resource):
  11. def __init__(self):
  12. self.parser = reqparse.RequestParser()
  13. self.wxchat = gewe_chat.wxchat
  14. def post(self):
  15. req = request.get_json()
  16. wxid = req.get("wxid")
  17. k,loginfo=utils.get_login_info_by_wxid(wxid)
  18. if not k:
  19. response=jsonify({"code": 404, "message": f"{wxid} 没有对应的登录信息"})
  20. response.status_code = 404
  21. return response
  22. config=self.wxchat.get_wxchat_config_from_cache(wxid)
  23. return jsonify(config)
  24. # @dataclass
  25. # class AgentConfig(BaseModel):
  26. # chatroomIdWhiteList: List[str] = []
  27. # agentTokenId: str
  28. # agentEnabled: bool
  29. # addContactsFromChatroomIdWhiteList: List[str] = []
  30. # chatWaitingMsgEnabled: bool
  31. class SaveWxchatConfigResource(Resource):
  32. def __init__(self):
  33. self.parser = reqparse.RequestParser()
  34. self.wxchat = gewe_chat.wxchat
  35. def post(self):
  36. req = request.get_json()
  37. wxid = req.get("wxid")
  38. data = req.get("data")
  39. # hash_key="__AI_OPS_WX__:WXCHAT_CONFIG"
  40. # redis_helper.redis_helper.update_hash_field(hash_key, wxid, json.dumps(data,ensure_ascii=False))
  41. k,loginfo=utils.get_login_info_by_wxid(wxid)
  42. if not k:
  43. response=jsonify({"code": 404, "message": f"{wxid} 没有对应的登录信息"})
  44. response.status_code = 404
  45. return response
  46. try:
  47. # 使用 Pydantic 严格校验数据类型和结构
  48. validated_config = Models.AgentConfig.model_validate(data)
  49. except ValidationError as e:
  50. response=jsonify({'code': 407, 'message': e.errors().__str__()})
  51. response.status_code = 407
  52. return response
  53. self.wxchat.save_wxchat_config(wxid, data)
  54. return jsonify({'wxid': wxid, 'config': data})