Discord Webhook

INFO

I webhook di Discord permettono di mandare messaggi dal server (log admin, annunci, report). Il webhook è una URL; la chiamata avviene lato server con PerformHttpRequest.

ObiettivoDettagli
Cosa imparerai• Creare un webhook su Discord
• Inviare messaggi dal server
• Log admin e report
• Non esporre il webhook nel client
Prerequisiti• Canale Discord
• Concetti secrets (modulo 12/05)

1. Creare un Webhook su Discord

  1. Server → Canale (es. logs) → Impostazioni
  2. Integrazioni → Webhook → Nuovo Webhook
  3. Nome (es. “Server Logs”), avatar opzionale
  4. Copia l’URL del webhook
https://discord.com/api/webhooks/ID/TOKEN

2. Inviare un Messaggio

-- server.lua (MAI nel client!)
local webhook = ConfigServer.DiscordWebhook  -- dal config server-only
 
local function sendDiscord(title, message, color)
    PerformHttpRequest(webhook, function() end, 'POST', json.encode({
        username = 'Server Bot',
        embeds = {
            {
                title = title,
                description = message,
                color = color,   -- es. 0x00FF00 verde
                footer = { text = os.date('%d/%m/%Y %H:%M:%S') },
            }
        }
    }), { ['Content-Type'] = 'application/json' })
end

Uso:

-- Log di un acquisto
sendDiscord('Economia', 'Giocatore X ha comprato un veicolo per 50000$', 0x00FF00)
 
-- Log di un exploit sospetto
sendDiscord('Sicurezza', 'Evento non valido da giocatore Y', 0xFF0000)

3. Segnare un Utente (@)

Per menzionare un ruolo o giocatore:

-- Menziona un ruolo
description = '<@&123456789012345678> Sei stato bannato'
 
-- Menziona un utente
description = '<@123456789012345678> Sei stato bannato'

4. Webhook con File (opzionale)

Per inviare file (es. screenshot) serve un client Discord più avanzato. I webhook semplici inviano solo testo/embed. Se ti serve upload, valuta librerie Lua HTTP (es. cfx-http via resources).


5. Best Practice di Sicurezza

WARNING

Non mettere il webhook nel client! Un giocatore con la console può leggerlo e spammare il tuo canale Discord. Il webhook va SOLO nei file server_scripts (vedi Secrets e Best Practice).

  • Usa un canale dedicato ai log (niente webhook su canali pubblici usati per chat)
  • Rate limit le chiamate (un attacco può saturare il webhook)
  • Non inviare dati sensibili (IP, password)
  • Se un webhook viene leakato, rigeneralo su Discord

6. Esempio: Log Admin

-- server.lua
RegisterNetEvent('admin:logAction')
AddEventHandler('admin:logAction', function(target, action)
    local admin = GetPlayerName(source)
    local targetName = GetPlayerName(target)
    sendDiscord('Admin', admin .. ' ha eseguito: ' .. action .. ' su ' .. targetName, 0xFFAA00)
end)

Verifica

  • Webhook nel config server-only
  • Nessun webhook nel client
  • Rate limit ragionevole
  • Niente dati sensibili nei log

Modulo Sistemi di Gioco completato! Prossimo modulo: 15 - UI e VFX


Torna alla: Indice Generale