> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squashcodes.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exports Auth Discord System

> Adquiriu o Auth Discord System e está com dúvidas sobre as funções exportáveis? você está no lugar certo!

<img src="https://mintlify.s3.us-west-1.amazonaws.com/squashcodes/images/authdiscord-system.png" alt="Hero Dark" />

## Resolva problemas comuns

<CardGroup cols={2}>
  <Card title="Resource não inicia" icon="gear" href="/pt/start">
    Está com problemas para iniciar o seu produto? Clique aqui
  </Card>

  <Card title="Configurar o resource" icon="gear" href="/pt/resources/auth-discord#como-configurar-o-resource">
    Está com dúvidas de como configurar algo no sistema? Clique aqui
  </Card>
</CardGroup>

<img src="https://mintcdn.com/squashcodes/5MmQtjLwAKbdYhBk/images/ashy-help.png?fit=max&auto=format&n=5MmQtjLwAKbdYhBk&q=85&s=f146bf1639fba1a187b3351c74006c1a" alt="Hero Dark" width="956" height="250" data-path="images/ashy-help.png" />

## 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](#verifyplayeraccount) -> `Verifica se o player está autenticado e abre o painel caso não esteja`
* [addRoleDiscordToPlayer](#addrolediscordtoplayer) -> `Adiciona um cargo no Discord ao player autenticado`
* [getPlayerDiscordID](#getplayerdiscordid) -> `Retorna o Discord ID do player autenticado`
* [vinculateDiscordName](#vinculatediscordname) -> `Sincroniza o nome do Discord com o nome do player no jogo`

***

## verifyPlayerAccount

**Side:** `server`

**Syntax**

```lua theme={null}
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**

```lua theme={null}
-- SERVER-SIDE (abrir autenticação ao trocar de personagem)
addEventHandler('onCharacterSwitch', root, function(player)
    exports['sqh_authdiscord']:verifyPlayerAccount(player)
end)
```

```lua theme={null}
-- 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**

```lua theme={null}
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**

```lua theme={null}
-- SERVER-SIDE (dar cargo VIP ao comprar no sistema de loja)
addEventHandler('onPlayerBuyVIP', root, function(player)
    exports['sqh_authdiscord']:addRoleDiscordToPlayer(player, '1234567890123456789')
end)
```

```lua theme={null}
-- 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**

```lua theme={null}
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**

```lua theme={null}
-- 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)
```

```lua theme={null}
-- 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**

```lua theme={null}
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**

```lua theme={null}
-- SERVER-SIDE (sincronizar nome ao mudar de personagem)
addEventHandler('onPlayerSelectCharacter', root, function(player)
    setTimer(function()
        exports['sqh_authdiscord']:vinculateDiscordName(player)
    end, 2000, 1)
end)
```

```lua theme={null}
-- 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.
