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 脚本位置
将 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
建议的管理工作流程
- 确认 Lua 插件存在。
- 添加插件
!addplug. - 启用它
!modplug. - 开始它
!onplug. - 确认它
!pluglist. - 创建专用的 Lua 脚本目录。
- 添加一个小测试脚本。
- 检查 Verlihub 日志。
- 一次添加一个生产脚本。
- 在进行更改之前保留工作脚本的备份。
Verlihub Lua 脚本库
Verlihub Lua 脚本库包含用于中心自定义的示例脚本和可重用的 Lua 代码。将其用作支持的函数、事件挂钩和命令模式的参考。
使用库中的脚本时:
- 安装前查看脚本。
- 确认它与您的 Verlihub 版本匹配。
- 首先在非生产中心对其进行测试。
- 检查硬编码路径、中心名称、操作员昵称或数据库设置。
- 编辑前保留原始脚本的备份。