创建: 2026/07/02 19:41:27 America/Chicago
作者: admin
修改: 2026/07/03 13:19:11 America/Chicago
作者: admin

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

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"

仅更改前缀、后缀、间隔或启用的统计信息时,不需要更改逻辑。

未来改进建议

可能的后续版本可以添加:

  • 峰值用户数显示。
  • 显示注册用户数。
  • 集线器正常运行时间显示。
  • 按单位显示总份额。
  • 为用户和共享单独显示条目。
  • 仅限操作员使用的统计命令。
  • 每日高水位线跟踪。
  • 基于文件的统计快照日志记录。

仅添加用户或操作员将读取的统计信息。太多的信息使得用户列表条目更难扫描。

父页面