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

Will the ability to set the given TextChatService chat window a custom position be added? or the ability to atleast offset from the given 9 positions?

i say this feels like a pretty stupid change
for starters, in the new chat system you can no longer see chat history [which was a nail in the coffin for me]
like many other people said too, it’s lacking a lot of other features that legacychat has

give people either a longer deadline or don’t moderate their games for using LegacyChatService
[or just, y’know, notify them]
if they dont respond, reset chat settings and auto migrate or something
:upside_down_face:

1 Like

I’m still looking for answer to this question. It doesn’t matter for me if I need to make support for tags like <b>Text<\b> or **Text**, I just want to have such functionality in my chat for annotating my messages, showing what got tagged to user who typed message, and such. It’s better for me to type: <font color="#FF8000">PlayerName</font> go under shelter or meteor will fall on <b>you</b>! than without that tags, cuz this will grab attention of player more than just plain white text.

If I won’t be able to support it with Roblox’s systems, I will migrate with giant amount of hacks and merges that noone will like, like exclusion from filtered message this tags, sending information about this tags via remotes, and then merging them both, cause rich tags on themselves are guaranteedly get tagged. This won’t be ideal solution though cuz of translations (which I don’t plan to preserve anyways)

I’m trying to use new text chat service, but immediately i encountered stupid limitation with being unable to isolate rich text in the chat window and bubble chat.
I’ve already tried numerous things like adding metadata or sanitizing rich text, but it’s all ineffective.
This is what I end up with.
RobloxStudioBeta_2024-11-04_14-23-11-686
RobloxStudioBeta_2024-11-04_14-23-14-635
And this is why I don’t want to bother with new TextChatService’s original UI and its stuff. It’s awfully limiting enough. I just want to add message color to an individual user without any hazzle like this.
So please, add solutions to such edge-cases like this. I’m honestly starting to feel like to just make my own UI from scratch and use it over what we’re provided with.

1 Like

A lot of the features you’ve mentioned here were possible with modifications to the backend, especially to a custom module that I’ve created called ChannelBuilder. I’ve even made it in a way that allowed me to work with the VoiceChatService.

I can’t explain how the system works fully here, but it has a ton of backend modifications and features that cannot be easily transferred to TextChatService.
(Or can’t be transferred at all, there are a lot of features I’ve not shown in the video.)


If you’ve read my replies above, my main issue isn’t about being able to implement our own custom UI or not, it’s about having full control over our systems, if I wish, I should be able to create my own system from scratch, without having the risk of my account or my experience being moderated. Many people have expressed the same thoughts, and yet, instead of creating a better solution, we are arguing about how TextChatService can or cannot do certain things.

2 Likes

I have to imagine this is a bug. There is a workaround, but it would be really nice if we didn’t need it.

1 Like

I have some concerns. If our experiences will be moderated on the basis of using an old chat system, how can I tell which chat system I use?

I would like to ask for an indicator that tells us if our game is “chat-compliant”. A simple indicator like this will help developers know whether their game meets the new chat requirements, and avoid difficult and time-consuming moderation action from Roblox.

I have a second question - is using StarterGUI:SetCore() now banned, or is that allowed? SetCore() is useful for making system announcement messages, how can I make system messages that are allowed with the new regulations?

Thank you for any help!

2 Likes

It appears they have updated the post to confirm that they will attempt to auto-migrate as many games as possible, or disable chat if auto-migrating doesn’t work in a particular game, and if they can’t disable the chat either, then instead of taking down a game it’ll just be set to private.
I think they’re saying they’ll only consider moderation action if creators continue to deliberately use chat bypasses.

If I’m not mistaken,
if you are not using custom chat and have made zero chat modifications, you should not be affected by the auto-migration.

4 Likes

now how do I remove chat altogether?
if the legacy chat is going to be removed then I can’t remove chat anymore since this new chat system doesn’t seem to allow us to remove it

2 Likes

You could create a new UI that supports rich text, hooking onto the TextChatService methods and just parsing the rich text should work. You then can render the message using your own code. Regarding moderation, you could pass the rich text data into metadata as a series of pointers where the rich text tags get injected at render time. User facing wise, you could add Italic, Bold and Color editing options to the text field (Reminder you completely control the UI: you just need to use TextChatService methods instead of RemoteEvents)

3 Likes

For the automatic migration, will be there any attempt at preserving any level of visual or functionality from the old legacy chat, especially the instance structure of it? There are definitely games that rely on legacy chat and/or legacy chat bubbles to be the way that they are. This also seems more of a back-end update than a front-end one.

1 Like

Never thought about using metadata for such purpoices, I’ll try it.

Channel Tabs and UI Gradient are now available in TextChatService.

15 Likes

Do you know by any chance the length limit of metadata string? Cuz with some amount of formattings applied, I resulted in 2k+ symboled metadata, which I assume got dropped.

1 Like

No idea, you’d probably have to test that yourself considering the spotty documentation.

2 Likes

Our game has a global cross-server chat sent over MessagingService, but TextChatService doesn’t seem capable of supporting it.

Limitations I encountered:

  • Properly filtered message contents can’t be obtained, so its not feasible to transport the message properly (this is the main showstopper, considering :GetChatForUserAsync() shouldn’t be used and :GetNonChatStringForBroadcastAsync seems pretty obviously off the table)
  • Can’t author messages that originate from other users.

Use cases

  • Games which simply have global chats that are shared throughout all servers & places in the experience
  • Games which use private servers & sub places for different isolated locations (e.g. a lobby place, a main place, and a test place, which might want their own shared chats isolated to them, or might want none at all)
  • Games which use private servers & sub-places to create coupled multi-server environments (e.g. two private servers, Earth and Moon are coupled together, and the developer wants to share chat between the two private servers but not between other Earth & Moon pairs)
Dedicated solutions & considerations

Possible dedicated solutions

There are two paths that seemed sensible to me for how this could potentially be directly supported by the new chat system as a sort of out of the box feature, each with different pros and cons. I am sort of imagining what a feature like this could look like at scale here, and not really focusing just on my use case alone, so it’s worth mentioning that this is all way outside of the scope of how I actually use global chat in practice.

Wishlist

  • Automated filtering should work out of the box
  • Automated translation should work out of the box
  • ShouldDeliverCallback or a cross-server equivalent should exist for the sending server & receiving server
  • Interactivity with usernames, whispering/messaging, etc, would ideally be supported out of the box (I can imagine with in-game PMs being on the roadmap it’s likely that if the user is in another server it could just fall back to this for whispers and stuff)

Option 1 (Managed by developers)

Roblox provides a way for developers to generate user messages that Roblox handles as normal, which definitely provides the most flexibility.

  • A way to create TextSources for users not in the server is added (e.g. either by default or via a new method designed explicitly for cross-server purposes)
  • A method is added to emit messages for TextSources (e.g. a method on TextChannel similar to :SendAsync, or a method on TextSource designed for emitting messages from the TextSource)
  • It is up to developers to clean up TextSources

Considerations

  • This is probably relatively cheap to implement, and it would be easy for developers to use.
  • The ability to create TextSources for users not in a game would almost certainly open up undesirable options for abuse, as messages sent in this way would sort be expected to be indistinguishable from regular players in a way that (even formatted/colored) system messages might not be (assuming they have special functionalities like clicking on the names of users to message them)
  • Developers would be accepting MessagingService budgets.
  • Roblox would maintain the ability to turn off the behaviour entirely by having TextSources start returning nil, false again.

Option 2 (Managed by Roblox)

Roblox adds a way to make a TextChannel shared across all servers out of the box.

  • Could simply be a boolean property on the TextChannel, and some kind of unique identifier to represent the channel.
  • Roblox can keep track of the users in a text channel across all servers and potentially invoke ShouldDeliverCallback in the sending and receiving servers to allow developers to cull messages that don’t need to be delivered across servers (it’d likely be beneficial in this case for developers to be able to identify both that a TextSource is originating from another server, and what server the player is in)
  • Roblox could also implement chat persistence across teleports for these channels if they wanted to do so which would lead to a more cohesive experience

Considerations

  • Would probably need its own budgets & considerations for how to reduce and optimize bandwidth when sending many messages to many servers, which would pose additional complexity and cost
    • It is worth nothing that a shared channel seems almost 1:1 analogous to a MessagingService topic to me down to subscriptions/publishing
  • TextSources would still need to be created, but, the potential problems above would be avoided by restricting this capability to the engine.
  • Less control for developers, but doesn’t add any new surface area for abuse that has to be considered (and still leaves options for the above)
  • Would allow for more fine-grained UI support (e.g. clicking users names to message them in the in-app PMs listed on the roadmap)

c.c. @Photoguy82, I think you’re the right person to mention

5 Likes

After testing, I found that metadata limit is 200 symbols. Enough to fit 15 chat tags which contain color data. Or 27 fonts, or 48 bold/italic/underline/striketrough formattings.
cCM>♫♫↔ F§☼ cCMEJ♫→☼ F§► cCMMJ♫→► F§◄ cC♫↔J♫↑◄ F§↕ cC♫↔MM↓↕ F§‼ cC♫◄MM↑‼ F§¶ cC->◄M→¶ F§§ - I don’t think that there’s any more compact way to store this (1 symbol - type of formatting, 2 symbol - type of stored format - C = RGB, H = HEX (not unified due to some complexities of re-applying), 3-6 - HEX code)

You will update the documentation for the new chat service, and you will also provide an equivalent for all of the functionality that the legacy chat service offered. Failure to comply with this requirement will result in us refusing to migrate.

4 Likes

Same opinion here. Roblox needs to actually fix and update features before getting rid of the better version prior. I personally can’t use TextChat because for me it has alot of bugs and alot of ui issues related to my client.

1 Like

the worst update after audio asset privacy update 2022, you made us all so ““proud”” of you once again, roblox! :star_struck:

6 Likes