Créé: 2026/07/02 19:41:27 America/Chicago
Par: admin
Modifié: 2026/07/03 13:19:11 America/Chicago
Par: admin

Le support-ticket.lua Le script donne aux utilisateurs une petite commande d'aide dans un hub Verlihub. Un utilisateur tape une commande telle que !helpme avec un court message, et les opérateurs reçoivent une notification formatée avec le surnom de l'utilisateur et le texte de la demande.

Ce script n'est pas un guichet basé sur une base de données. Il s'agit d'une aide à la notification côté hub pour les problèmes d'enregistrement, les questions de connexion, les rapports d'abus, les questions de règles et d'autres problèmes nécessitant l'examen d'un opérateur.

Ce que fait ce script

Le script surveille le chat principal pour une commande de support configurée et gère les messages correspondants avant qu'ils ne continuent dans le chat normal.

Exemple de commande utilisateur:

!helpme I cannot connect to the correct hublist.

Exemple d'avis d'opérateur:

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

Les utilisations courantes incluent:

  • Permettre aux utilisateurs de contacter des opérateurs sans connaître leur pseudo.
  • Connexion au hub de reporting ou problèmes hublist.
  • Signaler les utilisateurs abusifs.
  • Demander de l'aide pour un compte ou une inscription.
  • Demander des éclaircissements sur les règles.
  • Création d'un flux de travail de support simple à l'intérieur du hub.

Le script envoie uniquement des notifications formatées. Il ne crée pas d'identifiants de ticket, ne stocke pas l'historique, ne revendique pas la propriété et ne remplace pas un système d'assistance Web.

Exigences

Ce script nécessite:

  • Verlihub installé et en cours d’exécution.
  • Le plugin Verlihub Lua installé.
  • Le plugin Lua activé dans Verlihub.
  • Autorisation de charger et décharger les scripts Lua.
  • Un répertoire de scripts inscriptible pour les fichiers Verlihub Lua.
  • Une version Verlihub Lua qui expose des crochets de message de discussion tels que VH_OnParsedMsgChat.

Avant de charger le script, vérifiez que le plugin Lua est actif:

!pluglist

Si le plug-in Lua n'est pas répertorié, chargez-le ou activez-le d'abord à partir de l'article de configuration parent Lua.

Utilisez un répertoire de script dédié:

mkdir -p /PATH/TO/HUB/scripts

Placez le script à:

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

Pour les systèmes de production, seuls les administrateurs de confiance ou l'utilisateur du service Verlihub doivent écrire dans ce répertoire. N'utilisez pas d'autorisations d'écriture universelle.

Commandes de chargement et de déchargement

Chargez le script:

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

Déchargez le script:

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

Si vous modifiez le script, déchargez-le et chargez-le à nouveau:

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

Utilisez le chemin absolu complet, sauf si la configuration de votre plugin Verlihub Lua prend en charge les chemins relatifs.

Code de script

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

Options de configuration

command

command = "!helpme"

La commande que les utilisateurs saisissent pour demander de l'aide. Choisissez une commande et publiez-la dans les règles du hub ou MOTD.

Exemples:

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

botname

botname = "SupportTicket"

Le nom affiché dans les réponses automatiques et les notifications de l'opérateur.

Exemples:

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

min_message_length

min_message_length = 10

Le nombre minimum de caractères requis après la commande. Cela bloque les requêtes vides telles que:

!helpme

Il bloque également les messages faibles tels que:

!helpme hi

Valeurs recommandées:

ValeurSignification
5Permissif. Utile lors des tests.
10Bonne valeur par défaut pour les demandes d'aide normales.
20Mieux lorsque les utilisateurs envoient des demandes vagues.

cooldown_seconds

cooldown_seconds = 180

Combien de temps un utilisateur doit attendre avant d'envoyer une autre demande d'assistance.

Valeurs recommandées:

ValeurSignification
601 minute.
1803 minutes.
3005 minutes.

Utilisez un temps de recharge plus long sur les hubs occupés ou lorsque les utilisateurs continuent de répéter la même demande.

last_request

last_request = {}

Tableau interne utilisé pour suivre les temps de recharge des utilisateurs. Ne modifiez pas ceci sauf si vous modifiez la logique du script.

Exemples de configurations

Demande d'aide de base

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

Exemple d'utilisateur:

!helpme I need help with registration.

Commande d'aide de l'opérateur

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

Exemple d'utilisateur:

!ophelp Someone is flooding main chat.

Commande de style de ticket

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

Exemple d'utilisateur:

!ticket I cannot connect after changing my client settings.

Pour la plupart des hubs, commencez par:

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

Cela donne aux utilisateurs une commande simple tout en réduisant les demandes vides ou répétées.

Pour les hubs très fréquentés, utilisez:

cooldown_seconds = 300

Pour un petit hub privé, utilisez:

cooldown_seconds = 60

Tester le script

Après avoir chargé le script, testez en tant qu'utilisateur normal:

!helpme I need help testing this command.

Confirmez que:

  • L'utilisateur reçoit un message de confirmation.
  • Les opérateurs reçoivent la demande d'aide.
  • Les demandes vides sont rejetées.
  • Les requêtes courtes sont rejetées lorsqu'elles sont en dessous min_message_length.
  • Le temps de recharge empêche le spam répété.
  • Le script se décharge proprement.

Testez également les utilisations non valides:

!helpme

Résultat attendu:

Usage: !helpme <describe your issue>

Dépannage

Le script ne se charge pas

Vérifiez que le plugin Lua est actif:

!pluglist

Vérifiez le chemin du fichier:

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

Utilisez le chemin absolu si les chemins relatifs ne fonctionnent pas.

La commande ne répond pas

Vérifier:

  • Le script est chargé.
  • La commande correspond exactement.
  • Le plugin Lua prend en charge VH_OnParsedMsgChat.
  • L'utilisateur tape la commande dans le chat principal.

Essayez une courte commande de test:

command = "!testhelp"

Rechargez ensuite le script et testez à nouveau.

Les opérateurs ne reçoivent pas d'avis

L'exemple utilise:

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

Votre version du plugin Verlihub Lua peut utiliser une fonction différente pour les messages d'opérateur ou les messages basés sur les classes. Vérifiez les exemples d'API Lua pour votre version Verlihub et remplacez SendOperatorNotice() avec la fonction prise en charge par votre build.

La fonction à régler est:

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

Les utilisateurs peuvent envoyer des demandes de spam

Augmentez le temps de recharge:

cooldown_seconds = 300

Augmentez la longueur minimale du message:

min_message_length = 20

Les demandes d'aide sont trop vagues

Mettez à jour le message d'utilisation:

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

Cela demande aux utilisateurs d'inclure le problème, le surnom et l'événement au lieu d'une demande en un seul mot.

Notes de sécurité

Ce script doit rester léger. N'ajoutez pas:

  • Requêtes HTTP externes.
  • Bloquer les appels réseau.
  • La base de données écrit sur chaque message.
  • Le fichier écrit pour chaque demande, sauf si une rotation du journal existe.
  • Longues boucles.
  • Les appels du sommeil.
  • Traitement lourd par message.

Si vous avez besoin d'un système de tickets basé sur une base de données, utilisez ce script uniquement comme point d'entrée côté hub vers un processus de support distinct.

Notes de confidentialité

Les demandes d'aide peuvent contenir des plaintes, des surnoms, des problèmes de connexion, des rapports de modération ou des questions sur le compte.

Pratiques recommandées:

  • Envoyez des demandes uniquement aux opérateurs.
  • Ne diffusez pas les demandes d’assistance à tous les utilisateurs.
  • N'enregistrez pas de détails privés à moins que les règles du hub n'expliquent pourquoi.
  • Faites pivoter ou supprimez les journaux si la journalisation des fichiers est ajoutée ultérieurement.
  • Dites aux utilisateurs de ne pas inclure de mots de passe ou d’informations d’identification privées.

Avertissement utilisateur suggéré:

Do not include passwords or private credentials in help requests.

Notes d'entretien

Conservez une sauvegarde avant de modifier le script:

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

Si vous utilisez Git:

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

Lorsque vous modifiez uniquement la commande, le nom du bot, le temps de recharge ou la longueur minimale du message, aucune modification logique n'est requise.

Améliorations futures suggérées

Les versions ultérieures possibles pourraient ajouter:

  • Numéros d’identification du billet.
  • Journalisation basée sur des fichiers avec rotation.
  • Une commande de réclamation d’opérateur.
  • Confirmation de l'utilisateur avec un numéro de ticket.
  • Commandes séparées pour les rapports d'abus.
  • Avis réservés aux opérateurs privés.
  • Limites de débit par adresse IP ou compte.
  • Intégration avec un système de support externe.

Gardez la première version petite. Ajoutez une fonctionnalité uniquement lorsqu'elle résout un véritable problème de gestion de hub.

Page Parente