new file: app.py new file: config/config.toml new file: requirements.txt new file: run.bat new file: run.sh new file: src/__init__.py new file: src/file_store_api.py new file: src/mainprocess.py new file: src/modules/__init__.py new file: src/modules/plugin_modules.py new file: src/modules/user_modules.py new file: src/plugin_manager.py
97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
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}") |