事件通知

事件通知

一个Hytale服务器插件,当服务器事件发生时,会向外部服务发送实时通知。当玩家加入、服务器启动/停止等事件发生时,通过ntfy(手机、桌面或网页)、Discord、Slack或自定义Webhook接收通知。

实用

Hytale EventNotifications 插件

一个 Hytale 服务器插件,能在服务器事件发生时向外部服务发送实时通知。当玩家加入、服务器启动/停止等事件发生时,通过 ntfy(手机、桌面或网页)、Discord、Slack 或自定义 Webhook 获得通知。

支持的通知服务

  • ntfy - 免费、开源推送通知(推荐)
  • Discord - 支持富嵌入的 Webhook 通知
  • Slack - 支持附件的 Webhook 通知
  • Webhooks - 通用 HTTP Webhook,用于自定义集成

安装

  1. 从发布页下载最新的 EventNotifications.jar
  2. 将 JAR 文件放入 Hytale 服务器的 mods 文件夹
  3. 启动服务器一次以生成默认配置文件
  4. 编辑 config.json 来配置你的通知目标
  5. 重启服务器

快速开始(ntfy)

获取通知的最快方式:

  1. 获取 ntfy:安装手机应用、桌面应用或使用 Web 应用
  2. 在应用中订阅一个主题(例如 my-hytale-server
  3. config.json 中,将顶层 "enabled" 设置为 true
  4. 将 ntfy 目标的 "enabled" 设置为 true,并把 URL 更新为 https://ntfy.sh/my-hytale-server
  5. 重启服务器 - 你现在就能收到通知了!

配置

配置文件位于 mods/Valhal_EventNotifications/config.json

重要提示: 顶层的 "enabled" 必须设置为 true,插件才能发送任何通知。默认情况下,此项为 false

如需包含所有选项的完整示例,请参阅 example-config.json

基本结构

{
  "enabled": true,
  "targets": {
    "ntfy": { ... },
    "discord": { ... },
    "slack": { ... },
    "webhook": { ... }
  }
}

ntfy 设置

ntfy 是一项免费的推送通知服务。你可以使用公共服务器或自行托管。

"ntfy": {
  "type": "ntfy",
  "enabled": true,
  "url": "https://ntfy.sh/your-topic-name",
  "events": {
    "serverStart": {
      "enabled": true,
      "title": "{server} - Online",
      "message": "The server is now online!",
      "priority": "high",
      "tags": "green_circle"
    }
  }
}

Discord 设置

  1. 在 Discord 频道中创建一个 Webhook(频道设置 > 集成 > Webhook)
  2. 复制 Webhook URL
"discord": {
  "type": "discord",
  "enabled": true,
  "url": "https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN",
  "discordUsername": "Hytale Server",
  "discordUseEmbeds": true,
  "events": {
    "playerJoin": {
      "enabled": true,
      "title": "Player Joined",
      "message": "**{player}** joined the server",
      "color": "#5865F2"
    }
  }
}

Slack 设置

  1. api.slack.com/apps 创建一个 Slack 应用
  2. 启用 "Incoming Webhooks" 并为你的频道创建一个 Webhook
  3. 复制 Webhook URL
"slack": {
  "type": "slack",
  "enabled": true,
  "url": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
  "slackUseAttachments": true,
  "events": {
    "playerJoin": {
      "enabled": true,
      "title": "Player Joined",
      "message": "*{player}* joined the server",
      "color": "#5865F2"
    }
  }
}

Webhook 设置

用于与任何 HTTP 端点进行自定义集成:

"webhook": {
  "type": "webhook",
  "enabled": true,
  "url": "https://your-server.com/webhook",
  "contentType": "application/json",
  "events": {
    "serverStart": {
      "enabled": true,
      "title": "Server Online",
      "message": "The server started"
    }
  }
}

身份验证

所有目标都支持可选的身份验证。将以下字段添加到任何目标配置中。

Bearer Token

适用于使用基于 Token 的身份验证的服务(例如带有可选的访问 Token 的 ntfy):

"bearerToken": "tk_your_token_here"

这会在每次请求中发送 Authorization: Bearer tk_your_token_here 头。

基本认证

适用于使用用户名/密码身份验证的服务:

"username": "your_username",
"password": "your_password"

这会在每次请求中发送 Authorization: Basic <base64> 头。

自定义 Headers

适用于需要自定义身份验证头的 Webhook:

"headers": {
  "X-API-Key": "your-api-key",
  "X-Custom-Header": "value"
}

支持的事件

事件 占位符 描述
serverStart {server} 服务器启动完成
serverStop {server} 服务器正在关闭
playerJoin {server}, {player} 玩家连接
playerLeave {server}, {player} 玩家断开连接
playerChat {server}, {player}, {message} 玩家发送聊天消息(默认禁用)
gameModeChange {server}, {gamemode} 游戏模式变更
groupPermissionChange {server}, {group}, {action}, {permissions} 玩家组权限更改
playerPermissionChange {server}, {player}, {action}, {group}, {permissions} 玩家权限更改

注意: 聊天通知默认处于禁用状态,以避免在繁忙的服务器上产生通知骚扰。如果你希望接收聊天消息,请在配置中启用 playerChat

事件配置选项

每个事件支持以下选项:

选项 描述
enabled 是否为此事件发送通知
title 通知标题(支持占位符)
message 通知正文(支持占位符)
priority ntfy 优先级:minlowdefaulthighurgent
tags ntfy 表情标签(例如 green_circleskull
color Discord/Slack 颜色,十六进制值(例如 #5865F2

目标配置选项

ntfy 选项

选项 默认值 描述
ntfyMarkdown true 在消息中启用 Markdown 格式
ntfyDefaultPriority default 所有事件的默认优先级(minlowdefaulthighurgent
ntfyIcon - 通知中显示图标的 URL

Discord 选项

选项 默认值 描述
discordUsername {server} Discord 中显示的机器人用户名(默认为服务器名称)
discordAvatarUrl - 机器人头像图片的 URL
discordUseEmbeds true 使用富嵌入代替纯文本消息

Slack 选项

选项 默认值 描述
slackUsername {server} Slack 中显示的机器人用户名(默认为服务器名称)
slackIconUrl - 机器人图标图片的 URL
slackIconEmoji - 用作机器人图标的 Emoji(例如 :video_game:
slackUseAttachments true 使用富附件代替纯文本消息

Webhook 选项

选项 默认值 描述
contentType application/json HTTP Content-Type 头
bodyTemplate - 自定义正文模板(见下文)
headers - 自定义 HTTP 头,键值对形式

自定义正文模板

使用 bodyTemplate 发送自定义 JSON 负载,而不是默认格式:

"webhook": {
  "type": "webhook",
  "enabled": true,
  "url": "https://your-server.com/webhook",
  "bodyTemplate": "{\"event\": \"{eventType}\", \"text\": \"{message:json}\"}",
  "events": { ... }
}

可用的模板占位符:{eventType}{title}{message}{priority}{tags},以及所有事件特定的占位符。使用 :json 后缀获取 JSON 转义后的值(例如 {message:json})。

多个目标

你可以同时启用多个目标。每个目标拥有独立的事件设置,因此你可以将不同的事件发送到不同的服务:

{
  "targets": {
    "ntfy": {
      "enabled": true,
      "events": {
        "serverStart": { "enabled": true },
        "playerChat": { "enabled": false }
      }
    },
    "discord": {
      "enabled": true,
      "events": {
        "serverStart": { "enabled": true },
        "playerChat": { "enabled": true }
      }
    }
  }
}

故障排除

无法发送通知?

  • 检查目标是否已设置 enabled: true
  • 验证该目标中的事件是否已设置 enabled: true
  • 确保 URL 正确且从你的服务器可以访问
  • 检查服务器日志中的错误信息

Discord 嵌入不显示?

  • 确保 discordUseEmbeds 设置为 true
  • 验证 Webhook URL 是否完整且有效

致谢

本项目的构建使用了 Hytale-Example-Project 作为模板。

备注

注意:此插件与 ntfy.sh 无关联。

许可证

MIT 许可证