创建: 2026/07/02 19:41:27 America/Chicago
作者: admin
修改: 2026/07/03 16:24:56 America/Chicago
作者: admin

Verlihub 可以通过其 Lua 插件加载 Lua 脚本。当集线器需要进行小的行为更改而不重新编译 Verlihub 服务器时,请使用 Lua。

常见用途包括显示机器人、预定公告、帮助程序命令、验证规则、自动审核帮助程序、中心统计数据和集成挂钩。 Lua 支持取决于正在安装、构建和启用的插件。

Lua 插件的作用

Lua 插件在 hub 进程内执行 Lua 脚本。与编辑 Verlihub C++ 源代码或编写已编译的插件相比,这为管理员提供了更轻松的集线器自定义路径。

当更改较小且特定于集线器时,Lua 脚本通常比编译的插件更容易检查和替换。

  • 自定义集线器命令
  • 自动欢迎消息
  • 定时公告
  • 用户验证检查
  • 机器人响应
  • 操作员辅助命令
  • 日志记录或通知挂钩
  • 简单的反垃圾邮件或反洪水检查
  • 集线器特定的行为不能证明 C++ 插件的合理性

要求

在启用 Lua 支持之前,请确认服务器上存在 Lua 插件。常见的插件路径是 /usr/local/lib/liblua_pi.so.

检查插件文件是否存在:

 ls -lah /usr/local/lib/liblua_pi.so 

如果该文件不存在,则 Lua 可能未构建或安装。重建 Verlihub,并启用 Lua 插件支持。

根据系统和安装方法,该插件也可能位于 /usr/lib, /usr/lib64, /usr/local/lib, 或者 /usr/local/lib64。在更改集线器配置之前搜索它:

 find /usr /usr/local -name 'liblua_pi.so' 2>/dev/null 

建筑 Verlihub 与 Lua 支持

如果安装时未包含 Lua 支持,请先安装 Lua 开发包。在 Debian 或 Ubuntu 上:

 sudo apt update
sudo apt install lua5.4 liblua5.4-dev 

一些 Verlihub 版本使用 Lua 5.3 而不是 Lua 5.4。当您的分支或发行版需要时安装匹配的包:

 sudo apt install lua5.3 liblua5.3-dev 

然后使用通过 CMake 启用的 Lua 插件重建 Verlihub:

 cmake .. -DWITH_LUA=ON
make
sudo make install 

确切的 CMake 选项名称可能因 Verlihub 版本而异。在重建生产中心之前检查可用的构建选项:

 cmake -LAH .. 

安装完成后,确认插件库已安装:

 find /usr /usr/local -name 'liblua_pi.so' 2>/dev/null 

插件命令

Lua 插件通过来自操作员帐户的 Verlihub 插件命令进行管理。

  • 列出已安装或已知的插件 !lstplug.
  • 注册 Lua 插件 !addplug lua -p /usr/local/lib/liblua_pi.so -a 1 -d Support for Lua scripts..
  • 将 Lua 插件标记为活动状态 !modplug lua -a 1.
  • 加载插件 !onplug lua.
  • 确认加载的插件 !pluglist.
 !lstplug
!addplug lua -p /usr/local/lib/liblua_pi.so -a 1 -d Support for Lua scripts.
!modplug lua -a 1
!onplug lua
!pluglist 

命令解释

!lstplug

列出 Verlihub 已知的插件。首先使用它查看 Lua 插件是否已经注册。

 !lstplug 

!addplug

将 Lua 插件注册到 Verlihub。

 !addplug lua -p /usr/local/lib/liblua_pi.so -a 1 -d Support for Lua scripts. 

选项含义:

  • lua:内部插件名称。
  • -p /usr/local/lib/liblua_pi.so:Lua 插件共享库的路径。
  • -a 1:将插件标记为活动状态。
  • -d Support for Lua scripts.:人类可读的插件描述。

!modplug

修改插件记录并确保 Lua 插件被标记为活动状态。

 !modplug lua -a 1 

!onplug

添加并启用 Lua 插件后加载或启动该插件。

 !onplug lua 

!pluglist

显示当前加载的插件。用它来确认 Lua 是否处于活动状态。

 !pluglist 

将 Lua 脚本保留在 Verlihub 服务用户拥有的专用目录中。

 sudo mkdir -p /usr/local/etc/verlihub/lua
sudo chown -R verlihub:verlihub /usr/local/etc/verlihub/lua
sudo chmod 750 /usr/local/etc/verlihub/lua 

如果您的 Verlihub 服务以其他用户身份运行,请替换 verlihub:verlihub 使用正确的用户和组。

 sudo chown -R vh:vh /usr/local/etc/verlihub/lua
sudo chown -R www-data:www-data /usr/local/etc/verlihub/lua 

不要将 Lua 脚本目录设为全局可写。避免 chmod 777 /usr/local/etc/verlihub/lua.

示例 Lua 脚本

创建一个小测试脚本:

 sudo nano /usr/local/etc/verlihub/lua/test.lua 

示例内容:

 -- Simple Verlihub Lua test script.
-- This file confirms that the Lua plugin can load and execute scripts.
function Main()
    VH:SendToAll("Lua test script loaded successfully.")
end 

可用的 Lua 函数取决于 Verlihub Lua 插件 API。某些安装以不同方式公开帮助程序对象或函数,因此请将示例与您的 Verlihub 版本使用的 Verlihub 脚本库进行比较。

正在加载 Lua 脚本

Lua 插件激活后,通常可以通过插件特定的 Lua 命令或配置的脚本目录加载脚本。

首先检查集线器内部可用的 Lua 插件命令:

 !help lua
!plughelp lua 

如果插件支持脚本列表、加载、卸载或重新加载,您可能会看到类似以下的命令:

 !lua
!lslua
!loadlua
!unloadlua
!reloadlua 

Verlihub 版本和插件版本之间的命令名称可能有所不同。

验证 Lua 是否正常工作

分阶段验证设置。首先确认插件已注册,然后确认已加载:

 !lstplug
!pluglist 

然后检查服务器日志中是否有 Lua 插件消息:

 journalctl -u verlihub -n 100 --no-pager 

如果 Verlihub 不是由 systemd 管理,请改为检查配置的 Verlihub 日志目录。常见位置包括 /var/log/verlihub/usr/local/var/log/verlihub.

当服务日志较大时,搜索 Lua 相关日志条目:

 grep -i lua /var/log/verlihub/* 2>/dev/null 

制作建议

使用 Lua 进行小型自定义行为,而不是进行繁重的处理。 Lua 代码在 hub 进程内运行,因此错误的脚本可能会影响聊天、登录或用户列表更新。

好的 Lua 用例:

  • 简单的命令
  • 中心消息
  • 用户检查
  • 轻量级自动化
  • 小型集成挂钩

避免将 Lua 用于:

  • 长时间运行的后台作业
  • 繁重的数据库查询
  • 大文件处理
  • 阻止网络呼叫
  • CPU 密集型循环
  • 任何可以冻结集线器进程的东西

在连接用户的公共集线器上加载脚本之前,先在临时集线器上测试脚本。

安全说明

只有受信任的管理员才能上传或修改 Lua 脚本。

推荐权限:

 sudo chown -R verlihub:verlihub /usr/local/etc/verlihub/lua
sudo chmod -R u=rwX,g=rX,o= /usr/local/etc/verlihub/lua 

不允许不受信任的用户写入 Lua 文件。除非文件权限被锁定,否则请勿将机密直接存储在 Lua 脚本中。

保持插件管理命令仅供操作员或管理员使用。普通用户不应该能够加载、卸载或替换脚本。

故障排除

找不到插件文件

症状包括 Cannot load plugin, No such file, 或者 liblua_pi.so not found。搜索库,然后更新存储的插件路径:

 find /usr /usr/local -name 'liblua_pi.so' 2>/dev/null 
 !modplug lua -p /correct/path/to/liblua_pi.so 

Lua 插件未出现在插件列表中

检查是否添加。如果缺少,请添加它,将其标记为活动状态,然后加载它:

 !lstplug
!addplug lua -p /usr/local/lib/liblua_pi.so -a 1 -d Support for Lua scripts.
!modplug lua -a 1
!onplug lua 

插件存在但无法加载

检查共享库依赖关系并查找丢失的 Lua 库:

 ldd /usr/local/lib/liblua_pi.so 
 not found 

如果缺少 Lua 库,请安装匹配的 Lua 运行时包。

 sudo apt install lua5.4 liblua5.4-0
sudo apt install lua5.3 liblua5.3-0 

脚本不运行

检查脚本路径、文件权限和 Verlihub 日志。另请验证 Lua 插件是否支持脚本使用的脚本 API。

 ls -lah /usr/local/etc/verlihub/lua
journalctl -u verlihub -n 100 --no-pager 

加载脚本后集线器变得不稳定

卸载脚本或禁用 Lua 插件。如果集线器没有响应,请从 shell 停止 Verlihub 并将脚本移出 Lua 目录:

 sudo systemctl stop verlihub
sudo mkdir -p /usr/local/etc/verlihub/lua-disabled
sudo mv /usr/local/etc/verlihub/lua/problem-script.lua /usr/local/etc/verlihub/lua-disabled/
sudo systemctl start verlihub 

建议的管理工作流程

  1. 确认 Lua 插件存在。
  2. 添加插件 !addplug.
  3. 启用它 !modplug.
  4. 开始它 !onplug.
  5. 确认它 !pluglist.
  6. 创建专用的 Lua 脚本目录。
  7. 添加一个小测试脚本。
  8. 检查 Verlihub 日志。
  9. 一次添加一个生产脚本。
  10. 在进行更改之前保留工作脚本的备份。

Verlihub Lua 脚本库

Verlihub Lua 脚本库包含用于中心自定义的示例脚本和可重用的 Lua 代码。将其用作支持的函数、事件挂钩和命令模式的参考。

使用库中的脚本时:

  • 安装前查看脚本。
  • 确认它与您的 Verlihub 版本匹配。
  • 首先在非生产中心对其进行测试。
  • 检查硬编码路径、中心名称、操作员昵称或数据库设置。
  • 编辑前保留原始脚本的备份。

打开 Verlihub Lua 脚本库

Related Pages

父页面