Commands & Keybinds
Chat Commands
| Command | Description |
|---|
/mbt_emotes | Open the MBT emote menu (configurable via MBT.Menu.Command) |
/emotemenu | Alias — opens the emote menu |
/emoteui | Alias — opens the emote menu |
/mbt_layout | Toggle between cinematic and default layout at runtime |
/mbt_openjoin off | Opt out of Open Join invitations (persists across sessions) |
/mbt_openjoin on | Opt back in to Open Join invitations |
/mbt_join | Join the current Open Join emote (fallback for the pill hotkey) |
/me <text> | Float a styled ME pill above your head, visible to nearby players (RP Text) |
/do <text> | Float a styled DO pill above your head, visible to nearby players (RP Text) |
All commands are registered on resource start. The primary command name is set in config.lua under MBT.Menu.Command.
RP Text commands (/me, /do) are fully configurable via MBT.RpText.Channels — rename them, add new channels (e.g. /med), adjust range per channel, or remove any entry to avoid conflicts with other systems.
Keybinds
| Key | Configurable | Action |
|---|
F4 | Yes — MBT.Menu.Keybind | Open / close the emote menu |
K (hold) | Yes — MBT.EmoteWheel.Key | Hold to open the emote wheel |
Mouse Wheel | — | Scroll wheel slots (linear mode) or flick to select (radial mode) |
X | Yes — MBT.EmoteWheel.RemoveKey | While wheel is open: remove emote from the current slot |
NUM1–NUM6 | Via drag-and-drop in UI | Play quick-bound emote directly |
Arrow Keys | — | Navigate the emote list (keyboard mode) |
Enter | — | Play the focused emote |
Y | Yes — MBT.OpenJoin.JoinKey | Accept an Open Join invitation from the pill |
ESC | — | Close the emote menu |
If you previously bound the emote wheel key (K), double-check FiveM Settings → Key Bindings → MBT Emote Wheel (Hold) after updating — FiveM caches keymappings per-resource and the binding may need re-confirming.
Quick Bind Slots
Quick bind slots NUM1–NUM6 are assigned by dragging an emote card onto the desired slot in the Binds section of the menu. Binds are stored per-player via KVP and persist across sessions.
Emote Wheel
The emote wheel gives instant access to up to 8 saved emotes without opening the full menu.
- Assign — drag an emote onto a wheel slot inside the menu.
- Open — hold
K (or your configured key). The wheel appears.
- Select (radial) — move the mouse toward the desired slot and release.
- Select (linear) — scroll the mouse wheel while holding
K to cycle through slots.
- Play — release
K to play the highlighted emote.
- Remove — while the wheel is open, press
X to remove the emote from the current slot.
Set MBT.EmoteWheel.Mode to 'radial' (default) or 'linear' in config.lua.
Photo Mode
Photo Mode opens from the camera button inside the emote menu. It requires MBT.PhotoMode.Enabled = true.
| Control | Action |
|---|
| Drag | Orbit the camera around your ped |
| Scroll wheel | Zoom in / out |
| Filter picker | Switch between look presets (None, Cinematic, Noir, Warm, Vibrant, Cool) |
| DoF toggle | Enable / disable background depth-of-field blur |
| Send to Discord | Upload the screenshot to the configured webhook (requires screenshot-basic) |
| ESC / Back | Exit Photo Mode and restore normal camera |
Photo Mode auto-exits if your ped dies or the resource is stopped while active.
KVP Storage Keys
All player data is stored client-side via FiveM's GetResourceKvpString / SetResourceKvp API. No database table is created. The following keys are used:
| KVP Key | Content |
|---|
mbt_emote_menu_favorites | JSON map of favourited emote names |
mbt_emote_menu_fav_order | JSON array defining the custom sort order of favourites |
mbt_emote_menu_playcounts | JSON map of play counts per emote |
mbt_emote_menu_recent | JSON array of recently played emote names |
mbt_emote_menu_lists | JSON object containing all saved playlists |
mbt_emote_menu_binds | JSON map of numpad slot → emote name |
mbt_emote_menu_wheel | JSON array of wheel slot assignments |
mbt_emote_menu_personas | JSON array of saved persona loadouts |
mbt_emote_menu_trending | JSON object with server-wide rolling play counts (server-side KVP) |
mbt_openjoin_optout | "1" if the player has opted out of Open Join invitations |
KVP data is stored per-player on their own client machine. It is not synchronized to the server or stored in any database. Players switching machines will not have their settings on the new machine.
config.lua Key Reference
Global
| Key | Type | Default | Description |
|---|
MBT.Language | string | 'en' | UI locale. Options: 'en', 'it', 'es', 'fr', 'de', 'pt' |
MBT.Debug | boolean | false | Enable verbose console logs |
MBT.RpemotesResource | string|nil | nil | rpemotes resource name. nil = auto-detect |
| Key | Type | Default | Description |
|---|
MBT.Menu.Keybind | string | 'F4' | Open/close keybind |
MBT.Menu.Command | string | 'mbt_emotes' | Chat command |
MBT.Menu.Layout | string | 'cinematic' | 'cinematic' or 'default' |
MBT.Menu.AllowLayoutSwitch | boolean | true | Allow players to toggle layout in settings |
MBT.Menu.Position | string | 'right' | 'left' or 'right' |
MBT.Menu.CloseOnPlay | boolean | true | Auto-close menu on emote play |
MBT.Menu.RememberState | boolean | true | Remember scroll/tab/filters after emote play |
MBT.Menu.Watermark | boolean | true | Show MBT watermark |
MBT.Menu.OverrideNativeMenu | boolean | true | Suppress rpemotes NativeUI menu |
Features
| Key | Type | Default | Description |
|---|
MBT.Features.Favorites | boolean | true | Favourites system |
MBT.Features.RecentEmotes | boolean | true | Recent emotes tab |
MBT.Features.MaxRecent | number | 12 | Max recent emotes tracked |
MBT.Features.QuickBind | boolean | true | Numpad quick bind slots |
MBT.Features.SharedPopup | boolean | true | Shared emote inline popup |
MBT.Features.PreviewPed | boolean | true | Animated ped preview |
MBT.Features.EmoteWheel | boolean | true | Hold-to-peek emote wheel |
MBT.Features.Personas | boolean | true | Named loadouts for Quick Binds + Wheel |
MBT.Features.EmotePlacement | boolean | true | "Place in world" button |
MBT.Features.OpenJoin | boolean | true | Anonymous group emote join |
MBT.Features.WhatsThat | boolean | false | Peek-and-copy bubble above emoting players |
Emote Wheel
| Key | Type | Default | Description |
|---|
MBT.EmoteWheel.Key | string | 'K' | Hold key to open wheel |
MBT.EmoteWheel.Slots | number | 8 | Number of slots (max 8) |
MBT.EmoteWheel.RemoveKey | string | 'X' | Remove slot key |
MBT.EmoteWheel.Mode | string | 'radial' | 'radial' or 'linear' |
MBT.EmoteWheel.PointerSensitivity | number | 2.8 | Radial mode pointer speed |
Personas
| Key | Type | Default | Description |
|---|
MBT.Personas.Max | number | 4 | Max personas per player |
Trending
| Key | Type | Default | Description |
|---|
MBT.Trending.Enabled | boolean | true | Show trending emote spotlight |
MBT.Trending.WindowDays | number | 7 | Rolling window in days |
MBT.Trending.MinPlays | number | 10 | Minimum plays to qualify |
MBT.Trending.SaveIntervalMinutes | number | 10 | KVP flush interval |
Open Join
| Key | Type | Default | Description |
|---|
MBT.OpenJoin.Enabled | boolean | true | Enable Open Join |
MBT.OpenJoin.Radius | number | 8.0 | Broadcast radius in meters |
MBT.OpenJoin.MaxRecipients | number | 30 | Max players to notify |
MBT.OpenJoin.AnnounceCooldownMs | number | 3000 | Cooldown between announcements |
MBT.OpenJoin.JoinKey | string | 'Y' | Join key shown in the pill |
Anti-Spam
| Key | Type | Default | Description |
|---|
MBT.AntiSpam.CooldownMs | number | 250 | Min ms between emote plays |
RP Text
| Key | Type | Default | Description |
|---|
MBT.RpText.Enabled | boolean | true | Master toggle |
MBT.RpText.MaxLength | number | 110 | Max characters per message |
MBT.RpText.DurationMs | number | 6500 | Pill display duration (ms) |
MBT.RpText.ThrottleMs | number | 1000 | Per-player send cooldown (ms) |
MBT.RpText.HeadOffset | number | 0.25 | Pill height above head bone (metres) |
MBT.RpText.Channels | table | see config | Array of { id, command, label, range, color } |
Photo Mode
| Key | Type | Default | Description |
|---|
MBT.PhotoMode.Enabled | boolean | true | Show the camera button in the menu |
MBT.PhotoMode.Watermark | boolean | true | Show MBT watermark overlay |
MBT.PhotoMode.LogoUrl | string | '' | Server logo URL for Discord embed thumbnail |
MBT.PhotoMode.Caption | string | 'Captured in Photo Mode' | Embed caption line |
MBT.PhotoMode.OrbitSensitivity | number | 0.45 | Drag → rotation speed |
MBT.PhotoMode.ZoomSensitivity | number | 0.30 | Scroll → zoom speed |
MBT.PhotoMode.MinDistance | number | 0.7 | Closest camera distance (m) |
MBT.PhotoMode.MaxDistance | number | 7.0 | Farthest camera distance (m) |
MBT.PhotoMode.DofDefault | boolean | true | Start with depth-of-field on |
MBT.PhotoMode.Filters | table | 6 presets | Array of { id, label, timecycle, strength } |
MBT.PhotoMode.Discord.Enabled | boolean | false | Enable Discord upload button |
MBT.PhotoMode.Discord.WebhookUrl | string | '' | Discord webhook URL |
MBT.PhotoMode.Discord.ThrottleMs | number | 30000 | Per-player upload cooldown (ms) |
MBT.PhotoMode.Discord.Style | string | 'embed' | 'image' or 'embed' |
Theme
| Key | Default | Description |
|---|
MBT.Theme.Accent | '00e676' | Accent color (hex, no #) |
MBT.Theme.AllowAccentChange | false | Let players pick their accent preset in settings |
MBT.Theme.Background | '0C0E14' | Background color |
MBT.Theme.Card | '141720' | Card/panel color |
MBT.Theme.Text | 'E8E8EE' | Primary text color |
MBT.Theme.SubText | '6B7280' | Secondary text color |
MBT.Theme.Border | '1A1D26' | Border color |
Job Permissions
| Key | Type | Default | Description |
|---|
MBT.JobPermissions.Enabled | boolean | true | Master toggle |
MBT.JobPermissions.Framework | string | 'auto' | 'auto', 'esx', 'qbox', 'qbcore', 'standalone' |
MBT.JobPermissions.Emotes | table | {} | Emote name → { 'job1', 'job2' } |
Ecosystem
| Key | Type | Default | Description |
|---|
MBT.Ecosystem.MetaClothes | boolean | false | Enable mbt_meta_clothes v2 integration |
MBT.Ecosystem.WearableProps | boolean | false | Enable mbt_wearable_props integration |