这 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
用户在发送另一个支持请求之前必须等待多长时间。
推荐值:
| 价值 | 意义 |
|---|---|
60 | 1 分钟。 |
180 | 3分钟。 |
300 | 5分钟。 |
在繁忙的中心或用户不断重复相同的请求时使用较长的冷却时间。
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 地址或帐户进行速率限制。
- 与外部支持系统集成。
保持第一个版本较小。仅当功能能够解决真正的集线器管理问题时才添加该功能。