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.
| Obiettivo | Dettagli |
|---|---|
| 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
- Server → Canale (es. logs) → Impostazioni
- Integrazioni → Webhook → Nuovo Webhook
- Nome (es. “Server Logs”), avatar opzionale
- 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' })
endUso:
-- 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