()
| 233 | # ═══════════════════════════════════════════════════════════════ |
| 234 | |
| 235 | def main() -> None: |
| 236 | import ssl |
| 237 | import certifi |
| 238 | |
| 239 | import websockets |
| 240 | if os.environ.get("NANORESEARCH_ALLOW_INSECURE_SSL") == "1": |
| 241 | logger.warning( |
| 242 | "NANORESEARCH_ALLOW_INSECURE_SSL=1: disabling Feishu WebSocket SSL verification" |
| 243 | ) |
| 244 | ssl_context = ssl.create_default_context() |
| 245 | ssl_context.check_hostname = False |
| 246 | ssl_context.verify_mode = ssl.CERT_NONE |
| 247 | |
| 248 | _original_connect = websockets.connect |
| 249 | |
| 250 | def _connect_with_insecure_ssl(*args, **kwargs): |
| 251 | if 'ssl' not in kwargs: |
| 252 | kwargs['ssl'] = ssl_context |
| 253 | return _original_connect(*args, **kwargs) |
| 254 | |
| 255 | websockets.connect = _connect_with_insecure_ssl |
| 256 | |
| 257 | logging.basicConfig( |
| 258 | level=logging.INFO, |
| 259 | format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", |
| 260 | ) |
| 261 | |
| 262 | app_id, app_secret = _load_feishu_credentials() |
| 263 | bot = FeishuBot(app_id, app_secret) |
| 264 | |
| 265 | logger.info("NanoResearch 飞书助手启动中...") |
| 266 | |
| 267 | def on_message(data: lark.im.v1.P2ImMessageReceiveV1) -> None: |
| 268 | try: |
| 269 | event = data.event |
| 270 | message = event.message |
| 271 | sender = event.sender |
| 272 | |
| 273 | if message.message_type != "text": |
| 274 | return |
| 275 | |
| 276 | chat_id = message.chat_id |
| 277 | message_id = message.message_id |
| 278 | sender_id = sender.sender_id.open_id if sender.sender_id else "" |
| 279 | |
| 280 | try: |
| 281 | content = json.loads(message.content) |
| 282 | text = content.get("text", "") |
| 283 | except (json.JSONDecodeError, TypeError): |
| 284 | text = "" |
| 285 | |
| 286 | logger.info("on_message: raw_content=%r text=%r", message.content, text[:200] if text else "") |
| 287 | |
| 288 | if not text.strip(): |
| 289 | return |
| 290 | |
| 291 | bot.handle_message(chat_id, message_id, text, sender_id) |
| 292 |
no test coverage detected