# TextChatService

Roblox Engine API class from Roblox Studio 0.744.0.7441077 (version-7aaa6838d36c4448).

- Inherits from, nearest first: [Instance](https://rapi.sleaze.dev/classes/Instance.md), [Object](https://rapi.sleaze.dev/classes/Object.md)
- Tags: Not creatable, Service
- Memory category: Instances
- HTML page: https://rapi.sleaze.dev/classes/TextChatService/
- Roblox documentation: https://create.roblox.com/docs/reference/engine/classes/TextChatService

A service handling in-experience text chat.

## Properties

### ChatTranslationEnabled

```luau
TextChatService.ChatTranslationEnabled: boolean = true
```

- Tags: Not replicated, Write: Roblox script security, Read capabilities: Chat

Determines whether a user has chat translation enabled.

### ChatTranslationFTUXShown

```luau
TextChatService.ChatTranslationFTUXShown: boolean = false
```

- Tags: Hidden, Not replicated, Roblox script security, Read capabilities: Chat

### ChatTranslationToggleEnabled

```luau
TextChatService.ChatTranslationToggleEnabled: boolean = false
```

- Tags: Hidden, Not replicated, Roblox script security, Read capabilities: Chat

### ChatVersion

```luau
TextChatService.ChatVersion: Enum.ChatVersion = Enum.ChatVersion.LegacyChatService
```

- Tags: Write: Roblox script security, Read capabilities: Chat

Determines whether to fully enable [`TextChatService`](https://rapi.sleaze.dev/classes/TextChatService.md) or revert to the legacy chat system.

### CreateDefaultCommands

```luau
TextChatService.CreateDefaultCommands: boolean = true
```

- Tags: Write: Plugin security, Read capabilities: Chat

Determines whether [`TextChatService`](https://rapi.sleaze.dev/classes/TextChatService.md) should create default `TextChatCommands`.

### CreateDefaultTextChannels

```luau
TextChatService.CreateDefaultTextChannels: boolean = true
```

- Tags: Write: Plugin security, Read capabilities: Chat

Determines whether [`TextChatService`](https://rapi.sleaze.dev/classes/TextChatService.md) should create default `TextChannels`.

### HasSeenDeprecationDialog

```luau
TextChatService.HasSeenDeprecationDialog: boolean = false
```

- Tags: Hidden, Not replicated, Roblox script security, Read capabilities: Chat

### IsLegacyChatDisabled

```luau
TextChatService.IsLegacyChatDisabled: boolean = false
```

- Tags: Hidden, Roblox script security, Read capabilities: Chat

### PlatformIntegratedChat

```luau
TextChatService.PlatformIntegratedChat: Enum.RolloutState = Enum.RolloutState.Default
```

- Tags: Roblox script security, Read capabilities: Chat

Determines whether platform-integrated chat is enabled for the experience. Requires `RobloxScript` security.

## Methods

### CanUserChatAsync

```luau
TextChatService:CanUserChatAsync(userId: User): boolean
```

- Tags: Yields, Capabilities: Chat

Determines whether a user has permission to chat in experiences.

Parameters:

- `userId`: The [`Player.UserId`](https://rapi.sleaze.dev/classes/Player.md) of the user whose chat permission is being checked.

Returns: A boolean indicating whether the user has permission to chat.

### CanUsersChatAsync

```luau
TextChatService:CanUsersChatAsync(userIdFrom: User, userIdTo: User): boolean
```

- Tags: Yields, Capabilities: Chat

Determines whether or not two users can receive messages from each other.

Parameters:

- `userIdFrom`: The [`Player.UserId`](https://rapi.sleaze.dev/classes/Player.md) of the potential message sender.
- `userIdTo`: The [`Player.UserId`](https://rapi.sleaze.dev/classes/Player.md) of the potential message receiver.

Returns: A boolean indicating whether the two users can exchange messages.

### CanUsersDirectChatAsync

```luau
TextChatService:CanUsersDirectChatAsync(requesterUserId: User, userIds: { any }): { any }
```

- Tags: Yields, Capabilities: Chat

Determines whether a user has permission to chat directly with other users in experiences based on factors such as their parental control settings.

Parameters:

- `requesterUserId`: The user who would have initiated the direct chat request. If the user is not in the current server, this method will error.
- `userIds`: A list of users who the `requesterUserId` would like to chat with directly. Users not in the current server are ignored.

Returns: A list of users who could participate in the direct chat request. If none of the users can direct chat with the `requesterUserId`, the result is an empty array.

### CanUsersWhisperAsync

```luau
TextChatService:CanUsersWhisperAsync(fromUserId: User, toUserId: User): boolean
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### ChatIsLoaded

```luau
TextChatService:ChatIsLoaded()
```

- Tags: Roblox script security, Capabilities: Chat

### DisplayBubble

```luau
TextChatService:DisplayBubble(partOrCharacter: Instance, message: string)
```

- Tags: Capabilities: Chat

Displays a chat bubble above the provided part or player character.

Parameters:

- `partOrCharacter`: The part or character that the bubble to be displayed above.
- `message`: The text to be displayed in the chat bubble.

### GetChatableUserCountAsync

```luau
TextChatService:GetChatableUserCountAsync(userId: User, context: string): number
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### GetChatGroupsAsync

```luau
TextChatService:GetChatGroupsAsync(players: { Instance }): { any }
```

- Tags: Yields, Capabilities: Chat

Returns chat group IDs that indicate which players can synchronously text chat together.

Parameters:

- `players`: A list of [`Players`](https://rapi.sleaze.dev/classes/Players.md) currently in the experience to evaluate for text chat compatibility.

Returns: A sorted array of arrays of chat group ID strings. Players who share a matching chat group ID are eligible to synchronously text chat with each other.

### GetPresetsAsync

```luau
TextChatService:GetPresetsAsync(): { [string]: any }
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### GetTextChannelWindows

```luau
TextChatService:GetTextChannelWindows(): { any }
```

- Tags: Roblox script security, Capabilities: Chat

### HasAllocatedUniverseChatContext

```luau
TextChatService:HasAllocatedUniverseChatContext(context: string): boolean
```

- Tags: Roblox script security, Capabilities: Chat

### IsProtectedChatEnabled

```luau
TextChatService:IsProtectedChatEnabled(): boolean
```

- Tags: Roblox script security, Capabilities: Chat

### OnUserChatSettingUpdateAsync

```luau
TextChatService:OnUserChatSettingUpdateAsync(featureName: string, featureValue: string): boolean
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### SendDictatedSpeechUniverseChatAsync

```luau
TextChatService:SendDictatedSpeechUniverseChatAsync(text: string): TextChatMessage
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### SendEnableChatButtonClicked

```luau
TextChatService:SendEnableChatButtonClicked()
```

- Tags: Roblox script security, Capabilities: Chat

### SendEnableChatButtonShown

```luau
TextChatService:SendEnableChatButtonShown()
```

- Tags: Roblox script security, Capabilities: Chat

### SendExpChatLoadSuccess

```luau
TextChatService:SendExpChatLoadSuccess(loadingLatency: number, extras: { [string]: any }?, chatWindowType: string? = "", textChannelWindowName: string? = "")
```

- Tags: Roblox script security, Capabilities: Chat

### SendExpChatMessageClientRendered

```luau
TextChatService:SendExpChatMessageClientRendered(textChatMessage: TextChatMessage, messageRenderedSurface: string? = "unknown", selectedChannelTab: number? = -1, textChannelWindowName: string? = "", specialEffects: { any }? = {})
```

- Tags: Roblox script security, Capabilities: Chat

### SendExpChatWindowScroll

```luau
TextChatService:SendExpChatWindowScroll(chatWindowType: string? = "", textChannelWindowName: string? = "")
```

- Tags: Roblox script security, Capabilities: Chat

### SendExpChatWindowStatusChange

```luau
TextChatService:SendExpChatWindowStatusChange(timeClosed: number, timeOpen: number, timeBackgroundIdle: number, timeTextIdle: number, chatWindowType: string? = "", textChannelWindowName: string? = "")
```

- Tags: Roblox script security, Capabilities: Chat

### SendTextChatCommandClientSent

```luau
TextChatService:SendTextChatCommandClientSent(textChatCommandName: string, chatWindowType: string? = "", textChannelWindowName: string? = "")
```

- Tags: Roblox script security, Capabilities: Chat

### SendUniverseChatMessageAsync

```luau
TextChatService:SendUniverseChatMessageAsync(text: string, metadata: string): TextChatMessage
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### SendUniverseChatPresetAsync

```luau
TextChatService:SendUniverseChatPresetAsync(presetId: string): TextChatMessage
```

- Tags: Yields, Roblox script security, Capabilities: Chat

### setModerationModeEnabled

```luau
TextChatService:setModerationModeEnabled(userId: number, enabled: boolean): boolean
```

- Tags: Roblox script security, Capabilities: Chat

## Events

### BubbleDisplayed

```luau
TextChatService.BubbleDisplayed: RBXScriptSignal<(partOrCharacter: Instance, textChatMessage: TextChatMessage)>
```

- Tags: Capabilities: Chat

Fires when [`TextChatService:DisplayBubble()`](https://rapi.sleaze.dev/classes/TextChatService.md) is called.

### ChatActionReceived

```luau
TextChatService.ChatActionReceived: RBXScriptSignal<(chatActionMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### ClientToServerChatableUserCountRequestSignal

```luau
TextChatService.ClientToServerChatableUserCountRequestSignal: RBXScriptSignal<(requestId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerChatIsLoadedSignal

```luau
TextChatService.ClientToServerChatIsLoadedSignal: RBXScriptSignal<()>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerMessageReplicateSignalV2

```luau
TextChatService.ClientToServerMessageReplicateSignalV2: RBXScriptSignal<(text: string, metadata: string, messageId: string, textSource: TextSource, textChannel: TextChannel)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerMessageReplicateSignalV3

```luau
TextChatService.ClientToServerMessageReplicateSignalV3: RBXScriptSignal<(text: string, metadata: string, messageId: string, textSource: TextSource, textChannel: TextChannel, verified: boolean, isEscapedFlagEnabled: boolean)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerMessageReplicateSignalV4

```luau
TextChatService.ClientToServerMessageReplicateSignalV4: RBXScriptSignal<(text: string, metadata: string, messageId: string, textSource: TextSource, textChannel: TextChannel, verified: boolean, isEscapedFlagEnabled: boolean, presetId: string, presetChatVersion: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerUniverseChatMessageSignalV1

```luau
TextChatService.ClientToServerUniverseChatMessageSignalV1: RBXScriptSignal<(text: string, metadata: string, messageId: string, userId: number, verified: boolean)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ClientToServerUniverseChatMessageSignalV2

```luau
TextChatService.ClientToServerUniverseChatMessageSignalV2: RBXScriptSignal<(text: string, metadata: string, messageId: string, userId: number, verified: boolean, presetId: string, presetChatVersion: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### CoreMessageReceived

```luau
TextChatService.CoreMessageReceived: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### ExpChatFeatureValueChanged

```luau
TextChatService.ExpChatFeatureValueChanged: RBXScriptSignal<(userId: number, featureName: string, featureValue: string)>
```

- Tags: Roblox script security, Capabilities: Chat

### MessageReceived

```luau
TextChatService.MessageReceived: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Capabilities: Chat

Fires when [`TextChannel:DisplaySystemMessage()`](https://rapi.sleaze.dev/classes/TextChannel.md) is invoked on the client, or when the client receives a valid [`TextChannel:SendAsync()`](https://rapi.sleaze.dev/classes/TextChannel.md) response from the server.

### OnIncomingMessageEvent

```luau
TextChatService.OnIncomingMessageEvent: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### OnUserChatSettingUpdateServer

```luau
TextChatService.OnUserChatSettingUpdateServer: RBXScriptSignal<(featureName: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### SendingMessage

```luau
TextChatService.SendingMessage: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Capabilities: Chat

Fires when [`TextChannel:SendAsync()`](https://rapi.sleaze.dev/classes/TextChannel.md) is called by the sending client.

### SendingUniverseChatMessage

```luau
TextChatService.SendingUniverseChatMessage: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### ServerToClientChatableUserCountResponseSignal

```luau
TextChatService.ServerToClientChatableUserCountResponseSignal: RBXScriptSignal<(count: number, requestId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientChatActionReplicateSignal

```luau
TextChatService.ServerToClientChatActionReplicateSignal: RBXScriptSignal<(data: { [string]: any })>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientMessageReplicateSignal

```luau
TextChatService.ServerToClientMessageReplicateSignal: RBXScriptSignal<(text: string, prefixText: string, metadata: string, messageId: string, textSource: TextSource, textChannel: TextChannel, timestamp: number, status: Enum.TextChatMessageStatus)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientMessageReplicateSignalV2

```luau
TextChatService.ServerToClientMessageReplicateSignalV2: RBXScriptSignal<(data: { [string]: any })>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientPresetChatConfigChangedSignal

```luau
TextChatService.ServerToClientPresetChatConfigChangedSignal: RBXScriptSignal<(enabled: boolean, version: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientPresetChatUserAccessChangedSignal

```luau
TextChatService.ServerToClientPresetChatUserAccessChangedSignal: RBXScriptSignal<(accessLevel: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientUniverseChatChannelAllocatedSignalV1

```luau
TextChatService.ServerToClientUniverseChatChannelAllocatedSignalV1: RBXScriptSignal<(context: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### ServerToClientUniverseChatMessageSignalV1

```luau
TextChatService.ServerToClientUniverseChatMessageSignalV1: RBXScriptSignal<(data: { [string]: any })>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

### TextChannelWindowAdded

```luau
TextChatService.TextChannelWindowAdded: RBXScriptSignal<(textChannelWindow: TextChannelWindow)>
```

- Tags: Roblox script security, Capabilities: Chat

### TextChannelWindowRemoved

```luau
TextChatService.TextChannelWindowRemoved: RBXScriptSignal<(textChannelWindow: TextChannelWindow)>
```

- Tags: Roblox script security, Capabilities: Chat

### UniverseChatChannelAllocated

```luau
TextChatService.UniverseChatChannelAllocated: RBXScriptSignal<(context: string)>
```

- Tags: Roblox script security, Capabilities: Chat

### UniverseChatMessageReceived

```luau
TextChatService.UniverseChatMessageReceived: RBXScriptSignal<(textChatMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### UserMessageIntentSent

```luau
TextChatService.UserMessageIntentSent: RBXScriptSignal<(userIntentMessage: TextChatMessage)>
```

- Tags: Roblox script security, Capabilities: Chat

### UserMessageIntentSentRemote

```luau
TextChatService.UserMessageIntentSentRemote: RBXScriptSignal<(text: string, prefixText: string, metadata: string, messageId: string, textSource: TextSource, textChannel: TextChannel, timestamp: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Chat

## Callbacks

### OnBubbleAdded

```luau
TextChatService.OnBubbleAdded: (message: TextChatMessage, adornee: Instance) -> ...any
```

- Tags: Capabilities: Chat

Called when a bubble chat is about to be displayed.

Parameters:

- `message`: The incoming [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md).
- `adornee`: The part or character the bubble chat message is attached to.

Returns: If a [`BubbleChatMessageProperties`](https://rapi.sleaze.dev/classes/BubbleChatMessageProperties.md) is returned, its properties override the [`BubbleChatConfiguration`](https://rapi.sleaze.dev/classes/BubbleChatConfiguration.md) properties.

### OnChatWindowAdded

```luau
TextChatService.OnChatWindowAdded: (message: TextChatMessage) -> ...any
```

- Tags: Capabilities: Chat

Called when a new message is about to be displayed in the chat window. This can only be implemented on the client.

Parameters:

- `message`: The incoming [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md).

Returns: If a [`ChatWindowMessageProperties`](https://rapi.sleaze.dev/classes/ChatWindowMessageProperties.md) is returned, its properties override the [`ChatWindowConfiguration`](https://rapi.sleaze.dev/classes/ChatWindowConfiguration.md) properties.

### OnIncomingMessage

```luau
TextChatService.OnIncomingMessage: (message: TextChatMessage) -> ...any
```

- Tags: Capabilities: Chat

Called when [`TextChatService`](https://rapi.sleaze.dev/classes/TextChatService.md) is receiving an incoming message.

Parameters:

- `message`: The incoming [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md).

Returns: If a [`TextChatMessageProperties`](https://rapi.sleaze.dev/classes/TextChatMessageProperties.md) is returned, those properties are merged with the [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md) parameter to create a new [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md) with those properties, otherwise, if `nil` is returned, then [`TextChatMessage`](https://rapi.sleaze.dev/classes/TextChatMessage.md) is not changed.

## Inherited members

- From [Instance](https://rapi.sleaze.dev/classes/Instance.md): `Archivable`, `archivable`, `Attributes`, `AttributesReplicate`, `AttributesSerialize`, `HistoryId`, `Name`, `Parent`, `PredictionMode`, `PropertyStatusStudio`, `RobloxLocked`, `SerializedOverrides`, `SourceAssetId`, `Tags`, `UniqueId`, `numExpectedDirectChildren`, `DataCost`, `Capabilities`, `DefinesCapabilities`, `IsInSandbox`, `Sandboxed`, `AddTag`, `ClearAllChildren`, `Clone`, `Destroy`, `FindFirstAncestor`, `FindFirstAncestorOfClass`, `FindFirstAncestorWhichIsA`, `FindFirstChild`, `FindFirstChildOfClass`, `FindFirstChildWhichIsA`, `FindFirstDescendant`, `GetActor`, `GetAttribute`, `GetAttributeChangedSignal`, `GetAttributes`, `GetChildren`, `GetDebugId`, `GetDescendants`, `GetFullName`, `GetStyled`, `GetStyledPropertyChangedSignal`, `GetTags`, `HasTag`, `IsAncestorOf`, `IsDescendantOf`, `IsPropertyModified`, `QueryDescendants`, `RemoveTag`, `ResetPropertyToDefault`, `SetAttribute`, `WaitForChild`, `Remove`, `children`, `clone`, `destroy`, `findFirstChild`, `getChildren`, `isDescendantOf`, `remove`, `AncestryChanged`, `AttributeChanged`, `ChildAdded`, `ChildRemoved`, `DescendantAdded`, `DescendantRemoving`, `Destroying`, `StyledPropertiesChanged`, `childAdded`
- From [Object](https://rapi.sleaze.dev/classes/Object.md): `ClassName`, `className`, `GetPropertyChangedSignal`, `IsA`, `isA`, `Changed`
