Pular para o conteúdo
Nesta página

Documentação / Primeiros passos

Instalar o agente

O agente é um resource do FiveM. Ele conecta para fora até o FiveDock por um websocket criptografado e faz o que o painel pede, desde que o comando esteja na lista que ele aceita.

Nada fica escutando na sua máquina. Não há porta para liberar, e a senha do seu banco fica onde está.

Adicione o resource

Baixe a release, coloque em resources/[fivedock] e inicie antes do seu framework. fivedock_check no console mostra o que ele está usando.

shell
curl -fLO https://dl.fivedock.dev/agent/latest/fivedock.zip
unzip fivedock.zip -d resources/[fivedock]
server.cfg
ensure fivedock
set fivedock_key "fda_live_…"

# lets fivedock perf record FXServer’s profiler
add_ace resource.fivedock command.profiler allow
add_ace resource.fivedock command.record allow
add_ace resource.fivedock command.saveJSON allow

# optional: where uploads land, and how loud the log is
set fivedock_folder "/screenshots"
set fivedock_log "info"

fda_live_… é uma chave de agente. Você cria no painel para um servidor, e ela só vai no server.cfg. Não é um token de API: tudo que chama a API de upload por HTTP usa, em vez dela, um token fd_live_… da página Tokens.

Suba alguma coisa

Há duas formas de fazer upload, e as duas guardam o mesmo arquivo: deduplicado e cobrado uma vez.

Lua
exports.fivedock:upload({
  resource = 'my-script',
  path     = 'cache/shot.jpg',
  folder   = '/screenshots',
}, function(err, file)
  if not err then print(file.url) end
end)

-- take the screenshot and upload it in one call
exports.fivedock:screenshot(source, { folder = '/screenshots', quality = 0.9 }, cb)
HTTP
curl -X POST https://api.fivedock.dev/api/v3/file \
  -H "Authorization: Bearer fd_live_…" \
  -F "[email protected]" \
  -F "path=/screenshots"

Os exports passam pelo agente e pela chave dele, então seu script não guarda nenhum segredo. O caminho HTTP é a API de upload, que aceita um token de API (fd_live_…) e nunca a chave do agente.

Exports de servidor

O resource fivedock dá cinco exports aos seus scripts de servidor. Chame-os de Lua no lado do servidor: eles passam pela conexão do próprio agente, então seu script não precisa de token. fivedock_upload_allow decide quais resources podem chamar os de upload.

screenshot

Tira um print da tela de um jogador e envia. O screenshot-basic precisa estar iniciado. folder é a pasta de destino, fivedock_folder por padrão; encoding é jpg, png ou webp, jpg por padrão; e quality vai de 0 a 1, 0,85 por padrão.

Lua
-- server.lua: /evidence <player id> screenshots that player, for staff only
RegisterCommand('evidence', function(source, args)
  local target = tonumber(args[1])
  if not target then return end

  exports.fivedock:screenshot(target, {
    folder   = '/evidence',
    encoding = 'webp', -- 'jpg' (default), 'png' or 'webp'
    quality  = 0.85,   -- 0 to 1
  }, function(err, file)
    if err then
      print(('screenshot failed: %s'):format(err))
      return
    end
    print(('%s, %d bytes, %s'):format(file.url, file.size, file.mimeType))
  end)
end, true)

upload

Envia um arquivo da pasta de um resource. resource é o resource que chama o export, a menos que você indique outro, path é relativo à pasta desse resource, name define o nome do arquivo e folder a pasta onde ele cai.

Lua
-- a file your resource wrote to resources/my-script/cache/shot.jpg
exports.fivedock:upload({
  resource = 'my-script',      -- defaults to the resource calling the export
  path     = 'cache/shot.jpg', -- relative to that resource's folder
  name     = 'shot.jpg',
  folder   = '/screenshots',
}, function(err, file)
  if not err then print(file.url) end
end)

uploadFile

O mesmo upload, com o resource e o caminho como argumentos próprios.

Lua
exports.fivedock:uploadFile('my-script', 'cache/shot.jpg', {
  name   = 'shot.jpg',
  folder = '/screenshots',
}, function(err, file)
  if not err then print(file.id, file.url) end
end)

O callback

Cada export de upload chama cb(err, file) uma única vez. Quando dá certo, err é nil e file é uma tabela com id, url, size e mimeType. Quando falha, err é um texto dizendo o motivo, e file é nil.

Lua
function(err, file)
  -- on success: err = nil
  --   file = { id = '8Kq2nR4t', url = 'https://cdn.fivedock.dev/f/8Kq2nR4t.jpg',
  --            size = 48213, mimeType = 'image/jpeg' }
  -- on failure: err = 'screenshot-basic is not started' (or another reason), file = nil
end

report

Registra uma denúncia de jogador que a staff de plantão vê no painel. source é o jogador que denuncia, message diz o que aconteceu e subjectSource, se você passar, é o jogador denunciado. Retorna true, ou false e um motivo: empty quando a mensagem tem menos de 3 caracteres, too_soon dentro de 30 segundos da última denúncia desse jogador.

Lua
-- source reports subjectSource; subjectSource is optional
local ok, reason = exports.fivedock:report(source, 'He rammed my car at Legion Square', 12)
if not ok then
  print(('report refused: %s'):format(reason)) -- 'empty' or 'too_soon'
end

log

Grava um evento na Black Box. source é o jogador de quem se trata, ou 0 para nenhum; event é um nome com pontos como money.transfer; meta é uma tabela opcional de campos, e um amount numérico nela conta para os alertas de economia. O agente já registra sozinho entradas e saídas, mortes, chat, mudanças de dinheiro do ESX e do QBCore, movimentações do ox_inventory e bans, kicks e avisos do txAdmin, então este export é para o que só os seus scripts sabem.

Lua
-- source is the player it is about, or 0; meta is optional
exports.fivedock:log(source, 'money.transfer', 'Paid 500 to Bo for the car', {
  amount = 500, to = 'license:9a4f…',
})

Descobrir o que causa lag

As linhas add_ace deixam o agente gravar o profiler do FXServer, para o fivedock perf e para as travadas que ele pega sozinho. Descobrir o que causa lag mostra como ler o que ele encontra.

Configurações

ConvarPadrãoO que faz
fivedock_keyPadrão · -Obrigatória. A chave do agente, fda_live_…, criada no painel, uma por servidor. Sem ela o agente não sobe, e a API de upload não a aceita.
fivedock_gatewayPadrão · o nossoPara onde o agente conecta. Só wss://, exceto contra localhost.
fivedock_folderPadrão · /Pasta padrão dos uploads.
fivedock_upload_allowPadrão · todosQuais resources podem chamar os exports de upload. Vazio significa todos.
fivedock_logPadrão · infoinfo ou debug. debug nunca imprime uma credencial.