Pular para o conteúdo principal
Hero Dark

Resolva problemas comuns

Hero Dark

Sobre o sistema

O Auth Discord System é um sistema completo de autenticação de jogadores via Discord para servidores MTA. O jogador entra no servidor, recebe um código de confirmação, digita no canal do Discord e a conta é liberada automaticamente — sem precisar criar senha ou login manual. Com as funções exportadas, você pode:
  • Verificar manualmente se um player já passou pela autenticação e abrir o painel caso não tenha;
  • Adicionar cargos no Discord de um player autenticado diretamente por script;
  • Obter o Discord ID de qualquer player autenticado (útil para cruzar dados com sistemas externos);
  • Forçar a sincronização do nome do Discord com o nome do player no jogo.

Funções Exportadas

Server-side


verifyPlayerAccount

Side: server Syntax
exports['sqh_authdiscord']:verifyPlayerAccount(player)
Required arguments
  • player (player): jogador a ser verificado.
Comportamento
  • Consulta o banco de dados pelo serial do player.
  • Se o player já está registrado, abre a tela de confirmAccount (aguardando entrada no servidor Discord).
  • Se o player não está registrado ainda, gera um código único e abre a tela inicial de autenticação com o código exibido.
  • Esta função é chamada automaticamente nos eventos onPlayerJoin e onPlayerLogin conforme as opções config.onPlayerJoin e config.onPlayerLogin. Use a export para chamadas manuais (ex.: ao trocar de personagem).
Return
  • Não há retorno explícito. A ação ocorre via triggers client-side.
Example
-- SERVER-SIDE (abrir autenticação ao trocar de personagem)
addEventHandler('onCharacterSwitch', root, function(player)
    exports['sqh_authdiscord']:verifyPlayerAccount(player)
end)
-- SERVER-SIDE (forçar re-verificação por comando de staff)
addCommandHandler('verificarconta', function(player, _, targetName)
    local target = getPlayerFromName(targetName)
    if target then
        exports['sqh_authdiscord']:verifyPlayerAccount(target)
        outputChatBox('Verificação enviada para ' .. targetName, player)
    end
end)

addRoleDiscordToPlayer

Side: server Syntax
exports['sqh_authdiscord']:addRoleDiscordToPlayer(player, roleID)
Required arguments
  • player (player): jogador autenticado que receberá o cargo.
  • roleID (string): ID do cargo no Discord a ser adicionado.
Comportamento
  • Envia uma requisição à API do bot do Discord para adicionar o cargo ao usuário correspondente ao player.
  • Só funciona se o player tiver uma sessão ativa (estiver autenticado e online).
  • A operação é assíncrona — o cargo é adicionado em background via fetchRemote.
Return
  • Não há retorno explícito na função (a resposta é processada internamente pelo callback do fetchRemote).
Example
-- SERVER-SIDE (dar cargo VIP ao comprar no sistema de loja)
addEventHandler('onPlayerBuyVIP', root, function(player)
    exports['sqh_authdiscord']:addRoleDiscordToPlayer(player, '1234567890123456789')
end)
-- SERVER-SIDE (dar cargo de facção ao entrar)
addEventHandler('onPlayerJoinFaction', root, function(player, factionID)
    if factionID == 1 then
        exports['sqh_authdiscord']:addRoleDiscordToPlayer(player, '9876543210987654321')
    end
end)

getPlayerDiscordID

Side: server Syntax
local discordID = exports['sqh_authdiscord']:getPlayerDiscordID(player)
Required arguments
  • player (player): jogador autenticado.
Comportamento
  • Retorna o Discord ID (clientID) do player a partir do cache em memória carregado na autenticação.
  • O cache é preenchido quando o player se autentica ou quando o resource reinicia (buscando dados do banco).
  • Se o player não estiver autenticado ou não tiver sessão ativa, retorna false.
Return
  • string com o Discord ID do player, ex: "123456789012345678".
  • false se o player não estiver autenticado ou não tiver Discord ID registrado.
Example
-- SERVER-SIDE
addCommandHandler('meudiscord', function(player)
    local discordID = exports['sqh_authdiscord']:getPlayerDiscordID(player)
    if discordID then
        outputChatBox('Seu Discord ID: ' .. discordID, player)
    else
        outputChatBox('Você não está autenticado no Discord.', player)
    end
end)
-- SERVER-SIDE (integrar com sistema de bot externo)
addEventHandler('onPlayerLogin', root, function()
    local discordID = exports['sqh_authdiscord']:getPlayerDiscordID(source)
    if discordID then
        triggerEvent('syncDiscordRoles', root, source, discordID)
    end
end)

vinculateDiscordName

Side: server Syntax
exports['sqh_authdiscord']:vinculateDiscordName(player)
Required arguments
  • player (player): jogador autenticado que terá o nome sincronizado.
Comportamento
  • Envia uma requisição à API para atualizar o nome do player no Discord de acordo com o ID do jogo retornado por config.infosPlayer.getIDFunction(player).
  • Utilizado para manter o nome/nickname do Discord sincronizado com as informações do servidor.
  • Depende de config.infosPlayer.setIDInDiscord estar configurado para incluir o ID do jogo no nome.
  • O sistema já chama esta função automaticamente no onPlayerLogin quando config.discordInfos.setDiscordNameInGame = true. Use a export para sincronizações manuais específicas.
Return
  • Não há retorno explícito. A sincronização ocorre em background.
Example
-- SERVER-SIDE (sincronizar nome ao mudar de personagem)
addEventHandler('onPlayerSelectCharacter', root, function(player)
    setTimer(function()
        exports['sqh_authdiscord']:vinculateDiscordName(player)
    end, 2000, 1)
end)
-- SERVER-SIDE (forçar sincronização por comando)
addCommandHandler('sincdiscord', function(player)
    exports['sqh_authdiscord']:vinculateDiscordName(player)
    outputChatBox('Sincronização com Discord enviada!', player)
end)

Observações

  • Todas as exports só funcionam corretamente após o resource ser iniciado e a licença validada.
  • As funções addRoleDiscordToPlayer e vinculateDiscordName requerem que o player esteja com sessão ativa no cache (autenticado durante a sessão atual). Players que entraram antes de um restart do resource terão o cache recarregado automaticamente.
  • getPlayerDiscordID é a export mais comum para integrações — use sempre que precisar do Discord ID de um player em outro script.
  • Para addRoleDiscordToPlayer funcionar, o bot do Discord deve estar corretamente configurado e online.