# 舞萌DX AimeDB 服务器模拟实现 # 适用于舞萌DX 2024 # 理论可用于 HDD 登号等(这种情况下自行修改 hosts # SGWCMAID111111111111AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ## 配置 # 0 返回本地生成的假结果 # 1 原样返回官方服务器的结果 useOfficialServer = 0 from loguru import logger # 解析命令行参数,作为用户 ID import argparse try: parser = argparse.ArgumentParser(description="舞萌DX AimeDB 服务器模拟实现") #parser.add_argument("userId", type=int, help="用户 ID") #args = parser.parse_args() #DUMMY_USER_ID = args.userId raise Exception("未传入用户 ID") except Exception as e: logger.warning(f"{e},未传入用户 ID,使用默认值") DUMMY_USER_ID = 1 from fastapi import ( FastAPI, Request ) from fastapi.responses import ( PlainTextResponse, JSONResponse ) import json import uvicorn from loguru import logger # 将当前目录的父目录加入到 sys.path 中 import sys from pathlib import Path current_dir = Path(__file__).resolve().parent parent_dir = current_dir.parent sys.path.append(str(parent_dir)) from API_AimeDB import implAimeDB, calcSEGAAimeDBAuthKey app = FastAPI() @app.post('/qrcode/api/alive_check') async def qrcode_alive_check_api(): return PlainTextResponse('alive') @app.post('/wc_aime/api/alive_check') async def wc_aime_alive_check_api(): return PlainTextResponse('alive') @app.post('/wc_aime/api/get_data') async def get_data_dummy_api(request: Request): gotRequest = json.loads((await request.body()).decode()) if useOfficialServer == 0: fakeTimestamp = str(int(gotRequest['timestamp'])+3) currentResponse = { 'errorID': 0, 'key': calcSEGAAimeDBAuthKey(str(DUMMY_USER_ID), fakeTimestamp), 'timestamp': fakeTimestamp, 'userID': DUMMY_USER_ID } logger.info(f"返回假结果: {currentResponse}") return JSONResponse(currentResponse) elif useOfficialServer == 1: # 发给真正的 AimeDB realAimeDBResponse = implAimeDB(gotRequest['qrCode'], True) return JSONResponse(json.loads(realAimeDBResponse)) else: pass if __name__ == '__main__': uvicorn.run(app, host="0.0.0.0", port=80)