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

support-ticket.lua 脚本在 Verlihub 集线器内为用户提供了一个小帮助命令。用户键入命令,例如 !helpme 通过短信,操作员会收到带有用户昵称和请求文本的格式化通知。

该脚本不是数据库支持的售票处。它是一个集线器端通知帮助程序,用于处理注册问题、连接问题、滥用报告、规则问题以及需要操作员查看的其他问题。

该脚本的作用

该脚本监视主聊天中配置的支持命令,并在继续正常聊天之前处理匹配的消息。

用户命令示例:

!helpme I cannot connect to the correct hublist.

操作员通知示例:

[SupportTicket] Help request from SomeUser: I cannot connect to the correct hublist.

常见用途包括:

  • 让用户在不知道运营商昵称的情况下联系运营商。
  • 报告集线器连接或 hublist 问题。
  • 举报滥用行为的用户。
  • 寻求帐户或注册帮助。
  • 要求澄清规则。
  • 在中心内创建简单的支持工作流程。

该脚本仅发送格式化通知。它不会创建票证 ID、存储历史记录、声明所有权或替换 Web 支持系统。

要求

该脚本需要:

  • Verlihub 已安装并正在运行。
  • 已安装 Verlihub Lua 插件。
  • Lua 插件在 Verlihub 中启用。
  • 加载和卸载 Lua 脚本的权限。
  • Verlihub Lua 个文件的可写脚本目录。
  • Verlihub Lua 构建,公开聊天消息挂钩,例如 VH_OnParsedMsgChat.

在加载脚本之前,请确认 Lua 插件处于活动状态:

!pluglist

如果未列出 Lua 插件,请首先从父级 Lua 设置文章中加载或启用它。

使用专用脚本目录:

mkdir -p /PATH/TO/HUB/scripts

将脚本放置在:

/PATH/TO/HUB/scripts/support-ticket.lua

对于生产系统,只有受信任的管理员或 Verlihub 服务用户才应写入该目录。不要使用全局可写权限。

加载和卸载命令

加载脚本:

!luaload /PATH/TO/HUB/scripts/support-ticket.lua

卸载脚本:

!luaunload /PATH/TO/HUB/scripts/support-ticket.lua

如果您编辑脚本,请将其卸载并再次加载:

!luaunload /PATH/TO/HUB/scripts/support-ticket.lua
!luaload /PATH/TO/HUB/scripts/support-ticket.lua

使用完整的绝对路径,除非您的 Verlihub Lua 插件配置支持相对路径。

脚本代码

-- Script: support-ticket.lua
-- Purpose: Lets users send simple help requests to hub operators.
-- Scope: Lightweight support notices only.
-- Notes: This is not a database-backed ticket system.

command = "!helpme"
botname = "SupportTicket"
min_message_length = 10
cooldown_seconds = 180
last_request = {}

function Trim(text)
    return string.gsub(text, "^%s*(.-)%s*$", "%1")
end

function StartsWith(text, prefix)
    return string.sub(text, 1, string.len(prefix)) == prefix
end

function GetMessageAfterCommand(text)
    return Trim(string.sub(text, string.len(command) + 1))
end

function CanSendRequest(nick)
    local now = os.time()

    if last_request[nick] == nil then
        last_request[nick] = now
        return true
    end

    if now - last_request[nick] >= cooldown_seconds then
        last_request[nick] = now
        return true
    end

    return false
end

function SendUserMessage(user, message)
    VH:SendToUser("<" .. botname .. "> " .. message, user)
end

function SendOperatorNotice(message)
    -- Depending on your Verlihub Lua API version, this may need to be changed
    -- to the operator or private-message helper function supported by your build.
    VH:SendToClass("<" .. botname .. "> " .. message, 3, 10)
end

function HandleSupportRequest(user, text)
    local nick = user.sNick
    local request = GetMessageAfterCommand(text)

    if string.len(request) < min_message_length then
        SendUserMessage(user, "Usage: " .. command .. " <describe your issue>")
        return 1
    end

    if not CanSendRequest(nick) then
        SendUserMessage(user, "Please wait before sending another help request.")
        return 1
    end

    SendOperatorNotice("Help request from " .. nick .. ": " .. request)
    SendUserMessage(user, "Your help request was sent to the operators. Please wait for a response.")

    return 1
end

function VH_OnParsedMsgChat(user, text)
    if StartsWith(text, command) then
        return HandleSupportRequest(user, text)
    end

    return 0
end

配置选项

command

command = "!helpme"

用户键入请求帮助的命令。选择一个命令并将其发布到中心规则或 MOTD 中。

示例:

command = "!helpme"
command = "!support"
command = "!ticket"
command = "!ophelp"

botname

botname = "SupportTicket"

自动回复和操作员通知中显示的名称。

示例:

botname = "SupportTicket"
botname = "HelpBot"
botname = "OperatorHelp"
botname = "HubSupport"

min_message_length

min_message_length = 10

命令后所需的最少字符数。这会阻止空请求,例如:

!helpme

它还会阻止弱消息,例如:

!helpme hi

推荐值:

价值意义
5宽容。测试时有用。
10正常帮助请求的良好默认值。
20当用户发送模糊请求时效果会更好。

cooldown_seconds

cooldown_seconds = 180

用户在发送另一个支持请求之前必须等待多长时间。

推荐值:

价值意义
601 分钟。
1803分钟。
3005分钟。

在繁忙的中心或用户不断重复相同的请求时使用较长的冷却时间。

last_request

last_request = {}

用于跟踪用户冷却时间的内部表。除非您要更改脚本逻辑,否则请勿编辑此内容。

配置示例

基本帮助请求

command = "!helpme"
botname = "SupportTicket"
min_message_length = 10
cooldown_seconds = 180

用户示例:

!helpme I need help with registration.

操作员帮助命令

command = "!ophelp"
botname = "OperatorHelp"
min_message_length = 10
cooldown_seconds = 180

用户示例:

!ophelp Someone is flooding main chat.

票证样式命令

command = "!ticket"
botname = "HubSupport"
min_message_length = 20
cooldown_seconds = 300

用户示例:

!ticket I cannot connect after changing my client settings.

对于大多数中心,从以下开始:

command = "!helpme"
botname = "SupportTicket"
min_message_length = 10
cooldown_seconds = 180

这为用户提供了简单的命令,同时减少了空白或重复的请求。

对于繁忙的集线器,请使用:

cooldown_seconds = 300

对于小型私人中心,请使用:

cooldown_seconds = 60

测试脚本

加载脚本后,以普通用户身份测试:

!helpme I need help testing this command.

确认:

  • 用户收到确认消息。
  • 操作员收到帮助请求。
  • 空请求将被拒绝。
  • 短请求低于以下时会被拒绝 min_message_length.
  • 冷却可以防止重复发送垃圾邮件。
  • 该脚本卸载干净。

还测试无效用法:

!helpme

预期结果:

Usage: !helpme <describe your issue>

故障排除

脚本无法加载

检查 Lua 插件是否处于活动状态:

!pluglist

检查文件路径:

!luaload /PATH/TO/HUB/scripts/support-ticket.lua

如果相对路径不起作用,请使用绝对路径。

命令没有响应

查看:

  • 脚本已加载。
  • 该命令完全匹配。
  • Lua 插件支持 VH_OnParsedMsgChat.
  • 用户正在主聊天中键入命令。

尝试一个简短的测试命令:

command = "!testhelp"

然后重新加载脚本并再次测试。

运营商没有收到通知

该示例使用:

VH:SendToClass("<" .. botname .. "> " .. message, 3, 10)

您的 Verlihub Lua 插件版本可能对操作员消息或基于类的消息使用不同的函数。检查您的 Verlihub 版本的 Lua API 示例并替换 SendOperatorNotice() 与您的构建支持的功能。

需要调整的函数是:

function SendOperatorNotice(message)
    VH:SendToClass("<" .. botname .. "> " .. message, 3, 10)
end

用户可以发送垃圾邮件请求

增加冷却时间:

cooldown_seconds = 300

增加最小消息长度:

min_message_length = 20

帮助请求过于模糊

更新使用消息:

SendUserMessage(user, "Usage: " .. command .. " <describe the issue, nickname involved, and what happened>")

这要求用户包含问题、昵称和事件,而不是单一单词的请求。

安全注意事项

该脚本应该保持轻量级。不要添加:

  • 外部 HTTP 请求。
  • 阻止网络呼叫。
  • 数据库写入每条消息。
  • 除非存在日志轮换,否则为每个请求写入文件。
  • 长循环。
  • 睡眠电话。
  • 每条消息都进行大量处理。

如果您需要数据库支持的票证系统,请仅使用此脚本作为单独支持流程的集线器端入口点。

隐私说明

帮助请求可以包含投诉、昵称、连接问题、审核报告或帐户问题。

推荐做法:

  • 仅向操作员发送请求。
  • 不要向所有用户广播支持请求。
  • 除非中心规则解释了原因,否则请勿记录私人详细信息。
  • 如果稍后添加文件日志记录,则轮换或删除日志。
  • 告诉用户不要包含密码或私人凭据。

建议用户警告:

Do not include passwords or private credentials in help requests.

保养注意事项

更改脚本之前保留备份:

cp /PATH/TO/HUB/scripts/support-ticket.lua /PATH/TO/HUB/scripts/support-ticket.lua.bak

如果使用 Git:

cd /PATH/TO/HUB/scripts
git add support-ticket.lua
git commit -m "Update support-ticket.lua settings"

仅更改命令、机器人名称、冷却时间或最小消息长度时,不需要更改逻辑。

未来改进建议

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

  • 票证 ID 号。
  • 基于文件的轮换日志记录。
  • 操作员声明命令。
  • 用户通过票号进行确认。
  • 用于滥用报告的单独命令。
  • 仅限私人运营商的通知。
  • 按 IP 地址或帐户进行速率限制。
  • 与外部支持系统集成。

保持第一个版本较小。仅当功能能够解决真正的集线器管理问题时才添加该功能。

父页面