Creado: 2026/07/02 19:41:27 America/Chicago
Por: admin
Modificado: 2026/07/03 13:19:11 America/Chicago
Por: admin

El support-ticket.lua El script ofrece a los usuarios un pequeño comando de ayuda dentro de un centro Verlihub. Un usuario escribe un comando como !helpme con un mensaje corto, y los operadores reciben un aviso formateado con el apodo del usuario y el texto de la solicitud.

Este script no es una taquilla respaldada por una base de datos. Es una ayuda de notificación del lado del concentrador para problemas de registro, preguntas de conexión, informes de abuso, preguntas sobre reglas y otros problemas que necesitan que un operador revise.

Qué hace este guión

El script observa el chat principal en busca de un comando de soporte configurado y maneja los mensajes coincidentes antes de que continúen a través del chat normal.

Ejemplo de comando de usuario:

!helpme I cannot connect to the correct hublist.

Ejemplo de aviso para el operador:

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

Los usos comunes incluyen:

  • Permitir a los usuarios contactar a los operadores sin conocer el apodo del operador.
  • Informando problemas de conexión del hub o hublist.
  • Denunciar usuarios abusivos.
  • Solicitar ayuda para la cuenta o el registro.
  • Solicitando aclaración de reglas.
  • Crear un flujo de trabajo de soporte simple dentro del centro.

El script envía avisos formateados únicamente. No crea ID de boletos, no almacena historial, no reclama propiedad ni reemplaza un sistema de soporte web.

Requisitos

Este script requiere:

  • Verlihub instalado y funcionando.
  • El complemento Verlihub Lua instalado.
  • El complemento Lua habilitado en Verlihub.
  • Permiso para cargar y descargar scripts Lua.
  • Un directorio de script grabable para archivos Verlihub Lua.
  • Una compilación Verlihub Lua que expone ganchos de mensajes de chat como VH_OnParsedMsgChat.

Antes de cargar el script, confirme que el complemento Lua esté activo:

!pluglist

Si el complemento Lua no aparece en la lista, cárguelo o habilítelo primero desde el artículo de configuración principal Lua.

Utilice un directorio de script dedicado:

mkdir -p /PATH/TO/HUB/scripts

Coloque el guión en:

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

Para sistemas de producción, solo los administradores de confianza o el usuario del servicio Verlihub deben escribir en ese directorio. No utilice permisos de escritura mundial.

Comandos de carga y descarga

Cargue el guión:

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

Descargar el guión:

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

Si edita el script, descárguelo y cárguelo nuevamente:

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

Utilice la ruta absoluta completa a menos que la configuración del complemento Verlihub Lua admita rutas relativas.

Código de secuencia de comandos

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

Opciones de configuración

command

command = "!helpme"

El comando que los usuarios escriben para solicitar ayuda. Elija un comando y publíquelo en las reglas del centro o en MOTD.

Ejemplos:

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

botname

botname = "SupportTicket"

El nombre que se muestra en las respuestas automáticas y avisos del operador.

Ejemplos:

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

min_message_length

min_message_length = 10

El número mínimo de caracteres requeridos después del comando. Esto bloquea solicitudes vacías como:

!helpme

También bloquea mensajes débiles como:

!helpme hi

Valores recomendados:

ValorSignificado
5Permisivo. Útil durante la prueba.
10Buen valor predeterminado para solicitudes de ayuda normales.
20Mejor cuando los usuarios envían solicitudes vagas.

cooldown_seconds

cooldown_seconds = 180

Cuánto tiempo debe esperar un usuario antes de enviar otra solicitud de soporte.

Valores recomendados:

ValorSignificado
601 minuto.
1803 minutos.
3005 minutos.

Utilice un tiempo de reutilización más prolongado en centros ocupados o cuando los usuarios sigan repitiendo la misma solicitud.

last_request

last_request = {}

Tabla interna utilizada para realizar un seguimiento de los tiempos de reutilización del usuario. No edite esto a menos que esté cambiando la lógica del script.

Configuraciones de ejemplo

Solicitud de ayuda básica

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

Ejemplo de usuario:

!helpme I need help with registration.

Comando de ayuda del operador

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

Ejemplo de usuario:

!ophelp Someone is flooding main chat.

Comando de estilo de ticket

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

Ejemplo de usuario:

!ticket I cannot connect after changing my client settings.

Para la mayoría de los centros, comience con:

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

Esto brinda a los usuarios un comando sencillo y al mismo tiempo reduce las solicitudes en blanco o repetidas.

Para centros ocupados, utilice:

cooldown_seconds = 300

Para un centro privado pequeño, utilice:

cooldown_seconds = 60

Probando el guión

Después de cargar el script, pruébelo como un usuario normal:

!helpme I need help testing this command.

Confirma que:

  • El usuario recibe un mensaje de confirmación.
  • Los operadores reciben la solicitud de ayuda.
  • Las solicitudes vacías se rechazan.
  • Las solicitudes cortas se rechazan cuando están por debajo min_message_length.
  • El tiempo de reutilización evita el spam repetido.
  • El script se descarga limpiamente.

Pruebe también el uso no válido:

!helpme

Resultado esperado:

Usage: !helpme <describe your issue>

Solución de problemas

El guión no se carga

Compruebe que el complemento Lua esté activo:

!pluglist

Verifique la ruta del archivo:

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

Utilice la ruta absoluta si las rutas relativas no funcionan.

El comando no responde

Controlar:

  • El guión está cargado.
  • El comando coincide exactamente.
  • El complemento Lua admite VH_OnParsedMsgChat.
  • El usuario está escribiendo el comando en el chat principal.

Pruebe un breve comando de prueba:

command = "!testhelp"

Luego vuelva a cargar el script y pruébelo nuevamente.

Los operadores no reciben avisos

El ejemplo utiliza:

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

Su versión del complemento Verlihub Lua puede usar una función diferente para mensajes de operador o mensajes basados ​​en clases. Verifique los ejemplos de API Lua para su versión Verlihub y reemplácelos SendOperatorNotice() con la función admitida por su compilación.

La función a ajustar es:

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

Los usuarios pueden enviar solicitudes de spam

Aumentar el tiempo de reutilización:

cooldown_seconds = 300

Aumente la longitud mínima del mensaje:

min_message_length = 20

Las solicitudes de ayuda son demasiado vagas

Actualice el mensaje de uso:

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

Esto solicita a los usuarios que incluyan el problema, el apodo y el evento en lugar de una solicitud de una sola palabra.

Notas de seguridad

Este script debe ser liviano. No agregue:

  • Solicitudes HTTP externas.
  • Bloqueo de llamadas de red.
  • La base de datos escribe en cada mensaje.
  • Escrituras de archivos para cada solicitud a menos que exista rotación de registros.
  • Bucles largos.
  • Llamadas de sueño.
  • Procesamiento pesado por mensaje.

Si necesita un sistema de tickets respaldado por una base de datos, utilice este script solo como punto de entrada del lado central a un proceso de soporte independiente.

Notas de privacidad

Las solicitudes de ayuda pueden contener quejas, apodos, problemas de conexión, informes de moderación o preguntas sobre la cuenta.

Prácticas recomendadas:

  • Envíe solicitudes solo a operadores.
  • No transmita solicitudes de soporte a todos los usuarios.
  • No registre detalles privados a menos que las reglas del centro expliquen por qué.
  • Gire o elimine registros si el registro de archivos se agrega más adelante.
  • Dígales a los usuarios que no incluyan contraseñas ni credenciales privadas.

Advertencia de usuario sugerida:

Do not include passwords or private credentials in help requests.

Notas de mantenimiento

Mantenga una copia de seguridad antes de cambiar el script:

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

Si usa Git:

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

Al cambiar solo el comando, el nombre del bot, el tiempo de reutilización o la longitud mínima del mensaje, no se requieren cambios lógicos.

Mejoras futuras sugeridas

Posibles versiones posteriores podrían agregar:

  • Números de identificación de boletos.
  • Registro basado en archivos con rotación.
  • Un comando de reclamo del operador.
  • Confirmación de usuario con un número de ticket.
  • Comandos separados para informes de abuso.
  • Avisos exclusivos para operadores privados.
  • Límites de tarifas por dirección IP o cuenta.
  • Integración con un sistema de soporte externo.

Mantenga la primera versión pequeña. Agregue una función solo cuando resuelva un problema real de administración del centro.

Página Superior