Созданный: 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.
  • Сообщение о злоупотреблениях со стороны пользователей.
  • Прошу помощи в учетной записи или регистрации.
  • Просьба разъяснить правила.
  • Создание простого рабочего процесса поддержки внутри хаба.

Скрипт отправляет только отформатированные уведомления. Он не создает идентификаторы заявок, не сохраняет историю, не заявляет права собственности и не заменяет систему веб-поддержки.

Требования

Этот скрипт требует:

  • 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 может использовать другую функцию для сообщений оператора или сообщений на основе классов. Проверьте примеры 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-адресу или учетной записи.
  • Интеграция с внешней системой поддержки.

Пусть первая версия будет маленькой. Добавляйте функцию только в том случае, если она решает реальную проблему управления хабом.

Родительская Страница