| 29 | """简单的 HTTP 处理器,用于捕获飞书事件的 chat_id""" |
| 30 | |
| 31 | def do_POST(self): |
| 32 | content_length = int(self.headers.get('Content-Length', 0)) |
| 33 | body = self.rfile.read(content_length) |
| 34 | |
| 35 | try: |
| 36 | event = json.loads(body.decode('utf-8')) |
| 37 | event_type = event.get("type", "") |
| 38 | |
| 39 | # 跳过 url_verification |
| 40 | if event_type == "url_verification": |
| 41 | challenge = event.get("challenge", "") |
| 42 | self.send_response(200) |
| 43 | self.send_header('Content-Type', 'application/json') |
| 44 | self.end_headers() |
| 45 | self.wfile.write(json.dumps({"challenge": challenge}).encode('utf-8')) |
| 46 | return |
| 47 | |
| 48 | # 解析事件 |
| 49 | header = event.get("header", {}) |
| 50 | event_type = header.get("event_type", "") |
| 51 | |
| 52 | if event_type == "im.message.receive_v1": |
| 53 | event_data = event.get("event", {}) |
| 54 | message = event_data.get("message", {}) |
| 55 | sender = event_data.get("sender", {}) |
| 56 | |
| 57 | chat_id = message.get("chat_id", "") |
| 58 | msg_type = message.get("msg_type", "") |
| 59 | content_raw = message.get("content", "{}") |
| 60 | |
| 61 | # 解析消息内容 |
| 62 | try: |
| 63 | content = json.loads(content_raw) if isinstance(content_raw, str) else content_raw |
| 64 | except json.JSONDecodeError: |
| 65 | content = {"text": content_raw} |
| 66 | |
| 67 | text = content.get("text", "") |
| 68 | sender_type = sender.get("sender_type", "") |
| 69 | open_id = sender.get("sender_id", {}).get("open_id", "") |
| 70 | user_id = sender.get("sender_id", {}).get("user_id", "") |
| 71 | |
| 72 | # 跳过 bot 消息 |
| 73 | if sender_type == "app_bot": |
| 74 | return |
| 75 | |
| 76 | # 打印 chat_id 信息 |
| 77 | print("\n" + "="*60) |
| 78 | print(f"📱 收到消息!") |
| 79 | print("="*60) |
| 80 | print(f" chat_id: {chat_id}") |
| 81 | print(f" open_id: {open_id}") |
| 82 | print(f" user_id: {user_id or '(空)'}") |
| 83 | print(f" sender_type:{sender_type}") |
| 84 | print(f" msg_type: {msg_type}") |
| 85 | print(f" 消息内容: {text[:50]}...") |
| 86 | print("="*60) |
| 87 | print("\n👉 请将上面的 chat_id 复制到 roles.json 中对应的角色下") |
| 88 | print(" 例如:\"rolea\": { \"feishu_chat_id\": \"" + chat_id + "\" }\n") |