相关信息
主服务端配置文件为 config.py,导入方式为模块导入,故你需要提供一个 Config 类,比如:
class Config:
HOST = '0.0.0.0'
PORT = 80
| 名称 | 类型 | 默认值 | 说明 |
|---|
| HOST | str | '0.0.0.0' | 主机地址 |
| PORT | int | 80 | 监听端口 |
| 名称 | 类型 | 默认值 | 说明 |
|---|
| DEPLOY_MODE | str | 'flask_multithread' | 部署模式,可选值: {"waitress", "gevent", "flask_multithread"} |
| USE_PROXY_FIX | bool | False | 代理修复 ProxyFix |
| USE_CORS | bool | False | 服务端跨域 Flask-CORS |
| 名称 | 类型 | 默认值 | 说明 |
|---|
| LINKPLAY_HOST | str | '0.0.0.0' | 相对于主服务端的子服务端地址 |
| LINKPLAY_UDP_PORT | int | 10900 | 对客户端开放的 UDP 端口 |
| LINKPLAY_TCP_PORT | int | 10901 | 对主服务端开放的 TCP 端口 |
| LINKPLAY_AUTHENTICATION | str | 'my_link_play_server' | TCP 通信校验码 |
| LINKPLAY_DISPLAY_HOST | str | '' | 相对于客户端的子服务端地址 |
| LINKPLAY_TCP_SECRET_KEY | str | '1145141919810' | TCP 通信的 AES 密钥 |
LINKPLAY_HOST 可以留空,此时 Link Play 功能会禁用。LINKPLAY_DISPLAY_HOST 可以留空,则此地址会自动获取。LINKPLAY_TCP_SECRET_KEY 只会取前 16 个字符。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| SSL_CERT | str | '' | SSL 证书的文件路径 |
| SSL_KEY | str | '' | SSL 证书私钥的文件路径 |
注意
不建议这样使用 HTTPS,最好使用中间件、CDN 等提供的 SSL 服务。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| DOWNLOAD_LINK_PREFIX | str | '' | 歌曲数据下载链接前缀 |
| BUNDLE_DOWNLOAD_LINK_PREFIX | str | '' | 内容捆绑包下载链接前缀 |
| DOWNLOAD_USE_NGINX_X_ACCEL_REDIRECT | bool | False | 是否使用 NGINX 的 X-Accel-Redirect |
| NGINX_X_ACCEL_REDIRECT_PREFIX | str | '/nginx_download/' | X-Accel-Redirect 路径前缀 |
| BUNDLE_NGINX_X_ACCEL_REDIRECT_PREFIX | str | '/nginx_bundle_download/' | 下载内容捆绑包的 X-Accel-Redirect 路径前缀 |
| BUNDLE_STRICT_MODE | bool | True | 是否严格限制下载内容捆绑包的对应客户端版本号 |
DOWNLOAD_LINK_PREFIX 和 BUNDLE_DOWNLOAD_LINK_PREFIX 可以留空,此时服务端会自动获取。当存在转发、反向代理、中间件等服务时,可能无法获取正确的地址。此前缀包含主机名和协议名,举例:http(s)://host(:port)/download/。DOWNLOAD_USE_NGINX_X_ACCEL_REDIRECT 启用后,下载内容将返回空,交由 NGINX 处理。BUNDLE_STRICT_MODE 功效详见 TODO。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| SONG_FILE_HASH_PRE_CALCULATE | bool | True | 是否在启动时进行歌曲数据缓存计算 |
| SET_LINKPLAY_SERVER_AS_SUB_PROCESS | bool | True | 是否伴随启动 Link Play 子服务端 |
| 名称 | 类型 | 默认值 | 说明 |
|---|
| GAME_API_PREFIX | str | list[str] | '/<some_word>/<int>' | 游戏 API 的 URL 前缀 |
| OLD_GAME_API_PREFIX | list[str] | [] | 旧 API 的 URL 前缀 |
| ALLOW_APPVERSION | list[str] | [] | 允许登录的游戏版本 |
GAME_API_PREFIX 可以填多个,比如 ['/hello/5', '/nihao/6'],它们会同时工作。GAME_API_PREFIX 的默认值会经常变动,但此文档不一定会及时更新,故这里没有给出真实值,实际默认值举例:'/hanami/29'。OLD_GAME_API_PREFIX 是用来通知用户更新的,若不提供,旧版本客户端无法连接会显示未知错误。ALLOW_APPVERSION 可以留空,服务端将不检查客户端版本。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| ALLOW_INFO_LOG | bool | False | 是否记录 Info 日志到文件 |
| ALLOW_WARNING_LOG | bool | False | 是否记录 Warning 日志到文件 |
ALLOW_WARNING_LOG 会额外显示并记录一些自定义异常,可能会引起强迫症。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| UPDATE_WITH_NEW_CHARACTER_DATA | bool | True | 更新数据库时是否使用最新搭档数据 |
UPDATE_WITH_NEW_CHARACTER_DATA 开启后,更新数据库时,旧的搭档数据会丢失,以最新的官方数据为准;反之,旧的搭档数据会保留,不会更新到最新官方数据。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| IS_APRILFOOLS | bool | True | 愚人节版本开关 |
| WORLD_RANK_MAX | int | 200 | 最大世界排名 |
| AVAILABLE_MAP | list[str] | [] | 当前世界模式活动地图 |
| DEFAULT_MEMORIES | int | 0 | 用户注册后的默认记忆源点数量 |
| ALLOW_SCORE_WITH_NO_SONG | bool | True | 是否接受 unranked 成绩上传 |
| CHARACTER_FULL_UNLOCK | bool | True | 是否采用全解锁搭档 |
| WORLD_SONG_FULL_UNLOCK | bool | True | 是否解锁所有 world song |
| WORLD_SCENERY_FULL_UNLOCK | bool | True | 是否解锁所有主页背景 |
| SAVE_FULL_UNLOCK | bool | False | 是否强制使用全解锁云存档 |
| BEST30_WEIGHT | float | 0.025 | Best 30 潜力值权重 |
| RECENT10_WEIGHT | float | 0.025 | Recent Top 10 潜力值权重 |
| INVASION_START_WEIGHT | float | 0.1 | “侵入开始”的可能性权重 |
| INVASION_HARD_WEIGHT | float | 0.1 | “侵入困难”的可能性权重 |
| MAX_FRIEND_COUNT | int | 50 | 单用户最大好友数 |
| NOTIFICATION_EXPIRE_TIME | int | 180000 | Link Play 邀请有效时间(单位:秒) |
IS_APRILFOOLS 对非愚人节版本客户端无效。WORLD_RANK_MAX 所限制的世界排名是头像旁的数字。- unranked 成绩是指此成绩对应歌曲难度在服务端数据库中无记录或谱面常数为负数。
SAVE_FULL_UNLOCK 开启后,用户云存档将需要手动选择下载或上传。其主要针对剧情和歌曲解锁,对于最终挑战状态应该会固定在 Testify 解锁前。INVASION_START_WEIGHT 和 INVASION_HARD_WEIGHT 调整的是 skill_intruder 技能的触发概率权重,分别对应在开始时被侵入和在困难血条归零时侵入的概率。注意,不触发技能的权重是 1 - INVASION_START_WEIGHT - INVASION_HARD_WEIGHT,将三者归一化后即是真实概率。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| USERNAME | str | 'admin' | 网页管理页面用户名 |
| PASSWORD | str | 'admin' | 网页管理页面密码 |
| SECRET_KEY | str | 1145141919810 | 网页 session 的密钥 |
| 名称 | 类型 | 默认值 | 说明 |
|---|
| API_TOKEN | str | '' | API system 权限 Token |
| API_LOGIN_RATE_LIMIT | str | '10/5 minutes' | API 登录频率限制 |
| 名称 | 类型 | 默认值 | 说明 |
|---|
| LOGIN_DEVICE_NUMBER_LIMIT | int | 1 | 最大可登录设备数 |
| ALLOW_LOGIN_SAME_DEVICE | bool | False | 是否允许同设备多应用登录 |
| ALLOW_BAN_MULTIDEVICE_USER_AUTO | bool | True | 是否开启过多设备自动封号功能 |
| GAME_LOGIN_RATE_LIMIT | str | '30/5 minutes' | 游戏登录频率限制 |
| GAME_REGISTER_IP_RATE_LIMIT | str | '10/1 day' | 游戏注册的 IP 频率限制 |
| GAME_REGISTER_DEVICE_RATE_LIMIT | str | '3/1 day' | 游戏注册的设备频率限制 |
ALLOW_LOGIN_SAME_DEVICE 开启后 ALLOW_BAN_MULTIDEVICE_USER_AUTO 自动失效。ALLOW_BAN_MULTIDEVICE_USER_AUTO 中的过多设备,是指超过 LOGIN_DEVICE_NUMBER_LIMIT 的数量。GAME_REGISTER_IP_RATE_LIMIT 不会限制 IP 地址 '127.0.0.1'。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| DOWNLOAD_TIMES_LIMIT | int | 3000 | 24 小时内单用户歌曲数据下载最大文件数量 |
| DOWNLOAD_TIME_GAP_LIMIT | int | 1000 | 歌曲数据文件下载链接有效时长(单位:秒) |
| DOWNLOAD_FORBID_WHEN_NO_ITEM | bool | False | 是否限制用户下载未购买歌曲的数据文件 |
| BUNDLE_DOWNLOAD_TIMES_LIMIT | str | '100/60 minutes' | 内容捆绑包单用户下载频次限制 |
| BUNDLE_DOWNLOAD_TIME_GAP_LIMIT | int | 3000 | 内容捆绑包下载链接有效时长(单位:秒) |
DOWNLOAD_FORBID_WHEN_NO_ITEM 开启后,还需要服务端放置 database/songs/songlist 文件。- 对于此处所有的下载频次限制,用户每下载一个文件记为一次。
| 名称 | 类型 | 默认值 | 说明 |
|---|
| WORLD_MAP_FOLDER_PATH | str | './database/map/' | 世界地图数据文件夹 |
| SONG_FILE_FOLDER_PATH | str | './database/songs/' | 歌曲数据文件夹 |
| SONGLIST_FILE_PATH | str | './database/songs/songlist' | songlist 文件路径 |
| CONTENT_BUNDLE_FOLDER_PATH | str | './database/bundle/' | 内容捆绑包数据文件夹 |
| SQLITE_DATABASE_PATH | str | './database/arcaea_database.db' | 主数据库路径 |
| SQLITE_DATABASE_BACKUP_FOLDER_PATH | str | './database/backup/' | 旧数据库文件夹 |
| DATABASE_INIT_PATH | str | './database/init/' | 数据库初始化数据文件夹 |
| SQLITE_LOG_DATABASE_PATH | str | './database/arcaea_log.db' | 日志数据库文件夹 |
| SQLITE_DATABASE_DELETED_PATH | str | './database/arcaea_database_deleted.db' | 主数据库备份路径 |