mri_Qchat - Manual Funcional

Chat moderno e otimizado para Qbox Framework com interface React, tabs de canais, emoji picker, draggable window e integração com Discord webhook.

O que o recurso faz

O mri_Qchat substitui o chat padrão do FiveM por uma interface moderna baseada em React, organizando mensagens em 6 canais com tabs (GLOBAL, LOCAL, OOC, RP, STAFF, ANÚNCIOS), com janela arrastável, emoji picker integrado, autocomplete de comandos, settings persistidos e envio de mensagens para Discord via webhook.

Funcionalidades principais

  • 6 canais com tabs: GLOBAL, LOCAL, OOC, RP, STAFF, ANÚNCIOS
  • Janela arrastável: Reposicione o chat via drag and drop com constraints de borda
  • Emoji picker: Integrado com emoji-picker-react (tema dark)
  • Autocomplete de comandos: Tab-completion para comandos registrados
  • Settings persistidos: Modo colapsado, timestamps, fade time (localStorage)
  • Tema dinâmico: Sincroniza com cores do ox_lib via convars
  • Discord webhook: Todas as mensagens enviadas como embeds
  • Evento customizável: Outros recursos podem ouvir mensagens via evento
  • Cores por canal: Cada canal com cor única configurável

Como funciona

  1. Jogador carrega e NUI React inicializa com canais e settings salvos
  2. Mensagens são enviadas via comandos específicos para cada canal
  3. Servidor processa mensagem, envia para destinatários conforme canal
  4. Mensagem é exibida via NUI message ON_MESSAGE
  5. Se configurado, mensagem é enviada ao Discord via webhook como embed

Configurações disponíveis (shared/config.lua)

Opções gerais

OpçãoPadrãoDescrição
Config.LocalDistance20.0Distância máxima do chat local
Config.ShowIDtrueMostrar ID do jogador no nome [ID] Nome
Config.DiscordWebhook""URL do Discord webhook (vazio = desabilitado)
Config.EnableCustomEventtrueHabilitar evento custom para outros recursos
Config.CustomEventName"mri_Qchat:server:onMessage"Nome do evento custom
Config.SyncWithOxtrueSincronizar tema com ox_lib convars
Config.UIPrimaryColor"#7BF906"Cor primária da UI (neon green)

Comandos configuráveis

ConfigPadrãoDescrição
Config.Commands.global'g'Chat global (/g)
Config.Commands.localChat'l'Chat local (/l)
Config.Commands.ooc'ooc'Chat OOC (/ooc)
Config.Commands.me'me'Ação RP (/me)
Config.Commands.doCmd'do'Descrição RP (/do)
Config.Commands.staff'staffc'Chat staff (/staffc)
Config.Commands.anuncio'anuncioc'Anúncios admin (/anuncioc)
Config.Commands.clear'limpar'Limpar chat (/limpar)

Cores dos canais

CanalCorHEX
GLOBALRoxo neon#9406f9
LOCALBranco#ffffff
STAFFVermelho#ff0000
ANÚNCIOSDourado#ffd700
OOCCiano#00ffff
RPMagenta#ff00ff

Convars

ConvarTipoDescrição
ox:primaryColorstringCor Mantine ou hex
ox:primaryShadeintNível de shade 0-9
chat:uiColorstringOverride da cor primária da UI
chat:globalColorstringOverride cor do canal global
chat:localColorstringOverride cor do canal local
chat:oocColorstringOverride cor do canal OOC
chat:rpColorstringOverride cor do canal RP
chat:staffColorstringOverride cor do canal staff
chat:anunciosColorstringOverride cor do canal anúncios

Exemplo no server.cfg:

set chat:uiColor "#ff5500"
set chat:globalColor "blue.6"
set ox:primaryColor "green"
set ox:primaryShade 7

Canais de Chat

CanalComandoDescriçãoPermissão
GLOBAL/g <msg>Mensagem para todosTodos
LOCAL/l <msg>Mensagem por proximidade (20m)Todos
OOC/ooc <msg>Out-of-character globalTodos
RP/me <msg>Ação roleplay (próximo)Todos
RP/do <msg>Descrição roleplay (próximo)Todos
STAFF/staffc <msg>Chat exclusivo staffadmin/god
ANÚNCIOS/anuncioc <msg>Anúncio globaladmin/god

Chat padrão (sem comando): Roteado para chat local por proximidade.

Settings da UI

SettingDescrição
Always CollapsedChat sempre colapsado (expand on hover)
Show TimeMostrar timestamps nas mensagens
Fade TimeTempo para fade automático (1-30s, padrão 15s)

Eventos

Custom Event (configurável)

Outros recursos podem ouvir mensagens de chat:

AddEventHandler('mri_Qchat:server:onMessage', function(data)
    -- data: { source, author, message, channel, timestamp }
end)

NUI Messages (Server → Client)

TypeDescrição
ON_MESSAGENova mensagem
ON_SUGGESTION_ADDAdicionar suggestion
ON_SUGGESTION_REMOVERemover suggestion
ON_CLEARLimpar chat
ON_UPDATE_THEMEAtualizar tema
ON_SCREEN_STATE_CHANGEHide/show (pause menu)

NUI Callbacks

CallbackDescrição
chatResultResultado do input do usuário
loadedNUI carregada

Integração com outros recursos MRI

Obrigatórias

  • qbx_core — Nomes de personagens, permissões staff

Opcionais

  • ox_lib — Sincronização de tema via convars

Evento customizado

Outros recursos podem consumir mensagens via mri_Qchat:server:onMessage:

AddEventHandler('mri_Qchat:server:onMessage', function(data)
    local src = data.source
    local author = data.author
    local message = data.message
    local channel = data.channel
    local timestamp = data.timestamp
    -- processar mensagem
end)

Exemplos práticos

Enviar mensagem via evento server

TriggerClientEvent('mri_Qchat:client:ON_MESSAGE', -1, {
    channel = 'ANÚNCIOS',
    author = 'Sistema',
    message = 'Bem-vindos ao servidor!',
    timestamp = os.time()
})

Escutar mensagens para filtragem/moderação

AddEventHandler('mri_Qchat:server:onMessage', function(data)
    if string.find(string.lower(data.message), "palavrao") then
        -- punir jogador
        DropPlayer(data.source, "Linguagem inapropriada")
    end
end)

Configurar webhook Discord

Config.DiscordWebhook = "https://discord.com/api/webhooks/..."

Solução de problemas

  • Chat não aparece: Verifique se o recurso iniciou e NUI carregou (callback loaded)
  • Tema não sincroniza: Confirme Config.SyncWithOx = true e convars do ox_lib definidas
  • Discord webhook não envia: Verifique se a URL está correta e o Discord aceita a conexão
  • Janela não arrasta: Constraints de borda impedem sair da tela
  • Comandos não completam: Suggestions atualizados no chat:init e resource start
  • Settings não persistem: Salvos em localStorage do navegador do jogador
  • Chat padrão não funciona: Sem comando, envia para canal LOCAL por proximidade (20m)