Utworzony: 2026/07/02 19:41:27 America/Chicago
Przez: admin
Zmieniony: 2026/07/03 13:19:11 America/Chicago
Przez: admin

The support-ticket.lua skrypt udostępnia użytkownikom małe polecenie pomocy w centrum Verlihub. Użytkownik wpisuje polecenie takie jak !helpme za pomocą krótkiej wiadomości, a operatorzy otrzymają sformatowane powiadomienie z pseudonimem użytkownika i tekstem żądania.

Ten skrypt nie jest kasą biletową opartą na bazie danych. Jest to narzędzie pomagające powiadamiać po stronie centrum o problemach z rejestracją, pytaniach o połączenie, raportach nadużyć, pytaniach o reguły i innych problemach, które wymagają uwagi operatora.

Co robi ten skrypt

Skrypt obserwuje główny czat pod kątem skonfigurowanego polecenia wsparcia i obsługuje pasujące wiadomości, zanim przejdą przez normalny czat.

Przykładowe polecenie użytkownika:

!helpme I cannot connect to the correct hublist.

Przykładowa uwaga operatora:

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

Typowe zastosowania obejmują:

  • Umożliwianie użytkownikom kontaktowania się z operatorami bez znajomości pseudonimu operatora.
  • Zgłaszanie problemów z połączeniem koncentratora lub hublist.
  • Zgłaszanie nadużyć użytkowników.
  • Prośba o pomoc dotyczącą konta lub rejestracji.
  • Prośba o wyjaśnienie zasad.
  • Tworzenie prostego przepływu pracy pomocy technicznej w centrum.

Skrypt wysyła tylko sformatowane powiadomienia. Nie tworzy identyfikatorów biletów, historii sklepu, roszczeń własności ani nie zastępuje systemu wsparcia internetowego.

Wymagania

Ten skrypt wymaga:

  • Verlihub zainstalowany i działa.
  • Zainstalowana wtyczka Verlihub Lua.
  • Wtyczka Lua włączona w Verlihub.
  • Zezwolenie na ładowanie i rozładowywanie Lua skryptów.
  • Zapisywalny katalog skryptów dla plików Verlihub Lua.
  • Kompilacja Verlihub Lua, która udostępnia haki do wiadomości czatu, takie jak VH_OnParsedMsgChat.

Przed załadowaniem skryptu upewnij się, że wtyczka Lua jest aktywna:

!pluglist

Jeśli wtyczki Lua nie ma na liście, załaduj ją lub włącz najpierw z nadrzędnego artykułu instalacyjnego Lua.

Użyj dedykowanego katalogu skryptów:

mkdir -p /PATH/TO/HUB/scripts

Umieść skrypt pod adresem:

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

W przypadku systemów produkcyjnych do tego katalogu powinni zapisywać tylko zaufani administratorzy lub użytkownik usługi Verlihub. Nie używaj uprawnień do zapisu na całym świecie.

Polecenia ładowania i rozładowywania

Załaduj skrypt:

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

Wyładuj skrypt:

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

Jeśli edytujesz skrypt, wyładuj go i załaduj ponownie:

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

Użyj pełnej ścieżki bezwzględnej, chyba że konfiguracja wtyczki Verlihub Lua obsługuje ścieżki względne.

Kod skryptu

-- 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

Opcje konfiguracji

command

command = "!helpme"

Polecenie, które użytkownicy wpisują, aby poprosić o pomoc. Wybierz jedno polecenie i opublikuj je w regułach centrum lub MOTD.

Przykłady:

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

botname

botname = "SupportTicket"

Nazwa wyświetlana w odpowiedziach automatycznych i powiadomieniach operatora.

Przykłady:

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

min_message_length

min_message_length = 10

Minimalna liczba znaków wymagana po poleceniu. Blokuje to puste żądania, takie jak:

!helpme

Blokuje również słabe wiadomości, takie jak:

!helpme hi

Zalecane wartości:

WartośćOznaczający
5Dozwalający. Przydatne podczas testów.
10Dobre ustawienie domyślne dla zwykłych próśb o pomoc.
20Lepiej, gdy użytkownicy wysyłają niejasne żądania.

cooldown_seconds

cooldown_seconds = 180

Jak długo użytkownik musi czekać przed wysłaniem kolejnej prośby o pomoc.

Zalecane wartości:

WartośćOznaczający
601 minuta.
1803 minuty.
3005 minut.

Użyj dłuższego czasu odnowienia w przypadku zajętych koncentratorów lub gdy użytkownicy powtarzają to samo żądanie.

last_request

last_request = {}

Wewnętrzna tabela używana do śledzenia czasów odnowienia użytkownika. Nie edytuj tego, chyba że zmieniasz logikę skryptu.

Przykładowe konfiguracje

Podstawowa prośba o pomoc

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

Przykład użytkownika:

!helpme I need help with registration.

Polecenie Pomocy Operatora

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

Przykład użytkownika:

!ophelp Someone is flooding main chat.

Polecenie stylu biletu

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

Przykład użytkownika:

!ticket I cannot connect after changing my client settings.

W przypadku większości koncentratorów zacznij od:

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

Daje to użytkownikom łatwe polecenie, jednocześnie redukując puste lub powtarzające się żądania.

W przypadku ruchliwych węzłów użyj:

cooldown_seconds = 300

W przypadku małego prywatnego centrum użyj:

cooldown_seconds = 60

Testowanie skryptu

Po załadowaniu skryptu przetestuj jako zwykły użytkownik:

!helpme I need help testing this command.

Potwierdź, że:

  • Użytkownik otrzymuje wiadomość z potwierdzeniem.
  • Operatorzy otrzymują prośbę o pomoc.
  • Puste żądania są odrzucane.
  • Krótkie żądania są odrzucane, jeśli znajdują się poniżej min_message_length.
  • Cooldown zapobiega powtarzającemu się spamowi.
  • Skrypt ładuje się czysto.

Przetestuj także nieprawidłowe użycie:

!helpme

Oczekiwany wynik:

Usage: !helpme <describe your issue>

Rozwiązywanie problemów

Skrypt nie ładuje się

Sprawdź, czy wtyczka Lua jest aktywna:

!pluglist

Sprawdź ścieżkę pliku:

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

Użyj ścieżki bezwzględnej, jeśli ścieżki względne nie działają.

Polecenie nie odpowiada

Sprawdzać:

  • Skrypt został załadowany.
  • Polecenie pasuje dokładnie.
  • Wtyczka Lua obsługuje VH_OnParsedMsgChat.
  • Użytkownik wpisuje polecenie na czacie głównym.

Wypróbuj krótkie polecenie testowe:

command = "!testhelp"

Następnie załaduj ponownie skrypt i przetestuj ponownie.

Operatorzy nie otrzymują powiadomień

W przykładzie zastosowano:

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

Twoja wersja wtyczki Verlihub Lua może wykorzystywać inną funkcję dla wiadomości operatorskich lub wiadomości opartych na klasach. Sprawdź przykłady API Lua dla swojej wersji Verlihub i wymień SendOperatorNotice() z funkcją obsługiwaną przez twoją kompilację.

Funkcja do regulacji to:

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

Użytkownicy mogą wysyłać prośby o spam

Zwiększ czas odnowienia:

cooldown_seconds = 300

Zwiększ minimalną długość wiadomości:

min_message_length = 20

Prośby o pomoc są zbyt niejasne

Zaktualizuj komunikat dotyczący użycia:

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

Spowoduje to wyświetlenie prośby o podanie problemu, pseudonimu i wydarzenia zamiast żądania składającego się z jednego słowa.

Uwagi dotyczące bezpieczeństwa

Ten skrypt powinien pozostać lekki. Nie dodawaj:

  • Zewnętrzne żądania HTTP.
  • Blokowanie połączeń sieciowych.
  • Baza danych zapisuje każdą wiadomość.
  • Plik jest zapisywany dla każdego żądania, chyba że istnieje rotacja dziennika.
  • Długie pętle.
  • Wezwania do snu.
  • Duże przetwarzanie wiadomości.

Jeśli potrzebujesz systemu zgłoszeń opartego na bazie danych, użyj tego skryptu tylko jako punktu wejścia po stronie centrum do oddzielnego procesu wsparcia.

Uwagi dotyczące prywatności

Prośby o pomoc mogą zawierać skargi, pseudonimy, problemy z połączeniem, raporty moderacji lub pytania dotyczące konta.

Zalecane praktyki:

  • Wysyłaj zapytania tylko do operatorów.
  • Nie wysyłaj próśb o pomoc do wszystkich użytkowników.
  • Nie rejestruj prywatnych danych, chyba że zasady centrum wyjaśniają, dlaczego.
  • Obróć lub usuń dzienniki, jeśli rejestrowanie plików zostanie dodane później.
  • Poinformuj użytkowników, aby nie podawali haseł ani prywatnych danych uwierzytelniających.

Sugerowane ostrzeżenie dla użytkownika:

Do not include passwords or private credentials in help requests.

Uwagi dotyczące konserwacji

Zachowaj kopię zapasową przed zmianą skryptu:

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

Jeśli używasz Gita:

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

Zmieniając tylko polecenie, nazwę bota, czas odnowienia lub minimalną długość wiadomości, nie są wymagane żadne zmiany logiczne.

Sugerowane przyszłe ulepszenia

Możliwe późniejsze wersje mogłyby dodać:

  • Numery identyfikacyjne biletów.
  • Rejestrowanie oparte na plikach z rotacją.
  • Polecenie żądania operatora.
  • Potwierdzenie użytkownika z numerem biletu.
  • Oddzielne polecenia dla raportów nadużyć.
  • Powiadomienia tylko dla prywatnych operatorów.
  • Limity szybkości według adresu IP lub konta.
  • Integracja z zewnętrznym systemem wsparcia.

Zachowaj małą wersję pierwszej wersji. Dodawaj funkcję tylko wtedy, gdy rozwiązuje ona rzeczywisty problem z zarządzaniem koncentratorem.

Strona Nadrzędna