Économisez 20% dès aujourd'hui Utilisez le code BIENVENUE lors du paiement. ACCUEILLIR

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

ModeOù installerCe qu'il vérifieIdéal pourRemarques
Licence approuvéetxAdmin → Paramètres → Gestionnaire de joueurs → Mode liste blanchelicence: (Rockstar)La plupart des serveursSimple, fiable ; approbations manuelles ou pré-approbations prises en charge
Membre DiscordtxAdmin (lié à Discord)discorde: est membre de la guildeCommunautés centrées sur DiscordeUtilisateurs non-Discord bloqués
Rôle DiscordtxAdmin (lié à Discord)discorde: a un rôle spécifiqueAccès limité par rôle (donateur, personnel)Combiner avec les automatisations de rôles
Administrateur uniquementtxAdminAdministrateurs uniquementNuits de maintenance/développementVerrouille efficacement le serveur, non recommandé
Script personnaliséRessource Lua/JSTous les identifiants que vous souhaitezRègles granulaires et UXNé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

  1. Ouvrir txAdmin → Paramètres → Gestionnaire de joueurs.
  2. Ensemble Mode liste blanche à l'un des : Licence approuvée, Membre Discord, Rôle Discord, ou Administrateur uniquement.
  3. Définir un Message de rejet, par exemple :
    Non autorisé. Postulez sur discord.gg/yourinvite.
  4. 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 exemple
    • licence:110000112345678
    • vapeur:11000010abcdef0
    • discord: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.await avec MySQL.Async.fetchScalar et 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 discorde via 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érer licence:.
  • 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.
  • licence contre licence2: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:valeur exactement (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)
Luc
Luc

Je m'appelle Luke, je suis un joueur et j'adore écrire sur FiveM, GTA et le jeu de rôle. Je dirige une communauté de jeu de rôle et j'ai environ 10 ans d'expérience dans l'administration de serveurs.

Articles: 570

Laisser un commentaire