平台管理
相关信息
平台的功能管理中心,设置房间、用户、平台和监控的功能
平台总览
查看平台和服务器的资源占用情况

提示
平台内存占用会根据你最近一段时间执行的操作(打开页面、调用接口等)增加而增加,无操作后会回落
房间总览
查看和管理平台的所有房间

- ID:平台中唯一编号
- 房间名:房间名称
- 状态:是否激活
- 最大玩家数:房间设置的最大玩家数量
- 世界数:房间内的世界数量
- 模组数:房间内的模组数量
- 直连端口:外部连接的端口号,防火墙需要开发这里显示的端口号
- 操作:对房间的操作
- 查看详情:查看房间端口号的详细信息,可以关闭房间内指定的世界
- 激活房间:启动房间所有的世界
- 关闭房间:关闭房间所有的世界
- 删除房间:删除这个存档
提示
关闭的房间不会执行任何定时任务,包含自动重启,自动备份,自动保活等
右侧查看详情展示更多信息,可在此页面手动关闭饥荒进程对应的screen

- ID:平台中唯一编号
- 房间名:房间名称
- 游戏模式:房间的游戏模式
- 端口占用:使用的端口号,不需要全部开放
- DMP_Cluster_房间ID_世界名:平台启动的
Screen的名称,即正在运行的世界;点击关闭,可以关闭对应的世界
用户设置
创建和修改用户信息,详情查看👉用户管理
平台设置
一些影响全局功能的设置

在线玩家信息
- 相隔多久进行一次获取,频率越小获取越频繁,对服务器造成一定的负担
- 数据保留的天数越大,占用服务器内存越多
玩家昵称维护
- 在后台记录进入房间的玩家昵称,关闭只能看到科雷ID
系统监控
- 打开后可以在系统监控中查看系统的 CPU、内存等资源的使用信息
- 数据保留时长越长,占用服务器内存越多
自动更新游戏
- 定时检测游戏是否有更新,有的话在指定时间自动更新游戏
- 更新后重启,字面意思,更新完成后重启游戏,让玩家可以加入
Webhook 通知
相关信息
该功能由v3.1.5版本加入
当你的饥荒管理平台主动或自动执行了一些操作后,你希望能够收到通知,那么你可以使用此功能
提示
你可以配置一个或多个webhook
你需要输入此webhook的名称,URL,选择需要通知的事件和密钥
- 名称
- 必填项
- 好的名称能够体现此webhook的用途,例如QQ-Mail、DingTalk、Wechat等
- URL
- 必填项,例如:
https://my-webhook.test/webhook - 只支持
http或https POST方法- 不允许传递
query参数 - 不允许传递
fragment参数
- 必填项,例如:
- 通知房间
- 有哪些房间可以收到订阅的事件
- 如果
不选择,则通知所有房间 - 如果选择房间后,则
无法收到房间创建事件
- 通知事件
- 该webhook订阅的事件,
至少选择一项 - 房间创建
- 房间删除
- 房间修改
- 房间激活
- 房间关闭
- 游戏备份
- 游戏重置
- 游戏启动
- 游戏关闭
- 游戏更新
- 自动保活
- 玩家管理
- 平台设置修改
- 虚拟终端连接
- 在线玩家变化
- 该webhook订阅的事件,
- 签名密钥
- 可选项
- 你的webhook可能暴露在公网上,需要鉴权,不能让所有人都能调用
- 使用
HMAC-SHA256加密算法 - 配置后会携带
X-DMP-Signature请求头

输入名称和URL后,可以点击测试按钮进行测试
{
"event": {
"type": "test",
"zh": "测试",
"en": "Test"
},
"timestamp": 1782805255008,
"data": "这是一条测试消息 / This is a test message"
}下面是一个使用python语言编写的webhook脚本,并附带签名校验
from flask import Flask, request, jsonify
import hmac
import hashlib
import json
import logging
import os
app = Flask(__name__)
def setup_logging():
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
if logger.hasHandlers():
logger.handlers.clear()
formatter = logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
file_handler = logging.FileHandler('webhook.log', encoding='utf-8')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
class BodyFilter(logging.Filter):
def filter(self, record):
return '请求体' in record.getMessage()
file_handler.addFilter(BodyFilter())
logger.addHandler(file_handler)
return logger
logger = setup_logging()
SECRET = os.environ.get('WEBHOOK_SECRET', 'your-secret-key-here')
if not SECRET or SECRET == 'your-secret-key-here':
logger.warning("⚠️ SECRET 未配置或使用默认值,请设置环境变量 WEBHOOK_SECRET")
def verify_signature(data: bytes, signature: str) -> bool:
if not signature:
logger.warning("请求头缺少 X-DMP-Signature")
return False
mac = hmac.new(SECRET.encode('utf-8'), data, hashlib.sha256)
expected_signature = mac.hexdigest()
return hmac.compare_digest(expected_signature, signature)
@app.route('/webhook', methods=['POST'])
def webhook():
body = request.get_data()
print("=" * 50)
print(f"收到 webhook 请求")
print(f"客户端 IP: {request.remote_addr}")
print(f"User-Agent: {request.headers.get('User-Agent', 'Unknown')}")
# 打印请求体原始数据到屏幕(调试用)
print(f"请求体原始数据: {body}")
# 尝试解析 JSON 并打印格式化内容到屏幕
try:
json_data = json.loads(body.decode('utf-8'))
print(f"请求体 JSON 内容:\n{json.dumps(json_data, indent=2, ensure_ascii=False)}")
# 同时记录到文件(只记录 body 内容)
logger.info(f"请求体 JSON 内容:\n{json.dumps(json_data, indent=2, ensure_ascii=False)}")
except (json.JSONDecodeError, UnicodeDecodeError) as e:
print(f"请求体不是有效的 JSON: {e}")
# 如果是非 JSON,记录原始内容到文件
try:
body_str = body.decode('utf-8')
logger.info(f"请求体原始内容: {body_str}")
except:
logger.info(f"请求体二进制内容: {body.hex()}")
# 获取签名
signature = request.headers.get('X-DMP-Signature', '')
print(f"请求头 X-DMP-Signature: {signature}")
# 强制验证签名
if not verify_signature(body, signature):
print("❌ 签名验证失败 - 请求被拒绝")
logger.error("签名验证失败")
return jsonify({
'code': 401,
'message': 'Unauthorized: Invalid or missing signature',
'error': 'Signature verification failed'
}), 401
print("✅ 签名验证成功")
# 返回成功响应
return jsonify({
'code': 200,
'message': 'Webhook received successfully',
'data': {
'received': True,
'timestamp': request.headers.get('X-DMP-Timestamp', '')
}
}), 200
@app.errorhandler(404)
def not_found(error):
"""404 错误处理"""
print(f"404 错误: {request.path}")
return jsonify({
'code': 404,
'message': 'Not Found'
}), 404
@app.errorhandler(405)
def method_not_allowed(error):
"""405 错误处理"""
print(f"405 错误: {request.method} {request.path}")
return jsonify({
'code': 405,
'message': 'Method Not Allowed'
}), 405
@app.errorhandler(500)
def internal_error(error):
"""500 错误处理"""
print(f"500 内部错误: {error}")
return jsonify({
'code': 500,
'message': 'Internal Server Error'
}), 500
if __name__ == '__main__':
print("=" * 50)
print("Webhook 服务启动")
print(f"监听地址: 0.0.0.0:5000")
print(f"请求 body 将记录到: webhook.log")
print("=" * 50)
# 启动服务
app.run(host='0.0.0.0', port=5000, debug=False)下方是饥荒管理平台调用webhook的请求体示例
{
"event": {
"type": "global_setting_updated",
"zh": "平台设置修改",
"en": "Platform Settings Updated"
},
"timestamp": 1782802623354,
"name": "QQ-BOT",
"data": {
"dbUpdated": true
}
}{
"event": {
"type": "online_player_updated",
"zh": "在线玩家变化",
"en": "Online Player Updated"
},
"timestamp": 1782762705716,
"name": "QQ-BOT",
"data": {
"current": [
{
"uid": "KU_********",
"nickname": "花花",
"prefab": "wx78"
},
{
"uid": "KU_********",
"nickname": "小布尔乔亚",
"prefab": ""
},
{
"uid": "KU_********",
"nickname": "x_x",
"prefab": "wendy"
},
{
"uid": "KU_********",
"nickname": ">=<",
"prefab": "wx78"
}
],
"exited": null,
"gameID": 1,
"gameName": "测试房间",
"joined": [
{
"uid": "KU_********",
"nickname": "小布尔乔亚",
"prefab": ""
}
]
}
}系统监控
可以查看 CPU、内存、硬盘、网络的使用情况

提示
如果在平台管理 - 平台设置 没有启用系统监控,这里是无法查看的
插件配置
你可以在该标签页管理DMP插件

tmi插件
相关信息
该功能于v3.1.6加入
你可以在此处执行安装、启用、禁用、卸载等操作
提示
插件安装完成后会自动启用
如果插件处于禁用状态,平台工具-更多物品页面会出现以下提示

插件安装细节
相关信息
由于Stex工具依赖问题,目前tmi插件仅支持ubuntu 24.04系统,其他系统在tmi页面不会显示物品图片
系统为ubuntu 24.04
- 安装系统依赖
- 安装
Stex工具 - 解压饥荒
tex文件 - 将
tex文件转为png文件 - 安装
TMIR模组,并将所有解析到的物品与图片写入数据库
系统非ubuntu 24.04
- 安装系统依赖
- 安装
TMIR模组,并将所有解析到的物品写入数据库
安装过程
点击 操作 - 安装 按钮

你将会看到如下对话框

如果你是ubuntu 24.04系统,安装过程中会额外安装Stex工具,此工具从Github下载,因此你需要配置代理
平台会帮你输入一个默认的代理地址 https://gh-proxy.com/ ,该地址可能不可用,你需要配置一个当前可用的代理
首先打开https://github.akams.cn/页面,选择一个节点
在页面中文件链接输入框中输入
https://github.com/oblivioncth/Stexatlaser/releases/download/v0.6/Stex_v0.6_Linux_Static_x64.24.04.g++-14.zip切换Direct Download标签页,点击打开按钮

如果你能够正常下载这个文件,说明这个代理是可用的
接下来你可以将这个代理节点输入到插件安装的代理输入框中
如上图中的https://gh.b52m.cn/
点击安装按钮即可
提示
如果遇到安装失败,请更换代理重新安装

ai_chat插件
相关信息
该功能于v3.1.7加入
此插件可以在游戏中直接与AI对话,提升游戏体验
与tmi插件类似,点击安装即可
其中,ai_chat插件需要从github下载知识文件,需要代理
提示
如果遇到安装失败,请更换代理重新安装
安装成功后即可前往平台工具-AI对话页面进行配置,配置详情请查看AI对话页面