HuskChat:简洁可自定义的聊天系统
HuskChat 是一款简洁、易用且高度可自定义的 Minecraft 网络聊天系统。它支持在 BungeeCord 或 Velocity 等代理服务器上运行,以实现跨服聊天,也支持在单服务器的 Spigot 环境下使用。插件开箱即用,配置优雅,同时允许您深度定义频道并精细管理消息的发送与接收权限。
核心特性
- 开箱即用:安装在 Velocity 或 BungeeCord 代理上即可立即使用。
- 角色显示:与 LuckPerms 集成,显示玩家的前缀和后缀。
- 私信系统:支持私人消息、群组私信、回复功能以及管理员监视。
- 频道调校:可设置频道发送/接收权限、发送消息至 Discord Webhook、配置过滤规则等。
- 简单易用:命令集超级简单,还可定义频道快捷命令。
- 高级脏话过滤:采用机器学习技术,提供强大的英文脏话过滤。
- 过滤器与替换器:可自定义的刷屏限制过滤器、反广告规则及特殊表情符号。
- 现代格式化:支持 1.16+ 的现代格式化,通过 MineDown 实现 RGB 和渐变色彩。
环境要求
- Java 16+
- 服务器环境(二选一):
- 单服务器模式:Spigot (1.16.5+) 服务器。- 网络模式:Velocity(推荐)或 BungeeCord/Waterfall 代理服务器。相关链接
- 网站 — Visit my website!
- 文档 — Check the HuskChat docs!
- Discord — Get support, ask questions!
- bStats — Check out the plugin metrics! (Also: Velocity)
- GitHub — Check out the plugin source code!
- 安装指南 — Read the setup instructions!
HuskChat 是一款为 Minecraft 网络(BungeeCord/Velocity)设计的现代化聊天管理插件,提供频道系统、丰富的格式化和强大的过滤功能,让玩家和管理员之间的沟通井然有序。
频道与开箱即用体验
频道是玩家聊天的不同空间,可以使用 /channel 命令或专门的快捷命令进行切换。默认情况下,HuskChat 已配置好以下频道,非常适合典型的代理服务器设置:
- local - 本地范围频道,使用
/local或/l快捷命令,用于向同一服务器的玩家发送消息。 - global (默认频道) - 全局范围频道,使用
/global或/g快捷命令,用于在整个网络内发送消息。 - staff - 全局范围频道,使用
/staff或/sc快捷命令。便于管理员轻松沟通。玩家需要huskchat.channel.staff.send和huskchat.channel.staff.receive权限才能分别在此频道发送和接收消息。 - helpop - 全局范围频道,使用
/helpop快捷命令。便于玩家轻松联系管理员。玩家需要huskchat.channel.helpop.receive权限才能接收此频道的消息。
自定义频道定义
要定义自定义频道,请将它们放在 config.yml 文件的 channels: 部分下。以下是一个典型的管理员频道示例,说明了配置的规范。标记为 (Required) 的键必须存在,未标记为必需的字段将使用默认值。
channels:
staff: # (Required) 频道的 ID。用户执行 /channel staff 可切换至此频道
format: '&e[Staff] %name%: &7' # (Required) 频道的显示格式 - 见下文
broadcast_scope: GLOBAL # 频道的广播范围 - 见下文
log_to_console: true # 发送到此频道的消息是否应记录到代理控制台
filtered: false # 发送到此频道的消息是否应被过滤和替换(见下文)
permissions:
send: 'huskchat.channel.staff.send' # 发送消息所需的权限
receive: 'huskchat.channel.staff.receive' # 切换至频道和接收消息所需的权限
shortcut_commands: # 用户可用来快速使用此频道的快捷命令列表
- /staff
- /sc
restricted_servers: # 此频道中无法发送或接收消息的服务器列表
- hub频道范围
频道范围定义了消息被广播和处理的方式。以下是可用的选项:
- GLOBAL - 消息通过代理全局广播给有权限的玩家。
- LOCAL - 消息通过代理广播给有权限且与消息源在同一服务器的玩家。
- PASSTHROUGH - 消息不由代理处理,而是传递给后端服务器。
- GLOBAL_PASSTHROUGH - 消息通过代理广播给有权限且与消息源在同一服务器的玩家,并额外传递给后端服务器。
- LOCAL_PASSTHROUGH - 消息通过代理全局广播给有权限的玩家,并额外传递给后端服务器。
默认频道
你必须在 config.yml 中定义一个 default_channel,玩家加入时将进入此频道。
此外,你可以在 server_default_channels 部分定义特定服务器的默认频道。当玩家切换至分配了 server_default_channel 的服务器时,玩家将自动切换到指定的频道。
server_default_channels:
uhc: minigames
bedwars: minigames受限频道
如果你想阻止玩家在特定服务器中使用某些频道,你可以在每个频道中定义 restricted_servers(参见上面的频道定义示例)。如果玩家连接到频道受限的服务器,他们将无法在该频道中发送或接收任何消息。
此外,如果玩家切换服务器至其当前频道受限的服务器,除非有如上所述的覆盖性服务器默认频道,否则其频道将更改为 default_channel。
你也可以通过 message_command 下的 restricted_servers 部分来限制 /msg 和 /r 命令在某些服务器中的使用。
频道格式与占位符
频道格式定义了聊天消息的显示方式。消息内容本身总是附加在格式之后。请注意,未清除的格式将保留并应用于消息内容。你可以使用 MineDown 格式 来使用现代(1.16+)十六进制颜色,并轻松实现渐变等高级效果。你也可以在 LuckPerms 组的前缀和后缀内容中嵌入此格式。在频道格式中,你可以使用以下占位符来格式化文本。
常规占位符
%name%- 用户名%fullname%- LuckPerms 前缀、用户名和 LuckPerms 后缀%prefix%- LuckPerms 前缀%suffix%- LuckPerms 后缀%ping%- 用户的延迟%uuid%- 用户的 UUID%servername%- 用户所在的服务器%serverplayercount%- 用户所在服务器的玩家数量
时间占位符
这些占位符显示当前时间。
%timestamp%- yyyy/MM/dd HH:mm:ss%time%- HH:mm:ss%short_time%- HH:mm%date%- yyyy/MM/dd%british_date%- dd/MM/yyyy%day%- dd%month%- MM%year%- yyyy
频道过滤器与替换器
频道的 filtered: 属性允许你指定发送到该频道的消息是否应首先被 config.yml 文件中 chat_filters 和 message_replacers 部分定义的已启用过滤器和消息替换器处理。要使用过滤器,请确保要过滤的频道已启用 filtered,并且聊天过滤器已正确启用和配置。
聊天过滤器将根据特定条件阻止用户发送消息。消息替换器将改变消息内容,例如将某些字符组合替换为表情符号。
过滤器
- advertising_filter - 阻止玩家发送包含 IP 或网址的消息。
- caps_filter - 阻止玩家发送由超过特定百分比(以小数表示,0.0 到 1.0 代表 0% 到 100%)的大写字母组成的消息。
- spam_filter - 阻止玩家在聊天中发送消息过快(即速率限制)。指定玩家在一段时间内可以发送多少条消息。
- profanity_filter - 使用脏话检查机器学习算法来判断消息是否包含英文脏话。请参阅下文了解如何设置此功能,因为它需要更多工作。
- repeat_filter - 阻止玩家发送重复消息。根据玩家可指定数量的先前消息进行检查。
- ascii_filter - 阻止玩家在聊天中使用非 ASCII(即 Unicode/UTF-8)字符。如果你的服务器是国际化的,你可能需要关闭此功能。
替换器
- emoji_replacer - 将某些字符串替换为正确的 Unicode 表情符号。请注意,如果你启用了
ascii_filter,此功能仍然有效,并会在聊天中显示 Unicode 表情符号字符。
脏话检查过滤器
脏话检查过滤器使用 Python 机器学习算法(alt-profanity-check),该算法利用 Scikit-learn 来预测消息是否包含脏话。它并不完美,无法捕获拉长或修改过的脏话,但它相当有效(老实说,如果有人想当坏演员并使用不良语言,他们总会找到绕过任何脏话过滤器的方法)。
如果你在共享主机上,很遗憾,除非你的主机非常出色并且不介意帮助你,否则你可能无法使用此功能。请注意,由于实现此功能的复杂性,我认为此功能仅适用于高级用户,除了引导你到这里,我无法提供设置支持。
脏话检查器仅针对英文单词进行训练。要使用它,你需要在服务器上安装 Python 3.8+ 和 Jep,并确保 Jep 驱动程序正确存在于你系统的 Java 类路径中。你可以使用 pip install jep 安装 Jep。除了 Jep,你还需要运行 pip install alt-profanity-check 来安装脏话检查器及其先决条件。
然后,你需要确保 HuskChat 能够识别你的 Jep 驱动程序,如果你的系统没有自动识别,请指定其路径。Jep 驱动程序的名称因平台而异。在 Linux 上是 libjep.so,在 macOS 上是 libjep.jnilib,在 Windows 上是 jep.dll。
你可以通过以下几种方式之一实现
- 将 Jep 的库路径添加到你的 Java 库环境变量中。
- 在 Linux 上,是
LD_LIBRARY_PATH。 - 在 macOS 上,是
DYLD_LIBRARY_PATH。 - 在 Windows 上,是
PATH。 - 通过添加
-Djava.library.path=<path>参数将 Jep 的驱动程序添加到你的启动命令中。 - 将 Jep 的驱动程序路径添加到 HuskChat 提供的
library_path配置选项中。
你的路径应指向包含 jep 驱动程序的文件夹,而不是驱动程序本身。如果在启动脏话过滤器时出现错误,你可以尝试通过 Jep 的指南 进行故障排除。
设置好先决条件并且服务器启动脏话检查器没有问题后,你可以更改设置。默认情况下,检查器将使用 AUTOMATIC 模式来判断消息是否包含脏话,但如果你想微调查看器的敏感度,可以将 mode 设置为 TOLERANCE 并更改下面的 tolerance 值。较低的值意味着检查器将更加严格。
社交与本地间谍
HuskChat 提供 /socialspy 和 /localspy 命令。拥有权限的玩家可以切换社交间谍来查看用户的私信。/localspy 命令允许拥有权限的玩家查看其他服务器上本地聊天频道中发送的消息,包括那些本地传递消息的频道。
构建插件
要构建 HuskChat,请在项目目录的根目录中运行以下命令:
./gradlew clean build