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

Does this mean that experiences that are using the Legacy Chat system will be removed from the platform? If that is to be the case, wouldn’t that result in many classic/older experiences being removed from the platform en masse? Either it be experiences from developers that are (for one reason or another) not able to update the experience or just experiences that developers have moved on from but still allow access to for users to look around in.

1 Like

So, I’m assuming we can send global admin messages this way, or am I misreading?

There is an absolute truckload of confusion around this, people are conflating TextChatService with the built-in chat core GUI, of which you can and are allowed to override, which is getting people worked up thinking that they’re not allowed to edit chat.

People missing the FAQ on this …

10 Likes

Thank you for the two week notice that you intend to enable a new API. I’m very glad this launched today and not, say, in two weeks when the API we need to use was live. It’s very convenient.

18 Likes

The backend is still the same buggy non performant limiting mess that we call TextChatService unfortunately. Yeah, implementing custom UIs is nice, however, I want to handle the entirety of the system on my own. Giving us APIs to allow support for the new “parental controls” would be a better solution than outright banning custom chat systems.

4 Likes

I think moderation of this is too far…

Just remove the LegacyChatService and all is good, it doesnt need moderation.

5 Likes

Can you allow us to test CanUserChatAsync and CanUserDirectChatAsync settings in the player emulator, beacuse currently I’m not completely sure if I added restrictions correctly.

e.g. I want to test out if GetChatForUserAsync automatically restrict a message, because in the docs it says for users that have chatting restritcted the function throws an error

3 Likes

Well, this is a fricking bombshell

Ok, so we have to use a new API. Then we have to migrate to TextChatService. By migrating to TextChatService, does that mean removing the Chat service from every script, and using instead the apis from TextChatService?

This makes me things that just using the apis from TextChatService is not enough…

I forked the legacy chat, and already planned to remove the ChatService from it completely. Seems like I will have to either replace the remotes with TextChatChannels (?), or just quit Roblox, cuz I’m tired of Roblox

4 Likes

Really wish there was more tutorials (or community resources) that would explain more with TextChatService, as the customization options for it don’t fit my own personal needs.

2 Likes

Will CanUserDirectChatAsync be removed after this interim? As it seems like thats implied with how this is worded. I’d like for it to not be if it is, as I’m going to have to rely on it for my cross-server chat, becuase /w only allows for chatting with other players in the server.

Also can we still have chat filter methods? As thats also something thats needed for someone to make a cross-server chat. Unless we are able to create TextSources, and use SendAsync but that’d be sorta weird.

My current game I’m working on is HEAVILY relying on having a cross-server chat, because every single server is going to be “linked”. And it’d be a pretty big issue if people couldn’t chat with people in other servers.

1 Like

Thanks so much! I was waiting out on migrating to TextChatService until Channel Tabs were released.

However, the legacy system still had features that TextChatService does not, like the user being able to resize the chat window during runtime. Is this a planned feature for TextChatService?

6 Likes

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:

1 Like