New TextChatService as a requirement policy is massively problematic

As a Roblox developer, it is currently too hard to create innovative communication methods within my experience. This is fueled by the recent announcement that TextChatService would be required to be used for all conversations in the near future.

Section 1: Debunking

Since there are a few common speculations about the reason for this update, let’s discuss them first.

This policy will solve situations like the 'Crosswoods incident' since Roblox can now validate if a message was actually sent by a player

This is sort of true, Roblox can technically validate messages sent via their CoreGui version of TextChatService however this most certainly isn’t the sole reason for this update since we are still allowed to use custom UIs with TextChatService and it wouldn’t be possible for Roblox to validate the authenticity of messages sent in such experiences.

Roblox said this is to make global compliance easier for developers

Yes, Roblox did say this, but I do have to wonder why TextChatService isn’t just the ‘preferred’ option if this were to be the case. What makes TextChatService so special as to the point that no other comparable API could exist for developers to use? There’d seemingly be no reason not to allow both methods to co-exist if this were the only reason. Many developers (such as myself) wouldn’t care if they’d regularly need to update their chat implementation for new compliance laws assuming their chat system gets to work in the way they envisioned it; why harm those developers by forcing it?

TextChatService is much more secure, and that's why Roblox is forcing a migration

If this were to be the case, Roblox has unfortunately done a terrible job of communicating it as I can not personally see any obvious security change between the two, which makes one more secure than the other.


Section 2: What this update ACTUALLY does

Many people don’t seem to exactly realise what problems this update actually introduces, so let’s discuss them.

Cross server communication possibly now banned!?

Yes, you heard that correctly, cross-server communication methods don’t have a valid TextChatService singleton that they can use and, as such, may no longer be possible if this policy goes into effect.

UIBlox theme will be heavily used

While many may argue that you can create your own custom UI. Most developers aren’t going to bother with that extreme effort, and since the default UI has very little customisation methods; most experiences are going to be forced with a UIBlox looking UI. This may not be within their vision of their ideal experience, but the effort may be too much for them to do otherwise; this all leads to a less innovative chat solution in some experiences.

Encourages developers to dance around the API, making everything less secure

The API design for TextChatService was almost certainly not made for anything beyond experience chatroom-like chats, and the API design speaks to that point with very little memory control if we have a lot of different conversations. We’ve even seen developers working around API stuff like this in the past with Roblox filtering, developers were not provided with a way to filter external API responses, so we just falsified it as coming from a random player in the server; this was (and still is) common practice because Roblox unfortunately failed to provide us with a suitable API for the situation. We are further encouraged to do this with this API for use cases such as efficient memory management for players who leave the experience yet still have their text visible in-experience.

Creates unnecessary abstraction

Say you want to make an in-game billboard where users can put up posts and reply to them. Well, good luck because while this previously would have been pretty easy, being a few simple calls to the filtering API, now you have to do the following:

  • Create a TextChannel for each post and maintain it until the post is deleted in case someone replies.
  • Add everyone to the TextChannel so they can see the message
  • Anytime a new player joins the experience, you must repeat the above steps since Roblox doesn’t have any methods to retrieve existing messages

Why wouldn’t just one TextChannel be good enough? Well, you’d still end up needing to re-create the channel every time a new player joins, and you are likely to lose out on any context aware filtering that may exist.


Section 3: Why?

This section is, of course, just speculation given the info we’ve been given, but I thought I’d include it anyway.

Context aware filtering

One major benefit I can see for Roblox with TextChatService is that they now have more context on where a message was sent. Previously, filtering for chat was not connected to any particular channel, and there was no way for Roblox to determine whether two messages were sent via the same channel or not.

Easy to make on-the-spot changes

Changes could be easily tweaked behind the scenes to make chat in particular channels more strict if needed.


4. A possible alternative

Given my analysis, it seems the best solution would be to implement an API similar to TextChannel with four massive changes:

  • It should only provide filtering (not sending messages to clients in itself).
  • The sender should be a UserId (not a Player instance) and should be allowed to include players who have since logged offline or are in a different server.
  • The API could provide a list of players in the current server who can see the message and their specific filtered copy.
  • We shouldn’t need to keep these in server memory and should be able to reference them via a short-id to prevent memory leaks.

This API could still benefit from context-aware filtering (since each related message is connected to a particular conversation) without requiring developers to work around TextChatService; the only drawback with this API is that we could have duplicate conversations in the case of cross-server communication but this is already an issue with TextChatService so I think we can disregard that as a genuine issue.

This solution isn’t perfect and still falls for a pitfall, mainly around the fact that forked versions of the legacy-chat and custom chat systems would need to be revamped however regardless of what API Roblox adds that’d be required anyway.


If Roblox is able to address this issue, it would improve my development experience because it would allow me to continue to make innovative communication solutions in my experiences. Innovation most greatly shows when Roblox supports more than just the ‘common use cases’, and I hope Roblox sees that too.

28 Likes

I’m confused how your proposal is any different than the reality of TextChannels today.

1 Like

It is different in the way that:

A) It allows for players outside of the current server to send messages while still being filtered appropriately; IE: it allows for cross-server communication, not possible in TextChatService.
B) It doesn’t require messages to be ‘sent’ in order to filter them, making it much easier to integrate into current custom chat systems.
C) Following point B, since there wouldn’t be any default sending behaviour, it would allow developers to edit the message content in transit; this is important for some social-deduction games.
D) Assuming that it’d work like how I described it, being indexable by a string; it would allow for better memory management rather than needing to open 50+ different TextChannel instances just in-case you want to have replies to those conversations later.
E) It would allow for messages to be served to players who join after the message was sent.

Again, my proposal here is just a suggestion; I’d be personally happy with any solution that solves the problems that I mentioned.

2 Likes

easiest solution
just make it a new thing and not remove what isn’t broken? just allow users to use the new textchatservice if they want, and others can use legacy chat instead of the textchatservice so things don’t completely break down

2 Likes

This would be the most ideal solution, yes. I only suggested what I did in the case that Roblox is adamant about having context-based filtering as that was the only reason that I could personally even see for this change.

2 Likes

praying they will figure out this situation at the point when they force everyone to switch.
if not, to be so limited in communication options, on the platform where communication and interaction with other players is the primary focus of everything…
just not it for everyone at this point, would bring more harm than benefit for roblox too.
features cut => less interaction => less engagement = :sad:

1 Like

I see this as an overcorrection on Roblox’s part, the TextChatService APIs themselves are fine and actually pretty powerful once you grapple with them.

The issue is that this creates a “black box” approach where previously you could tinker it to how you see fit. The “blackbox” means we have to trust that Roblox knows best with the text chat APIs.

Oh and for people mentioining “Crosswoods”, they started working on this in 2021, so uh, no?

3 Likes

For chatting, they are.
If we wouldn’t limited to this concept of solo experience game chat, this post would not have been made in the first place.

Those are the limits we have to encounter. Point 1 and 4 in the 2 section of the post.

3 Likes

Cross server communication definitely has to be implemented in the TextChatService. A game I play (RetroStudio) had to stop their “messaging” feature where players were able to send messages to each other, even if they’re not in the same server.

5 Likes

Hard agree, although engineers are working on this, it’s also already too easy to bypass. This is currently LESS SECURE than Legacy or Custom Chat Systems.

The funniest part about it is that developers can fix this in any chat system -_-

To clarify, the alternative listed on this topic is simply only one possible solution. If anyone has any reasons for why the listed solution isn’t ideal for their particular use case, please do voice them, I’m sure I missed something!

A heart to the topic should also ideally just voice that you want this issue as-a-whole resolved, not that you 100% agree that my proposed solution is the best way to do so.

I just thought I’d mention this in case anyone was reluctant to heart the topic because of the proposed solution being there. I’m not considering hearts to be a “I want this particular solution to be the way this is resolved” and ideally staff shouldn’t either; the issues listed are the main purposes for this post, not the proposed solution. I only listed a possible solution to get the ball-rolling on how this could even be approached in the first place while fixing all the issues I listed, especially the memory management issue.


On top of this, to any staff that may read over this, again, I’m open to any solution that solves the problems I’ve listed. I’m also open to discussing specifics of my issues if needs be, including which issues are most detrimental to me personally, my PMs are open. I just really want this situation resolved as soon as possible since it is absolutely detrimental to some of my in-dev experiences, and I can only assume it is the same for many other devs.

another thing I really hate is how I have a set of scripts that basically disables chat entirely since I don’t need nor want it
but this doesn’t work with this new service >:c
though I have found an alternative