FiveM Whitelist — Guia completo (txAdmin, scripts, banco de dados)
Uma lista de permissões no FiveM é um mecanismo de controle de acesso que restringe a entrada no servidor a jogadores pré-aprovados, identificados por seus identificadores exclusivos (licença Rockstar, ID Steam, ID Discord, etc.). Abaixo, um guia pronto para produção que aborda a lista de permissões integrada do txAdmin, padrões de script, armazenamento em banco de dados e notas de confiabilidade.
Matriz de opções TL;DR
| Modo | Onde definir | O que ele verifica | Melhor para | Notas |
|---|---|---|---|---|
| Licença Aprovada | txAdmin → Configurações → Gerenciador de Jogadores → Modo Lista de Permissões | licença: (Estrela do rock) | A maioria dos servidores | Simples, confiável; aprovações manuais ou pré-aprovações suportadas |
| Membro do Discord | txAdmin (vinculado ao Discord) | discórdia: é membro da guilda | Comunidades centradas em Discórdia | Usuários não-Discord bloqueados |
| Função no Discord | txAdmin (vinculado ao Discord) | discórdia: tem papel específico | Acesso controlado por função (doador, equipe) | Combine com automações de funções |
| Somente administrador | administrador do tx | Somente administradores | Noites de manutenção/desenvolvimento | Bloqueia efetivamente o servidor, não recomendado |
| Script personalizado | Recurso Lua/JS | Quaisquer identificadores que você queira | Regras granulares e UX | Precisa de código + manutenção |
Recomendação: Usar Licença Aprovada para a linha de base (todos têm uma licença Rockstar), então adicione Função no Discord como um portão extra para níveis especiais.
Como habilitar e operar a lista de permissões no txAdmin
Pré-requisitos
- txAdmin em execução (enviado com o FXServer).
- Para modos Discord: integração com o Discord configurada (bot convidado, guilda/função selecionada).
Habilitar lista de permissões
- Abrir txAdmin → Configurações → Gerenciador de Jogadores.
- Definir Modo de lista de permissões para um de: Licença Aprovada, Membro do Discord, Função no Discord, ou Somente administrador.
- Definir um Mensagem de rejeição, por exemplo:
Não está na lista de permissões. Candidate-se em discord.gg/yourinvite - Salvar.
Aprovar jogadores (dois fluxos)
- Passivo (fila): Quando um jogador não aprovado tenta entrar, uma solicitação aparece em Lista de permissões. Aprovar/recusar com um clique.
- Ativo (pré-aprovar): Vá para Lista de permissões → Adicionar aprovação e cole um identificador no formulário
tipo:valor, por exemplolicença:110000112345678vapor:11000010abcdef0discordância:123456789012345678
Revogar
- Abrir Jogadores ou Lista de permissões e clique Revogar ao lado da aprovação.
Pontas
- Prefer licença identificadores para acesso de linha de base (universalmente presentes).
- Mantenha seu mensagem de rejeição acionável (link do Discord + regras básicas + CTA do ticket).
- Para equipe/desenvolvedores, requisitos de pilha: por exemplo, deve ser
licença+função no discord.
Detalhes de implementação técnica
As listas de permissões são executadas durante o adiamento de conexão estágio. O servidor inspeciona o conjunto de identificadores do jogador e aceita ou rejeita antes que os recursos sejam carregados. Isso mantém a carga baixa e bloqueia jogadores não aprovados antecipadamente.
Tipos de Identificadores (confiabilidade)
licença:(Estrela do rock) — estável, vinculado à compra do jogo; chave primária recomendada.vapor:— presente somente se o Steam estiver em execução; pode estar ausente se os jogadores não usarem o Steam.discórdia:— presente somente se o Discord for executado e seu servidor o ler.ip:— dinâmico; usar para telemetria/limite de taxa, não identidade.
Script de lista de permissões mínima (adiamentos UX + 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)
Usar adiamentos.atualização para mostrar mensagens de progresso enquanto você verifica IDs e/ou um banco de dados. Isso reduz falsos relatórios de "tempo limite".
Lista de permissões orientada a banco de dados (oxmysql, pronto para produção)
Esquema
CRIAR TABELA SE NÃO EXISTIR lista de permissões ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, identificador VARCHAR(64) NOT NULL, note VARCHAR(120) NULL, adicionado_por VARCHAR(64) NULL, adicionado_em TIMESTAMP PADRÃO CURRENT_TIMESTAMP, CHAVE PRIMÁRIA (id), CHAVE ÚNICA u_identifier (identificador) );
Verificação do lado do servidor (oxmysql)
-- Requer oxmysql. Adicione ao fxmanifest: '@oxmysql/lib/MySQL.lua' AddEventHandler('playerConnecting', function(name, setKickReason, deferrals) local src = source deferrals.defer() deferrals.update('Verificando lista de permissões...') local ids = {} for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end -- Escalar único: qualquer identificador aprovado? 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('Acesso negado. Inscreva-se em discord.gg/yourinvite') end end)
Comandos de qualidade de vida do administrador (exemplo)
RegisterCommand('wladd', function(origem, args) se origem ~= 0 então retorne fim -- somente console para simplificar identificador local = args[1] se não for identificador ou não identificador:find(':') então imprima('Uso: wladd identifierType:identifierValue') retorne fim local ok = MySQL.prepare.await('INSERIR IGNORE INTO whitelist (identificador,nota,adicionado_por) VALORES (?, ?, ?)', { identificador, 'adição manual', 'console' }) imprima(ok e ('Na lista de permissões: %s'):formato(identificador) ou 'Falha ao adicionar') fim, verdadeiro) RegisterCommand('wlrm', function(origem, args) se origem ~= 0 então retorne fim identificador local = args[1] local ok = MySQL.prepare.await('EXCLUIR DA lista de permissões ONDE identificador = ?', { identificador }) print(ok and ('Removido: %s'):format(identificador) or 'Falha ao remover') end, true)
Para mysql-assíncrono, substituir
MySQL.scalar.awaitcomMySQL.Async.fetchScalare o estilo do parâmetro com@param/?. Prefer oxmysql para desempenho e aguardar suporte.
Desempenho
- Mantenha um Índice ÚNICO sobre
identificador(ver esquema). - Opcionalmente aquecer um cache de memória na inicialização e na alteração; acerte o DB somente em caso de falha de cache.
- Limite de taxa de tentativas repetidas de conexão com falha por
licença/IP.
Regras de múltiplos identificadores
Alguns servidores exigem vários IDs (por exemplo, Steam e Discord) para níveis de equipe. Exemplo de padrão:
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
Usando o Discord como lista de permissões (sem código personalizado)
Se sua comunidade for executada no Discord, use o txAdmin Membro do Discord ou Função no Discord modos:
- Vincule o txAdmin à sua guilda do Discord.
- Escolher Membro do Discord para permitir que qualquer membro da guilda, ou Função no Discord para controlar uma função específica (por exemplo,
@Na lista de permissões). - Manter Licença Aprovada como um segundo portão se você quiser ambas as condições.
Melhores práticas: manter um #whitelist-requests Canal + formulário leve. Automatize a atribuição de funções após aprovação por meio de um bot ou fluxo de moderação.
FAXES: Um sistema de lista de permissões do Discord para FiveM
Ideias de Integração
- Bots do Discord: aprovar automaticamente quando um usuário conclui uma inscrição, impulsiona ou assina.
- Painel da web: equipe adiciona/remove identificadores, com trilha de auditoria.
- Níveis pagos: conceder
função no discordpor meio de sua loja (Tebex/Patreon) e deixe o modo de função txAdmin impor o acesso.
Solução de problemas e pegadinhas
- Jogador não aparece nas solicitações txAdmin: Certifique-se de que a lista de permissões esteja habilitada no perfil correto; verifique se o jogador realmente atingiu o estágio de adiamento (assista ao console ao vivo do txAdmin).
- ID do Steam ausente: O Steam deve estar em execução; não configure sua lista de permissões somente em
vapor:. Preferlicença:. - ID do Discord ausente: O usuário deve ter o Discord em execução e seu servidor deve estar configurado para ler
discórdia:; verificar integração com o Discord. licençacontralicença2: Algumas estruturas registram dois campos de licença; certifique-se de que suas consultas de migração/banco de dados considerem ambos ao mover dados.- Tempo limite de adiamento: Sempre ligue
adiamentos.atualização(...)enquanto você aguarda o DB; responda dentro de ~10–15 segundos. - Formato de identificador incompatível: Certifique-se de colar
tipo:valorexatamente (letras minúsculas, separador de dois pontos). - Picos de tráfego intenso: Cache de lista de permissões na memória, pré-aquecimento na inicialização e depuração de chamadas de banco de dados.
Perguntas frequentes sobre SEO (conteúdo pronto para esquema)
Qual é o melhor identificador para a lista de permissões do FiveM?
A estrela do rock licença: é a mais universal e confiável; use-a como sua chave primária.
Posso ter acesso a uma lista de permissões no Discord sem precisar programar?
Sim. O txAdmin suporta Membro do Discord e Função no Discord modos de lista de permissões quando o Discord estiver vinculado.
Preciso do Steam para a lista de permissões?
Não. Muitos jogadores não usam o Steam; evite fazer vapor: obrigatório para acesso de linha de base.
Posso combinar várias verificações (por exemplo, licença + função no Discord)?
Sim. Use o modo de função txAdmin e mantenha uma verificação de licença em seu script personalizado ou fluxo de admissões.
Como posso pré-aprovar jogadores?
txAdmin → Lista de permissões → Adicionar aprovação, colar Tipo de identificador: identificador (por exemplo, licença:...).
Copiar e colar mensagens de rejeição (use sua marca)
- Baseado em fila:
Você ainda não está na lista de permissões. Candidate-se em #whitelist-requests → discord.gg/yourinvite - Função controlada:
Sua conta do Discord não está na lista de permissões. Acesse discord.gg/yourinvite e solicite acesso. - Manutenção:
O servidor está em modo somente administrador para manutenção. Tente novamente mais tarde.
Conclusão
Uma lista de permissões FiveM valida os identificadores dos jogadores durante a fase de adiamento da conexão e bloqueia usuários não aprovados antes do carregamento dos recursos. Para a maioria dos servidores, habilite Licença Aprovada no txAdmin, camada opcional Função no Discord para portão comunitário e usar um Apoiado pelo DB lista com cache para escala.
Apêndice: Exemplo Mínimo Original (para referência)
-- 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("Não está na lista de permissões. Inscreva-se em: your-discord.gg/invite") else deferrals.done() end end)






