Liste blanche FiveM — Guide complet (txAdmin, scripts, base de données)
Dans FiveM, une liste blanche est un mécanisme de contrôle d'accès qui restreint l'accès au serveur aux joueurs pré-approuvés, en fonction de leurs identifiants uniques (licence Rockstar, identifiant Steam, identifiant Discord, etc.). Vous trouverez ci-dessous un guide de production décrivant la liste blanche intégrée de txAdmin, les modèles de script, le stockage de la base de données et les notes de fiabilité.
TL;DR Matrice des options
| Mode | Où installer | Ce qu'il vérifie | Idéal pour | Remarques |
|---|---|---|---|---|
| Licence approuvée | txAdmin → Paramètres → Gestionnaire de joueurs → Mode liste blanche | licence: (Rockstar) | La plupart des serveurs | Simple, fiable ; approbations manuelles ou pré-approbations prises en charge |
| Membre Discord | txAdmin (lié à Discord) | discorde: est membre de la guilde | Communautés centrées sur Discorde | Utilisateurs non-Discord bloqués |
| Rôle Discord | txAdmin (lié à Discord) | discorde: a un rôle spécifique | Accès limité par rôle (donateur, personnel) | Combiner avec les automatisations de rôles |
| Administrateur uniquement | txAdmin | Administrateurs uniquement | Nuits de maintenance/développement | Verrouille efficacement le serveur, non recommandé |
| Script personnalisé | Ressource Lua/JS | Tous les identifiants que vous souhaitez | Règles granulaires et UX | Nécessite un code et un entretien |
Recommandation: Utiliser Licence approuvée pour la ligne de base (tout le monde a une licence Rockstar), puis ajoutez Rôle Discord comme porte supplémentaire pour les niveaux spéciaux.
Comment activer et utiliser la liste blanche dans txAdmin
Prérequis
- txAdmin en cours d'exécution (livré avec FXServer).
- Pour les modes Discord : intégration Discord configurée (bot invité, guilde/rôle sélectionné).
Activer la liste blanche
- Ouvrir txAdmin → Paramètres → Gestionnaire de joueurs.
- Ensemble Mode liste blanche à l'un des : Licence approuvée, Membre Discord, Rôle Discord, ou Administrateur uniquement.
- Définir un Message de rejet, par exemple :
Non autorisé. Postulez sur discord.gg/yourinvite. - Sauvegarder.
Approuver les joueurs (deux flux)
- Passif (file d'attente) : Lorsqu'un joueur non approuvé tente de rejoindre, une demande apparaît sous Liste blanche. Approuver/refuser en un clic.
- Actif (pré-approuvé) : Aller à Liste blanche → Ajouter une approbation et collez un identifiant dans le formulaire
type:valeur, par exemplelicence:110000112345678vapeur:11000010abcdef0discord:123456789012345678
Révoquer
- Ouvrir Joueurs ou Liste blanche et cliquez Révoquer à côté de l'approbation.
Conseils
- Préférer licence identifiants pour l'accès de base (universellement présents).
- Gardez votre message de rejet actionnable (lien Discord + règles de base + CTA du ticket).
- Pour le personnel/les développeurs, exigences de la pile : par exemple, doit être
licence+rôle de discorde.
Détails de mise en œuvre technique
Les listes blanches s'exécutent pendant la report de connexion Étape. Le serveur inspecte l'ensemble des identifiants du joueur et accepte ou rejette l'accès avant le chargement des ressources. Cela permet de maintenir une faible charge et de bloquer rapidement les joueurs non approuvés.
Types d'identifiants (fiabilité)
licence:(Rockstar) — stable, lié à l’achat du jeu ; clé primaire recommandée.vapeur:— présent uniquement si Steam fonctionne ; peut être manquant si les joueurs n'utilisent pas Steam.discorde:— présent uniquement si Discord s'exécute et que votre serveur le lit.adresse IP:— dynamique ; à utiliser pour la télémétrie/limite de débit, pas pour l'identité.
Script de liste blanche minimal (UX de reports + multi-ID)
-- resource: simple-whitelist
-- fxmanifest.lua should include '@oxmysql/lib/MySQL.lua' if you use DB code below.
local STATIC_WHITELIST = {
["license:110000112345678"] = true,
["steam:11000010abcdef0"] = true,
["discord:123456789012345678"] = true,
}
local function collectIdentifiers(src)
local ids = {}
for _, id in ipairs(GetPlayerIdentifiers(src)) do ids[id] = true end
return ids
end
AddEventHandler("playerConnecting", function(name, setKickReason, deferrals)
local src = source
deferrals.defer()
deferrals.update(("Checking whitelist for %s..."):format(name))
local ids = collectIdentifiers(src)
-- Require at least a Rockstar license in all cases
local hasLicense = false
for id, _ in pairs(ids) do
if id:sub(1, 8) == "license:" then hasLicense = true break end
end
if not hasLicense then
return deferrals.done("You must start the game normally (Rockstar license missing). Restart and try again.")
end
-- Static allowlist quick‑path
for id, _ in pairs(ids) do
if STATIC_WHITELIST[id] then
return deferrals.done()
end
end
-- Fallback: not approved
return deferrals.done("Not whitelisted. Apply at discord.gg/yourinvite")
end)
Utiliser reports.mise à jour Pour afficher des messages de progression pendant la vérification des identifiants et/ou d'une base de données. Cela réduit les faux rapports de dépassement de délai.
Liste blanche pilotée par base de données (oxmysql, prête pour la production)
Schéma
CRÉER UNE TABLE SI ELLE N'EXISTE PAS liste blanche ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, identifiant VARCHAR(64) NOT NULL, note VARCHAR(120) NULL, ajouté par VARCHAR(64) NULL, ajouté à TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY u_identifier (identifiant) );
Vérification côté serveur (oxmysql)
-- Nécessite oxmysql. Ajouter à fxmanifest : '@oxmysql/lib/MySQL.lua' AddEventHandler('playerConnecting', function(name, setKickReason, deferrals) local src = source deferrals.defer() deferrals.update('Vérification de la liste blanche...') local ids = {} for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end -- Scalaire unique : tout identifiant approuvé ? local rowCount = MySQL.scalar.await( 'SELECT COUNT(*) FROM whitelist WHERE identifier IN (?)', { ids } ) if rowCount and rowCount > 0 then return deferrals.done() else return deferrals.done('Accès refusé. Postuler sur discord.gg/yourinvite') end end)
Commandes QoL d'administration (exemple)
RegisterCommand('wladd', function(src, args) if src ~= 0 then return end -- console uniquement pour plus de simplicité local identifier = args[1] if not identifier or not identifier:find(':') then print('Usage: wladd identifierType:identifierValue') return end local ok = MySQL.prepare.await('INSERT IGNORE INTO whitelist (identifier,note,added_by) VALUES (?, ?, ?)', { identifier, 'manual add', 'console' }) print(ok and ('Whitelisted: %s'):format(identifier) or 'Failed to add') end, true) RegisterCommand('wlrm', function(src, args) if src ~= 0 then return end local identifier = args[1] local ok = MySQL.prepare.await('DELETE FROM whitelist WHERE identifier = ?', { identifier }) print(ok et ('Supprimé : %s'):format(identifier) ou 'Échec de la suppression') fin, vrai)
Pour mysql-async, remplacer
MySQL.scalar.awaitavecMySQL.Async.fetchScalaret le style de paramètre avec@param/?. Préférer oxmysql pour les performances et attendre le support.
Performance
- Gardez un index UNIQUE sur
identifiant(voir schéma). - En option réchauffer un cache mémoire au démarrage et lors du changement ; frapper la base de données uniquement en cas d'échec du cache.
- Limiter le nombre de tentatives de connexion échouées répétées par
licence/IP.
Règles multi-identifiants
Certains serveurs (par exemple, Steam et Discord) nécessitent plusieurs identifiants pour les niveaux de personnel. Exemple de modèle :
local function hasType(ids, typ)
for id, _ in pairs(ids) do if id:sub(1, #typ+1) == (typ..':') then return true end end
return false
end
-- Require license, and if staff, also discord
if not hasType(ids, 'license') then
return deferrals.done('Start the game normally (license missing).')
end
if staffModeEnabled and not hasType(ids, 'discord') then
return deferrals.done('Join our Discord and link your account to enter.')
end
Utiliser Discord comme liste blanche (pas de code personnalisé)
Si votre communauté fonctionne sur Discord, utilisez txAdmin Membre Discord ou Rôle Discord modes :
- Liez txAdmin à votre guilde Discord.
- Choisir Membre Discord de permettre à tout membre de la guilde, ou Rôle Discord pour passer par un rôle spécifique (par exemple,
@Whitelisted). - Garder Licence approuvée comme deuxième porte si vous voulez les deux conditions.
Meilleures pratiques : maintenir un #whitelist-requests Canal + formulaire léger. Automatisez l'attribution des rôles après approbation via un robot ou un flux de modération.
FAXES : un système de liste blanche Discord pour FiveM
Idées d'intégration
- Bots Discord: approuver automatiquement lorsqu'un utilisateur remplit une demande, effectue une promotion ou s'abonne.
- Panneau Web: ajout/suppression d'identifiants par le personnel, avec piste d'audit.
- Niveaux payants: accorder
rôle de discordevia votre boutique (Tebex/Patreon) et laissez le mode rôle txAdmin appliquer l'accès.
Dépannage et pièges
- Le lecteur n'apparaît pas dans les requêtes txAdmin: Assurez-vous que la liste blanche est activée dans le bon profil ; vérifiez que le joueur a effectivement atteint l'étape de report (regardez la console en direct de txAdmin).
- ID Steam manquant: Steam doit être en cours d'exécution ; ne définissez pas votre liste blanche uniquement sur
vapeur:. Préférerlicence:. - ID Discord manquant: L'utilisateur doit avoir Discord en cours d'exécution et votre serveur doit être configuré pour lire
discorde:; vérifier l'intégration de Discord. licencecontrelicence2:Certains frameworks enregistrent deux champs de licence ; assurez-vous que vos requêtes de migration/DB prennent en compte les deux lors du déplacement des données.- Délais d'attente différés: Toujours appeler
reports.mise à jour(...)pendant que vous attendez DB ; répondez dans environ 10 à 15 secondes. - Format d'identifiant incompatible: Assurez-vous de coller
type:valeurexactement (type minuscule, séparateur deux-points). - Pics de trafic élevés: Mettre en cache la liste blanche en mémoire, préchauffer au démarrage et anti-rebondir les appels de base de données.
FAQ SEO (contenu prêt pour le schéma)
Quel est le meilleur identifiant pour la liste blanche FiveM ?
La rock star licence: est la plus universelle et la plus fiable ; utilisez-la comme clé primaire.
Puis-je ajouter un membre à la liste blanche avec Discord sans coder ?
Oui. txAdmin prend en charge Membre Discord et Rôle Discord modes de liste blanche une fois Discord lié.
Ai-je besoin de Steam pour la liste blanche ?
Non. De nombreux joueurs n'utilisent pas Steam ; évitez de faire vapeur: obligatoire pour l'accès de base.
Puis-je combiner plusieurs vérifications (par exemple, licence + rôle Discord) ?
Oui. Utiliser le mode rôle txAdmin et conservez une vérification de licence dans votre script personnalisé ou votre flux d'admission.
Comment puis-je préapprouver les joueurs ?
txAdmin → Liste blanche → Ajouter une approbation, coller identifierType:identifiant (par exemple, licence:...).
Copier-coller les messages de rejet (utilisez votre marque)
- Basé sur la file d'attente:
Vous n'êtes pas encore sur liste blanche. Postulez via #whitelist-requests → discord.gg/yourinvite - Rôle-gated:
Votre compte Discord n'est pas sur liste blanche. Rejoignez discord.gg/yourinvite et demandez l'accès. - Entretien:
Le serveur est en mode administrateur uniquement pour maintenance. Veuillez réessayer ultérieurement.
Conclusion
Une liste blanche FiveM valide les identifiants des joueurs pendant la phase de report de connexion et bloque les utilisateurs non autorisés avant le chargement des ressources. Activez-la pour la plupart des serveurs. Licence approuvée dans txAdmin, éventuellement layer Rôle Discord pour la gestion communautaire et utiliser un Soutenu par DB liste avec mise en cache pour l'échelle.
Annexe : Exemple minimal original (pour référence)
-- server.lua local whitelist = { ["steam:110000132456789"] = true, ["license:abc123def456789"] = true, ["discord:123456789012345678"] = true } AddEventHandler("playerConnecting", function(name, setKickReason, deferrals) local player = source local identifiers = GetPlayerIdentifiers(player) local whitelisted = false deferrals.defer() for _, id in pairs(identifiers) do if whitelist[id] then whitelisted = true break end end if not whitelisted then deferrals.done("Non sur liste blanche. Postulez sur : your-discord.gg/invite") else deferrals.done() end end)






