Como Usar?

API Principal

-- ✅ ÚNICA forma de acessar o sistema de webhooks
LockSystem.Webhook.send(url, data, options)
LockSystem.Webhook.sendDiscord(webhookUrl, content, options)
LockSystem.Webhook.sendDiscordEmbed(webhookUrl, title, description, options)
LockSystem.Webhook.sendSlack(webhookUrl, text, options)
LockSystem.Webhook.sendError(error, details, webhookUrl)
LockSystem.Webhook.sendLog(level, message, data, webhookUrl)
LockSystem.Webhook.stats()
LockSystem.Webhook.clear()
LockSystem.Webhook.template(templateName, variables)

Segurança de Acesso

-- Validação automática de origem
-- Stack trace validation previne uso malicioso
-- Fila protegida contra overflow
-- Tentativas de hack resultam em blacklist automático
-- Rate limiting automático por domínio

Configuração via ENV Variables

⚠️ IMPORTANTE: Configure webhooks através das variáveis de ambiente.

-- Configure no painel de desenvolvedor:
ERROR_WEBHOOK_URL = "https://discord.com/api/webhooks/..."  -- Para erros automáticos
LOG_WEBHOOK_URL = "https://discord.com/api/webhooks/..."    -- Para logs do sistema

-- O sistema usa automaticamente essas URLs quando disponíveis
LockSystem.Webhook.sendError("Erro crítico!")  -- Usa ERROR_WEBHOOK_URL
LockSystem.Webhook.sendLog("info", "Sistema iniciado")  -- Usa LOG_WEBHOOK_URL

Webhook Genérico (Básico)

-- Enviar webhook simples para qualquer URL
local webhookId = LockSystem.Webhook.send("https://example.com/webhook", {
    message = "Hello World",
    timestamp = os.time(),
    server = getServerName()
}, {
    headers = {["Content-Type"] = "application/json"},
    maxRetries = 3,
    onSuccess = function(response, info)
        print("Webhook enviado com sucesso!")
    end,
    onError = function(error)
        print("Falha no webhook: " .. error)
    end
})

print("Webhook enfileirado com ID: " .. webhookId)

Discord - Mensagem Simples

-- Enviar mensagem simples para Discord
LockSystem.Webhook.sendDiscord("https://discord.com/api/webhooks/YOUR_WEBHOOK", 
    "🎮 Servidor online com " .. #getElementsByType("player") .. " players!", {
    username = "LockCode Bot",
    avatar_url = "https://example.com/bot-avatar.png"
})

Discord - Embed Avançado

-- Enviar embed rico para Discord
LockSystem.Webhook.sendDiscordEmbed("https://discord.com/api/webhooks/YOUR_WEBHOOK",
    "🎯 Status do Servidor",
    "Relatório automático do sistema", {
    color = 3447003,  -- Azul
    fields = {
        {name = "Players Online", value = tostring(#getElementsByType("player")), inline = true},
        {name = "Uptime", value = math.floor(getTickCount()/60000) .. " minutos", inline = true},
        {name = "Recursos Ativos", value = tostring(#getResources()), inline = true}
    },
    footer = {text = "LockCode System", icon_url = "https://example.com/icon.png"},
    timestamp = true,  -- Adiciona timestamp automático
    thumbnail = {url = "https://example.com/server-icon.png"}
})

Slack Integration

-- Enviar mensagem para Slack
LockSystem.Webhook.sendSlack("https://hooks.slack.com/services/YOUR_WEBHOOK",
    "⚠️ Servidor reiniciando em 5 minutos!", {
    username = "ServerBot",
    icon_emoji = ":warning:",
    channel = "#server-alerts",
    attachments = {
        {
            color = "warning",
            fields = {
                {title = "Motivo", value = "Manutenção programada", short = true},
                {title = "Duração", value = "~10 minutos", short = true}
            }
        }
    }
})

Logs Automáticos

-- Sistema de logs com níveis diferentes
LockSystem.Webhook.sendLog("info", "Player conectado ao servidor", {
    player_name = "João123",
    player_serial = "ABC123456789",
    ip = "192.168.1.100"
})

LockSystem.Webhook.sendLog("warn", "Tentativa de comando sem permissão", {
    player = "Hacker123",
    command = "/ban",
    action = "blocked"
})

LockSystem.Webhook.sendLog("error", "Falha na conexão com database", {
    error_code = "CONN_TIMEOUT",
    retry_count = 3
})

LockSystem.Webhook.sendLog("success", "Backup realizado com sucesso", {
    backup_size = "50MB",
    duration = "2.5s"
})

Alertas de Erro Automáticos

-- Enviar erros críticos automaticamente
LockSystem.Webhook.sendError("Division by zero in money system", 
    "Arquivo: money.lua, Linha: 45, Função: calculateBonus()")

-- O sistema inclui automaticamente:
-- - Nome do servidor
-- - Resource atual  
-- - Shop ID
-- - Timestamp
-- - Fingerprint do servidor

Atualizado