modified: README.md
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
This commit is contained in:
97
app.py
Normal file
97
app.py
Normal file
@ -0,0 +1,97 @@
|
||||
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}")
|
Reference in New Issue
Block a user