yj
2025-07-28 69945b730fd3f6b6138ce50e49fc3392fcd74d71
app/services/ecloud_client.py
@@ -20,6 +20,27 @@
        self.session = requests.Session()
        self.session.headers.update(self.headers)
    def _filter_keywords(self, content: str) -> str:
        """
        过滤消息内容中的关键词
        Args:
            content: 原始消息内容
        Returns:
            过滤后的消息内容
        """
        if not settings.keyword_filter_enabled or not settings.keyword_filter_keywords:
            return content
        filtered_content = content
        for keyword in settings.keyword_filter_keywords:
            if keyword in filtered_content:
                filtered_content = filtered_content.replace(keyword, "")
                logger.info(f"过滤关键词: {keyword}")
        return filtered_content
    def get_contact_info(self, w_id: str, wc_id: str) -> Optional[Dict[str, Any]]:
        """
        获取联系人信息
@@ -84,18 +105,21 @@
        Returns:
            发送成功返回True,失败返回False
        """
        # 过滤关键词
        filtered_content = self._filter_keywords(content)
        if max_retries is None:
            from config import settings
            max_retries = settings.max_retry_count
        retry_count = 0
        while retry_count <= max_retries:
            try:
                url = f"{self.base_url}/sendText"
                payload = {"wId": w_id, "wcId": wc_id, "content": content}
                payload = {"wId": w_id, "wcId": wc_id, "content": filtered_content}
                logger.info(
                    f"发送文本消息: wId={w_id}, wcId={wc_id}, content_length={len(content)}, retry={retry_count}"
                    f"发送文本消息: wId={w_id}, wcId={wc_id}, content_length={len(filtered_content)}, retry={retry_count}"
                )
                response = self.session.post(url, json=payload, timeout=30)
@@ -141,7 +165,9 @@
        Returns:
            发送成功返回True,失败返回False
        """
        return self.send_text_message(w_id, group_id, content)
        # 过滤关键词
        filtered_content = self._filter_keywords(content)
        return self.send_text_message(w_id, group_id, filtered_content)
    def init_address_list(self, w_id: str) -> bool:
        """
@@ -238,6 +264,9 @@
        Returns:
            发送成功返回True,失败返回False
        """
        # 过滤关键词
        filtered_content = self._filter_keywords(content)
        if max_retries is None:
            from config import settings
            max_retries = settings.max_retry_count
@@ -251,12 +280,12 @@
                payload = {
                    "wId": w_id,
                    "wcId": wc_id,
                    "content": content,
                    "content": filtered_content,
                    "at": at_str
                }
                logger.info(
                    f"发送群聊@消息: wId={w_id}, wcId={wc_id}, at={at_str}, content_length={len(content)}, retry={retry_count}"
                    f"发送群聊@消息: wId={w_id}, wcId={wc_id}, at={at_str}, content_length={len(filtered_content)}, retry={retry_count}"
                )
                response = self.session.post(url, json=payload, timeout=30)
@@ -290,6 +319,47 @@
        )
        return False
    def query_online_wechat_list(self) -> Optional[List[Dict[str, str]]]:
        """
        查询账号中在线的微信列表
        Returns:
            在线微信列表,每个元素包含wcId和wId,失败返回None
            返回格式: [
                {
                    "wcId": "wxid_i6qsbbjenju2",
                    "wId": "72223018-7f2a-4f4f-bfa3-26e47dbd61"
                }
            ]
        """
        try:
            url = f"{self.base_url}/queryLoginWx"
            payload = {}
            logger.info("查询在线微信列表")
            response = self.session.post(url, json=payload, timeout=30)
            response.raise_for_status()
            result = response.json()
            if result.get("code") == "1000":
                online_list = result.get("data", [])
                logger.info(f"成功查询在线微信列表: count={len(online_list)}")
                return online_list
            else:
                logger.warning(
                    f"查询在线微信列表失败: code={result.get('code')}, message={result.get('message')}"
                )
                return []
        except requests.exceptions.RequestException as e:
            logger.error(f"查询在线微信列表网络错误: error={str(e)}")
            return None
        except Exception as e:
            logger.error(f"查询在线微信列表异常: error={str(e)}")
            return None
# 全局E云管家客户端实例
ecloud_client = ECloudClient()