TextService
The TextService is a service internally responsible for handling the display of text in the game.
Memory category | Instances |
---|
Member index 8
Description
The TextService is a service internally responsible for handling the display of text in the game.
This class has two member functions:
The TextService:GetTextSize() function gives developers the ability to calculate the space required for a specific text string with specified formatting, returning a Vector2 pixel size.
The TextService:FilterStringAsync() function is required to properly filter user specified text (such as chat messages or other inputs) in the interests of user safety. Developers not using the Roblox default Chat, or allowing users to otherwise input text must use this function.
History 19
- 647 Add GetTextSizeOffsetAsync
- 645 Change Parameters of GetFamilyInfoAsync from (assetId: Content) to (assetId: ContentId)
- 607 Change ReturnType of FilterStringAsync from Instance to TextFilterResult
- 607 Change ReturnType of FilterAndTranslateStringAsync from Instance to TextFilterTranslatedResult
- 576 Add FilterAndTranslateStringAsync
- 573 Change ReturnType of SetResolutionScale from void to null
- 552 Add GetFontMemoryData
- 529 Add GetTextBoundsAsync
- 517 Add GetFamilyInfoAsync
- 462 Change ThreadSafety of SetResolutionScale from to Unsafe
- 462 Change ThreadSafety of GetTextSize from to Unsafe
- 462 Change ThreadSafety of FilterStringAsync from to Unsafe
- 452 Add SetResolutionScale
- 341 Change Parameters of FilterStringAsync from (stringToFilter: string, fromUserId: int64) to (stringToFilter: string, fromUserId: int64, textContext: TextFilterContext = PrivateChat)
- 322 Change Parameters of FilterStringAsync from (stringToFilter: string, fromUserId: int) to (stringToFilter: string, fromUserId: int64)
- 293 Add FilterStringAsync
- 274 Change Security of GetTextSize from RobloxScriptSecurity to None
- 216 Add GetTextSize
- 47 Add TextService
Members 8
FilterAndTranslateStringAsync
Parameters (4) | Default | |
---|---|---|
stringToFilter | string | |
fromUserId | int64 | |
targetLocales | Array | |
textContext | TextFilterContext | PrivateChat |
Returns (1) | ||
TextFilterTranslatedResult |
Chat translation is not supported in legacy chat. This method is no longer supported and should not be used. All calls return an empty object. Translating chat messages is only available via TextChatService.
Thread safety | Unsafe |
---|
History 2
- 607 Change ReturnType of FilterAndTranslateStringAsync from Instance to TextFilterTranslatedResult
- 576 Add FilterAndTranslateStringAsync
FilterStringAsync
Parameters (3) | Default | |
---|---|---|
stringToFilter | string | |
fromUserId | int64 | |
textContext | TextFilterContext | PrivateChat |
Returns (1) | ||
TextFilterResult |
The FilterStringAsync function filters a string being received from a user, using the TextService, and returns a TextFilterResult which can be used to distribute the correctly filtered text accordingly.
Usage
This method should be called once each time a user submits a message. Do not cache the results of this function and re-use them for separate messages. If a user submits the same text multiple times this method must be called again each time the message is sent. If the results are cached and reused spam detection and many forms of context-aware filtering will be broken and potentially put user safety at risk. Games that improperly use cached results may face moderation.
However, it is encouraged to keep these result objects to display the same message to users who join the server later. For example: this can be used to safely and efficiently implement a server chat log that always uses the least restrictive filtering for users who join later, or for efficiently displaying text like a pet name to a user who joins the game after the pet was first spawned and name filtered.
The optional TextFilterContext parameter will not impact the filtered result of the query. This value will be used to improve Roblox's text filtering.
Private text is anything that is seen only by specific players, rather than every player. For example, if the chat is seen by a single player, or by a selected group of players, then the chat is considered private. Chat for teams or chat that is potentially visible to a wider group, such as the server, is considered public. If you are unsure what your text qualifies as, leave the optional field blank.
Note:
- This method always yields to make a text filtering service call
- This method may throw if there is a service error that can not be resolved. If this function throws an error please do not retry the request; this method implements its own retry logic internally. If this method fails do not display the text to any user.
- This method currently throws if fromUserId is not online on the current server. We plan to support users who are offline or on a different server in the future.
Thread safety | Unsafe |
---|
History 5
- 607 Change ReturnType of FilterStringAsync from Instance to TextFilterResult
- 462 Change ThreadSafety of FilterStringAsync from to Unsafe
- 341 Change Parameters of FilterStringAsync from (stringToFilter: string, fromUserId: int64) to (stringToFilter: string, fromUserId: int64, textContext: TextFilterContext = PrivateChat)
- 322 Change Parameters of FilterStringAsync from (stringToFilter: string, fromUserId: int) to (stringToFilter: string, fromUserId: int64)
- 293 Add FilterStringAsync
GetFamilyInfoAsync
Parameters (1) | ||
---|---|---|
assetId | ContentId | |
Returns (1) | ||
Dictionary |
Returns a table containing the name and faces of a font family.
The returned table is structured like this:
1 2 3 4 5 6 7 8 9 10 |
|
If the font family has already been loaded by a previous call to
GetFamilyInfoAsync
, ContentProvider:PreloadAsync(), or a text
object with the TextLabel.FontFace property set, then the method
returns without yielding.
Errors
This method can fail because of network errors. You should always wrap it
in a pcall
for error handling.
Throws an error in these scenarios:
- The passed family is an empty string.
- Downloading the family failed.
- The asset ID is invalid or points to an asset that doesn't exist.
Thread safety | Unsafe |
---|
History 2
- 645 Change Parameters of GetFamilyInfoAsync from (assetId: Content) to (assetId: ContentId)
- 517 Add GetFamilyInfoAsync
GetFontMemoryData
Parameters (0) | ||
---|---|---|
No parameters. | ||
Returns (1) | ||
Dictionary |
Security | RobloxScriptSecurity |
---|---|
Thread safety | Unsafe |
History 1
- 552 Add GetFontMemoryData
GetTextBoundsAsync
Parameters (1) | ||
---|---|---|
params | GetTextBoundsParams | |
Returns (1) | ||
Vector2 |
This method is similar to TextService:GetTextSize(), but uses the Font object instead of Font, which has access to more fonts.
Used to measure how big some text will be given a set of properties like the string, size, and font.
This is a yield function because some fonts may need to be loaded in order to measure them. If the font is already loaded, then it will not yield. ContentProvider:PreloadAsync() can be used to make sure a font is loaded.
Errors
This method can fail because of network errors. You should always wrap it
in a pcall
for error handling.
Throws an error in these scenarios:
- The GetTextBoundsParams.Font has a blank family.
- The
params
argument was nil. - The font family or font face failed to download.
Thread safety | Unsafe |
---|
History 1
GetTextSize
Parameters (4) | ||
---|---|---|
string | string | |
fontSize | int | |
font | Font | |
frameSize | Vector2 | |
Returns (1) | ||
Vector2 |
Computes the Vector2 dimensions (in pixels) that will be taken up with text when using the specified formatting parameters and size constraints.
Note, the fontSize parameter will not accept the FontSize Enum. Instead the integer size corresponding with the FontSize Enum should be used. This is not equal to the value of the FontSize Enum. For example, for Size11 font, the integer 11 should be used.
This function is a useful alternative to the TextLabel.TextBounds property of the TextLabel and TextButton objects. Using the TextLabel.TextBounds property to calculate the dimensions text requires is often impractical as it requires a TextLabel object to be created.
With GetTextSize, the dimensions required by a particular text string in a particular TextLabel or TextButton can be calculated before any object is created or text property set.
Developers are recommended to add a pixel of padding to the result to ensure no text is cut off.
This method is limited to only fonts that are listed in Font. To get access to more fonts, you can use TextService:GetTextBoundsAsync() instead.
Thread safety | Unsafe |
---|
History 3
- 462 Change ThreadSafety of GetTextSize from to Unsafe
- 274 Change Security of GetTextSize from RobloxScriptSecurity to None
- 216 Add GetTextSize
GetTextSizeOffsetAsync
Parameters (2) | ||
---|---|---|
fontSize | int | |
font | Font | |
Returns (1) | ||
float |
Thread safety | Unsafe |
---|
History 1
SetResolutionScale
Parameters (1) | ||
---|---|---|
scale | float | |
Returns (1) | ||
null |
Security | RobloxScriptSecurity |
---|---|
Thread safety | Unsafe |
History 3
- 573 Change ReturnType of SetResolutionScale from void to null
- 462 Change ThreadSafety of SetResolutionScale from to Unsafe
- 452 Add SetResolutionScale