Migrate to TextChatService: Removing Support for Legacy Chat and Custom Chat Systems

Fantastic update! I have been using the new chat system and prefer it by a long shot to the old one. More features will come soon for TextChatService like they said. Thank you Roblox.

1 Like

add a button that lets you
Migrate all of your games without needed to edit them, best for anyone that has too many games

3 Likes

TextService’s FilterStringAsync is the replacement for the filter methods in ChatService

why just not automatically force it instead of moderating

3 Likes

Roblox is committed to preserving these legacy experiences. For transparency, one avenue we are researching is the impact of having methods that custom chats rely on such as TextFilterResult:GetChatForUserAsync return an empty result. Most custom chats at this time are likely using either TextFilterResult:GetChatForUserAsync or Chat:FilterStringAsync and the validity of the use cases these APIs provided will have diminished after April 30th, 2025.

Doesn’t look like it.

5 Likes

There are apis for ChatTranslations, and I found out after noticing chat translation worked in the LegacyChat (it just has to be enabled)

Here is the code from the LegacyChat: (Inside ChatService, under ChatServiceRunner)

--// Return values: bool filterSuccess, bool resultIsFilterObject, variant result
function methods:InternalApplyRobloxFilterAndTranslate(speakerName, listOfTargetLanguages, message, textFilterContext)
	local alwaysRunFilter = false
	local runFilter = RunService:IsServer() and not RunService:IsStudio()
	if (alwaysRunFilter or runFilter) then
		local fromSpeaker = self:GetSpeaker(speakerName)
		if fromSpeaker == nil then
			return false, nil, nil
		end

		local fromPlayerObj = fromSpeaker:GetPlayer()
		if fromPlayerObj == nil then
			return true, false, message
		end

		if allSpaces(message) then
			return true, false, message
		end

		local success, filterResult = pcall(function()
			local ts = game:GetService("TextService")
			local result = ts:FilterAndTranslateStringAsync(message, fromPlayerObj.UserId, listOfTargetLanguages, textFilterContext)
			return result
		end)
		if (success) then
			return true, true, filterResult
		else
			warn("Error filtering and translating message", message, filterResult)
			self:InternalNotifyFilterIssue()
			return false, nil, nil
		end
	end

	task.wait()
	return true, false, message
end

I have tried playing with this api, but it seems to work in an odd way, and I just noticed this…


(It does work right now still)

2 Likes

Yes, but TextFilterResult is clearly going to not allow for chat filtering in some way. Or maybe not, but this announcement was horribly timed and should’ve had more thought put in before it was pushed to developers. And hell its horrible timing, and little thought is just proven by the fact this announcement was posted under the Roblox account.

1 Like

To be honest that change is not needed at all, People forked the legacy chat or used it by preference and for some purposes and also because it runs better than TextChatService

At least not force devs to switch because they can still use the new API to respect the regulations instead of directly removing Legacy Chat and Forks entirely

3 Likes

hey I was using betterchat+ in my game :sob::face_vomiting:

2 Likes

Wait, so you’re telling us we need to migrate to a new API that doesn’t even exist yet? And that all forms of user communication must go through this currently nonexistent API or we’ll get axed?

You’ve all lost it.

Because they can’t, a custom chat system could go directly through remotes without ever touching their API. It would have to be rewritten manually.

They’re just forcing us to always use their API so they can listen in and moderate everything.

4 Likes

:warning: DONT FORCE THIS :red_circle::red_circle::red_circle:

This will completely DESTROY my game as it ABSOLUTELY RELIES on custom chats!
Please think of an alternative way to do this!

such as using a service for checking parental settings :heavy_heart_exclamation:

13 Likes

so i have to go to all of my games and migrate or else i might get banned

What about players who have starter places and play exclusively on mobile, without access to a computer (i.e. without being able to access the Studio)?

Will they simply suffer from moderation because they don’t have a computer?
This is ABSURD.

EDIT: As Reapimus said, only games with modified versions of the legacy chat may not go through automigration. Thanks for the clarification.

4 Likes

What if a user contains private placeslots with no access to other players? Not having been updated, edited nor played in years.

Will the developers be forced to delete their old chat code? I’m wondering how this enforcement will actually go.

1 Like

Roblox try not to make the worst updates known to man (impossible)

6 Likes

i loved this style

EDIT: still love the style.

300

10 Likes

roblox creates starter places for everyone, but not everyone has access to a computer.

unfair.

EDIT: As Reapimus said, only games with modified versions of the legacy chat may not go through automigration. Thanks for the clarification.

1 Like

are they purposefully trying to wipe off users so that their trash servers can finally handle it or what

3 Likes

Please rethink this. There must be an easier solution. Maybe just fix and keep maintaining the legacy chat service? I hope if enough complain this could end up getting U turned like that time they announced a controversial policy change over use of catalog assets in games.

I hope this was not triggered by bad press or a recent lawsuit.

5 Likes

my account is gonna get deleted for forgetting to migrate to that service in some random baseplate game