这 hub-stats.lua 脚本构建一个类似机器人的用户列表条目,显示当前的集线器统计信息。中心可以显示在线用户、操作员、总份额或紧凑的状态标记,而无需运行单独的外部机器人进程。
该脚本仅专注于显示。它读取简单的计数器,构建一个简短的名称,例如 !_Stats_128U_4Ops,并将昂贵的工作留在集线器流程之外。
该脚本的作用
该脚本根据配置的集线器统计信息构建显示名称。
显示名称示例:
!_Users_128
!_Hub_128_Online
!_Stats_128U_4Ops
!_Share_24.5TB
常见用途包括:
- 显示当前在线用户。
- 显示运营商在线。
- 当 Lua API 廉价公开时显示总集线器份额。
- 当您的构建暴露该计数器时显示峰值用户。
- 当您的构建公开该计数器时显示注册用户。
- 创建紧凑的集线器状态标记。
- 将实时统计条目添加到用户列表中。
可用的确切计数器取决于您的 Verlihub 版本公开的 Lua 插件 API。
要求
该脚本需要:
- Verlihub 已安装并正在运行。
- 已安装 Verlihub Lua 插件。
- Lua 插件在 Verlihub 中启用。
- 加载和卸载 Lua 脚本的权限。
- Verlihub Lua 个文件的可写脚本目录。
- Verlihub Lua 版本,可以公开用户列表显示数据或从显示条目调用名称生成函数。
在加载脚本之前,请确认 Lua 插件处于活动状态:
!pluglist
如果未列出 Lua 插件,请首先从父级 Lua 设置文章中加载或启用它。
推荐的文件位置
使用专用脚本目录:
mkdir -p /PATH/TO/HUB/scripts
将脚本放置在:
/PATH/TO/HUB/scripts/hub-stats.lua
对于生产系统,只有受信任的管理员或 Verlihub 服务用户才应写入该目录。不要使用全局可写权限。
加载和卸载命令
加载脚本:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
卸载脚本:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
如果您编辑脚本,请将其卸载并再次加载:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
使用完整的绝对路径,除非您的 Verlihub Lua 插件配置支持相对路径。
脚本代码
-- Script: hub-stats.lua
-- Purpose: Displays hub statistics as a bot-like user-list entry.
-- Scope: Lightweight display bot only.
-- Notes: Available statistics depend on the Verlihub Lua API exposed by your build.
name = ""
class = 3
description = "Hub Stats Bot"
speed = "100"
email = ""
share = "0"
prefix = "!_Stats_"
postfix = ""
interval = 60
counter = 0
show_users = true
show_ops = true
show_share = false
function SafeCall(callback, fallback)
local ok, result = pcall(callback)
if ok and result ~= nil then
return result
end
return fallback
end
function FormatShare(bytes)
local value = tonumber(bytes)
if value == nil then
return "0B"
end
if value >= 1099511627776 then
return string.format("%.1fTB", value / 1099511627776)
end
if value >= 1073741824 then
return string.format("%.1fGB", value / 1073741824)
end
if value >= 1048576 then
return string.format("%.1fMB", value / 1048576)
end
if value >= 1024 then
return string.format("%.1fKB", value / 1024)
end
return tostring(value) .. "B"
end
function GetUserCount()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetUsersCount()
end, 0)
end
function GetOperatorCount()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetOperatorsCount()
end, 0)
end
function GetTotalShare()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetTotalShare()
end, 0)
end
function GetStatsText()
local parts = {}
if show_users then
table.insert(parts, tostring(GetUserCount()) .. "U")
end
if show_ops then
table.insert(parts, tostring(GetOperatorCount()) .. "Ops")
end
if show_share then
table.insert(parts, FormatShare(GetTotalShare()))
end
if table.getn(parts) == 0 then
return "Online"
end
return table.concat(parts, "_")
end
function GetName()
return prefix .. GetStatsText() .. postfix
end
配置选项
name
name = ""
类似机器人条目的基本名称值。
在此脚本中,可见名称由以下方式生成 GetName(), 所以 name 通常可以保持空置。
class
class = 3
控制类似机器人条目的显示类别或配置文件级别。
类值的含义取决于集线器配置。使用与统计条目在用户列表中的显示方式相匹配的值。
description
description = "Hub Stats Bot"
显示类似机器人条目的描述。
示例:
description = "Hub Stats Bot"
description = "Users Online"
description = "Hub Status"
description = "Live Hub Stats"
speed
speed = "100"
为类似机器人的条目显示的连接速度值。这是化妆品。它不控制脚本更新的频率。
email = ""
显示类似机器人条目的电子邮件字段。除非您想显示联系地址,否则请将其留空。
share
share = "0"
为类似机器人的条目显示的共享大小。对于统计显示机器人,0 是合适的,除非您希望该条目显示装饰性的份额价值。
prefix
prefix = "!_Stats_"
文本放置在生成的统计数据之前。
示例:
prefix = "!_Stats_"
prefix = "!_Hub_"
prefix = "!_Users_"
prefix = "[Stats] "
选择在中心用户列表中清晰排序的前缀。
postfix
postfix = ""
文本放置在生成的统计数据之后。
示例:
postfix = ""
postfix = "_Online"
postfix = "_Hub"
interval
interval = 60
控制显示条目更新的频率。
推荐值:
| 价值 | 意义 |
|---|---|
30 | 反应更灵敏。对于繁忙的枢纽很有用。 |
60 | 推荐默认。 |
300 | 活动量较低。对于安静的枢纽很有用。 |
避免低值。集线器统计数据不需要每秒更新。
counter
counter = 0
脚本使用的内部计数器。除非您要修改脚本逻辑,否则请勿更改此设置。
show_users
show_users = true
控制显示名称是否包含当前在线用户数。
输出示例:
!_Stats_128U
show_ops
show_ops = true
控制显示名称是否包含当前操作员计数。
输出示例:
!_Stats_128U_4Ops
show_share
show_share = false
控制显示名称是否包含总集线器份额。
输出示例:
!_Stats_128U_4Ops_24.5TB
仅当您的 Verlihub Lua API 公开可靠的总份额值时才启用此功能。
API 兼容性说明
示例脚本使用以下函数:
VH:GetUsersCount()
VH:GetOperatorsCount()
VH:GetTotalShare()
您的 Verlihub Lua 插件版本可能会公开不同的函数名称。如果脚本加载但始终显示零,请调整计数器函数使用的 API 调用。
编辑的主要功能有:
function GetUserCount()
return SafeCall(function()
return VH:GetUsersCount()
end, 0)
end
function GetOperatorCount()
return SafeCall(function()
return VH:GetOperatorsCount()
end, 0)
end
function GetTotalShare()
return SafeCall(function()
return VH:GetTotalShare()
end, 0)
end
将这些调用替换为您的 Verlihub Lua 插件版本支持的函数。
配置示例
仅用户数
prefix = "!_Users_"
postfix = "_Online"
interval = 60
show_users = true
show_ops = false
show_share = false
显示示例:
!_Users_128U_Online
用户和运营商
prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false
显示示例:
!_Stats_128U_4Ops
总份额显示
prefix = "!_Share_"
postfix = ""
interval = 300
show_users = false
show_ops = false
show_share = true
显示示例:
!_Share_24.5TB
紧凑型集线器状态
prefix = "!_Hub_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = true
显示示例:
!_Hub_128U_4Ops_24.5TB
推荐的生产设置
对于大多数中心,仅从用户和运营商开始:
prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false
这使得显示对于普通用户列表来说足够短。
如果中心用户列表很拥挤,请使用较短的显示:
prefix = "!_U_"
postfix = ""
interval = 60
show_users = true
show_ops = false
show_share = false
如果您的 Verlihub 版本中的总份额计算成本高昂或不可靠,请将其禁用:
show_share = false
测试脚本
加载脚本后,检查中心用户列表中生成的统计条目。
确认:
- 该条目仅出现一次。
- 显示的用户数是正确的。
- 显示的操作员计数正确。
- 如果启用,总份额将正确显示。
- 对于用户列表来说,该名称不太长。
- 更新间隔合理。
- 卸载脚本后该条目消失。
- 重新加载脚本不会创建重复项。
如果显示屏始终显示零,请查看 API 兼容性部分。
故障排除
脚本无法加载
检查 Lua 插件是否处于活动状态:
!pluglist
检查文件路径:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
如果相对路径不起作用,请使用绝对路径。
统计数据始终显示零
这通常意味着 Lua API 函数名称与您的 Verlihub 插件版本不匹配。
检查以下位置使用的函数:
GetUserCount()
GetOperatorCount()
GetTotalShare()
然后替换示例 VH:* 使用您的安装支持的功能进行调用。
条目名称太长
禁用某些字段或缩短前缀。
例子:
prefix = "!_S_"
show_share = false
显示更新过于频繁
增加间隔。
受到推崇的:
interval = 60
对于安静的枢纽:
interval = 300
出现重复条目
卸载脚本:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
然后再次加载:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
如果重复出现,请在维护时段重新启动 Lua 插件或 Verlihub 服务。
安全注意事项
该脚本应该保持轻量级。不要添加:
- 外部 HTTP 请求。
- 每次更新时都会查询数据库。
- 文件扫描。
- 长循环。
- 阻止睡眠呼叫。
- 每用户昂贵的计算。
统计显示脚本应读取简单的集线器计数器并更新显示名称。如果计算某个值的成本很高,请将其缓存在集线器进程之外。
保养注意事项
更改脚本之前保留备份:
cp /PATH/TO/HUB/scripts/hub-stats.lua /PATH/TO/HUB/scripts/hub-stats.lua.bak
如果使用 Git:
cd /PATH/TO/HUB/scripts
git add hub-stats.lua
git commit -m "Update hub-stats.lua settings"
仅更改前缀、后缀、间隔或启用的统计信息时,不需要更改逻辑。
未来改进建议
可能的后续版本可以添加:
- 峰值用户数显示。
- 显示注册用户数。
- 集线器正常运行时间显示。
- 按单位显示总份额。
- 为用户和共享单独显示条目。
- 仅限操作员使用的统计命令。
- 每日高水位线跟踪。
- 基于文件的统计快照日志记录。
仅添加用户或操作员将读取的统计信息。太多的信息使得用户列表条目更难扫描。