ai-chat for developers
The chat API ai-chat answers (FiveM's chat resource), its exports, events and message shape.
ai-chat answers FiveM's chat resource API, so you write chat code the standard FiveM way. Exports answer under both exports['ai-chat'] and exports.chat.
ChatMessage
The message shape every export and event takes.
Prop
Type
Server exports
addMessage
Sends a chat line to one player, several players or everyone.
Side: Server · Waits: no
addMessage(target: number | number[], message: ChatMessage): voidexports.chat:addMessage(source, { args = { 'Bank', 'Your salary arrived.' }, color = { 61, 247, 158 } })Parameters
Prop
Type
Returns
Nothing. A message without a valid args list is dropped.
Example
import { callExport } from "@aicore-fivem/lib/server";
function announce(text: string): void {
callExport("chat", "addMessage", -1, { args: ["City", text], color: [61, 247, 158], multiline: true });
}
announce("The bank closes in 10 minutes.");registerMessageHook
Runs your function for every message a player sends, before it is delivered. The hook can change the message, change who gets it, or cancel it. Hooks are removed when your resource stops.
Side: Server · Waits: no
registerMessageHook(hook: (source: number, message: ChatMessage, ref: HookRef) => void): voidHookRef
Prop
Type
Example
import { callExport } from "@aicore-fivem/lib/server";
callExport("chat", "registerMessageHook", (source: number, message: { args: string[] }, ref: { cancel(): void }) => {
const text = message.args[message.args.length - 1] ?? "";
if (/discord\.gg\//i.test(text)) ref.cancel();
});registerMode
Adds a channel from a script (FiveM's chat modes). Its callback decides who gets each message, like a message hook. The mode is removed when your resource stops.
Side: Server · Waits: no
registerMode(data: { name: string; displayName?: string; color?: string; cb?: (source: number, message: ChatMessage, ref: HookRef) => void }): voidProp
Type
Client exports
| Export | What it does |
|---|---|
addMessage(message: ChatMessage | string): void | Shows a line on this player's chat only. |
addSuggestion(name: string, help: string, params?: { name: string, help: string }[]): void | Adds a command suggestion for this player. |
Events
chatMessage (server)
Fires on the server for every message a player sends, before delivery. Cancel it (CancelEvent()) to drop the message.
Side: Server (local event)
| Argument | Type | What it is |
|---|---|---|
source | number | The sender's server id. |
author | string | The author shown (the character name). |
text | string | The message text. |
on("chatMessage", (source: number, author: string, text: string) => {
console.log(`[chat] ${author} (${source}): ${text}`);
});Client events ai-chat listens to
Send them from the server (TriggerClientEvent) or from a client script (TriggerEvent).
| Event | Arguments | What it does |
|---|---|---|
chat:addMessage | message: ChatMessage | string | Shows a line. |
chatMessage | author: string, color: [r, g, b], text: string | Shows a line (old style). |
chat:addSuggestion | name: string, help: string, params?: { name, help }[] | Adds one suggestion. |
chat:addSuggestions | suggestions: { name, help, params? }[] | Adds several suggestions. |
chat:removeSuggestion | name: string | Removes a suggestion. |
chat:addMode / chat:removeMode | mode / name | Adds or removes a script mode on this client. |
chat:clear | none | Empties this player's chat. |
chat:addTemplate is ignored: templates (HTML) are never drawn. Messages typed by players are not sent through _chat:messageEntered; listen to chatMessage on the server.