跳到主要内容

DiscordSRV 集成

EliteMobs 使用 DiscordSRV 来实现公告优先级 3 及以上消息的广播。你可以在这里了解公告优先级系统。

本质上,这意味着一些非常特殊的自定义 Boss 能够在 Discord 上发送形如下图的消息:

Discord 消息示例

其目的是创建一个专门的 EliteMobs 公告房间,玩家可以查看当前是否有有趣的世界 Boss 存活,从而前去击杀,并在击杀排行榜上炫耀自己的战绩。

完整设置流程

设置 DiscordSRV​

DiscordSRV 是另一个插件,并非由我开发。你可以在这里找到他们详尽的设置指南。如果你在设置时遇到困难,他们的支持房间在这里。我无法为该插件提供支持,因此安装的这一部分请向他们咨询。

EliteMobs 使用 DiscordSRV 1.28.0 编译。请使用下方测试命令,验证服务器所安装版本的实际消息送达情况。

设置 EliteMobs 的 DiscordSRV 配置​

一旦你正确配置好 DiscordSRV(并且在进入这一步之前你必须测试它是否真的能工作),EliteMobs 的配置只有 1 个步骤。

前往 EliteMobs 配置文件夹中的 DiscordSRV.yml 配置文件(通常位于 plugins/EliteMobs/DiscordSRV.yml),你会找到一个名为 announcementRoomName 的配置项。

这个配置项有三种可用的取值方式。我推荐第 1 种。

  1. [推荐] 你在 DiscordSRV 配置文件中所配置的房间名称。你把房间叫什么并不重要,重要的是使用正确的名称。下面是我配置为专门用于 EliteMobs 事件的房间示例: 使用名称的示例 在我的情况下,该选项应写为 announcementRoomName: EMEvents。

  2. 你在 DiscordSRV 配置文件中所配置的房间 ID。下面是该房间的示例。请注意每个房间都是唯一的。我展示图片只是作为示例,请不要尝试照抄这些 ID 数字,那是行不通的。你的设置应当有基于你自己 Discord 房间 ID 的一组唯一数字。 使用 ID 的示例

  3. [可靠性较低] Discord 上显示的频道名称。最后的名称搜索不区分大小写,并选择首个匹配的文本频道,因此重名可能导致选错目标。DiscordSRV 及其机器人仍需正确配置并能够访问频道;名称搜索本身不要求游戏频道映射。

技术说明​

  • 发送到 Discord 的消息会自动去除 Minecraft 颜色代码,以确保正确显示
  • Discord 消息是异步发送的,以防止服务器卡顿
  • EliteMobs 使用三层查找来定位你的 Discord 频道:先按频道 ID(仅当 announcementRoomName 全为数字时),然后按 DiscordSRV 的频道映射,最后按频道名称搜索
  • 自动内容公告要求优先级至少为 3,包括自定义 Boss 的生成、死亡、逃脱消息,以及自定义事件的 startMessage/endMessage。下方手动测试命令直接发送,不检查内容优先级。
  • 发送到 Discord 的消息与游戏内显示的消息相同
  • 每次公告都会重新查找频道,因此修正后的 announcementRoomName 在执行 /em reload 后即会生效。查找不到频道时会记录 Channel room <name> is not valid!;Discord 拒绝的消息会记录 DiscordSRV announcement failed for <name>。

测试​

你可以使用命令 /em discord <message> 来测试你的配置是否正常工作。把 <message> 替换为你想发送到 Discord 的任意文本。

示例:/em discord Test message from EliteMobs!

确认消息实际出现在预期的 Discord 频道中。命令的回复只确认尝试了发送;即使未安装 DiscordSRV、设置仍为占位值或频道查找失败,也可能显示该回复。Discord 中没有消息,就不能确认送达。

注意: 此命令需要权限 elitemobs.discord.message

此外,你可以使用 /em discord(不带任何消息)来显示 EliteMobs Discord 服务器的邀请链接,用于获取支持和下载。该命令需要权限 elitemobs.discord.link。

疑难解答​

消息没有出现在 Discord 中:

  • 确认 DiscordSRV 已安装且能正常工作(先用 DiscordSRV 自己的命令测试)
  • 检查 announcementRoomName 没有仍然是默认的占位值
  • 确保房间名称/ID 与你的 DiscordSRV 配置中的完全一致
  • 检查控制台中是否有关于 Discord 集成的 EliteMobs 警告
  • 确认你拥有用于测试的 elitemobs.discord.message 权限

找不到频道的错误:

  • 仔细核对 DiscordSRV.yml 和 EliteMobs 的 DiscordSRV.yml 中频道名称的拼写
  • 尝试使用数字频道 ID 而不是名称
  • 确保该频道已在 DiscordSRV 的 config.yml 中正确配置

测试命令不起作用:

  • 确认你拥有 elitemobs.discord.message 权限
  • 使用正确的语法:/em discord <message>(带一条消息)
  • 检查服务器控制台中的错误信息