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.
- Сообщение о злоупотреблениях со стороны пользователей.
- Прошу помощи в учетной записи или регистрации.
- Просьба разъяснить правила.
- Создание простого рабочего процесса поддержки внутри хаба.
Скрипт отправляет только отформатированные уведомления. Он не создает идентификаторы заявок, не сохраняет историю, не заявляет права собственности и не заменяет систему веб-поддержки.
Требования
Этот скрипт требует:
- 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 может использовать другую функцию для сообщений оператора или сообщений на основе классов. Проверьте примеры API Lua для вашей версии Verlihub и замените 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"
При изменении только команды, имени бота, времени восстановления или минимальной длины сообщения никаких изменений логики не требуется.
Предлагаемые будущие улучшения
Возможные более поздние версии могут добавить:
- Идентификационные номера билетов.
- Файловое журналирование с ротацией.
- Команда утверждения оператора.
- Подтверждение пользователя номером билета.
- Отдельные команды для отчетов о злоупотреблениях.
- Уведомления только для частных операторов.
- Ограничения скорости по IP-адресу или учетной записи.
- Интеграция с внешней системой поддержки.
Пусть первая версия будет маленькой. Добавляйте функцию только в том случае, если она решает реальную проблему управления хабом.