import logging from flask import Flask, request, jsonify from logging.handlers import RotatingFileHandler from functools import wraps from datetime import datetime from src import mainprocess as src app = Flask(__name__) #===rebot===# # 处理私聊消息 # 处理群聊消息 @app.route('/', methods=["POST"]) def handle_event(): try: event = request.get_json() event_type = event.get('post_type') # 1. 处理私聊消息 if event_type == 'message' and event.get('message_type') == 'private': # 注意:私聊消息在顶层有 user_id uid = event.get('user_id') message = event.get('raw_message') src.process_message(uid, None, message) # 2. 处理群消息 elif event_type == 'message' and event.get('message_type') == 'group': gid = event.get('group_id') # 注意:群消息发送者在 sender 内 sender = event.get('sender', {}) uid = sender.get('user_id') message = event.get('raw_message') src.process_message(uid, gid, message) # 3. 处理通知事件(如输入状态) elif event_type == 'notice': notice_type = event.get('notice_type') if notice_type == 'notify' and event.get('sub_type') == 'input_status': # 仅记录,不处理 logging.info(f"用户 {event.get('user_id')} 输入状态变化") elif notice_type == 'group_recall': # 示例:处理群消息撤回 logging.info(f"群 {event.get('group_id')} 撤回消息") else: # 其他通知类型 logging.info(f"Ignored notice: {event}") # 通知事件直接返回成功 return jsonify({ "status": "ok", "retcode": 0, "data": None }) # 4. 处理元事件(如心跳) elif event_type == 'meta_event': # 心跳等元事件直接返回成功 return jsonify({ "status": "ok", "retcode": 0, "data": None }) # 5. 一切正常的消息事件返回成功 return jsonify({ "status": "ok", "retcode": 0, "data": "Processed successfully" }) except KeyError: logging.warning(f"Missing required field in event: {event}") return jsonify({ "status": "failed", "retcode": 10001, "message": "Missing required field" }), 400 except Exception as e: logging.exception(f"Error processing event: {str(e)}") return jsonify({ "status": "failed", "retcode": 20001, "message": "Internal server error" }), 500 if __name__ == '__main__': try: port = 25580 app.run(debug=True, host='0.0.0.0', port=port) except Exception as e: print(f"启动失败: {e}")