There is currently no good way to hide bubble chats from specific players client-side with the new TextChatService system. There are two ways I’m aware of:
Moving the character to a far away location. This is bad because it interferes with replication of the character’s position: after being “unhidden” the character’s position will be out of date until the player decides to move their character again. Also we can’t selectively hide bubble chats without also hiding the character.
Change the BubbleChatConfiguration.AdorneeName for all players and add a client-side custom bubble chat adornee part to every player character. Then to hide/show bubble chats the part is moved far away. This is a lot of extra work and a potential source of bugs. Also it doesn’t account for the size of accessories or other stuff like that - we can do that manually of course, but it’s more unnecessary work.
It would be nice to have something that lets us quickly turn bubble chats on/off for a specific player or adornee. Ideally we should be able to toggle this hiding state without losing bubble chats, so if a player goes in and out of this hide state quickly then the original bubble chats will still be visible afterwards.
The new TextChat system is missing needed features, and the old LUA Chat System is complicated to use AND will eventually be depreciated. I have submitted bug reports and feature requests and they say that they are working on it, but I couldn’t wait. So I wrote my own chat system. It works quite well, uses simple / commands (including whisper), has a channel display, and other features. I have not implemented bubble chat though. My system does implement the Roblox mandated filtering for user safety and chat logging. I’ve tested it and it does work. I have also implemented a role system so a player must have a certain role in order to execute certain commands.
The big problem with bubble chat is that even private messages show up in bubbles so your private messages aren’t exactly private. This is a big issue when you consider games that have team play and if an opposing team member is close enough, they can read your chat bubble.
The Chat bubbles are locked behind CoreGui protection, so it’s impossible for us to edit the BillboardGui to set its Enabled property to false.
Not saying that it is bad to have CoreGui protection on as malicious developers can modify the bubbles to have it display inappropriate text… but that also could have also been done with the old ChatGui system.
It makes no sense to not have us the freedom to control the chat bubble display for TextChatService.
Was trying to implement this today and I was utterly baffled to find that there is no way to prevent a chat bubble from appearing through the OnBubbleAdded callback. It seems like a no-brainer to add.
The only true way to prevent a specific bubble from showing up is to return anything other than a BubbleChatMessageProperties, which prints out a warning.
Until this actually gets added for real, I’m going to be using this abhorrent workaround which involves using the Codyface font due to how light it is:
If you’re good at coding, my suggestion would be to just discard the Roblox chat system (old and new) and write your own like I did. I got fed up waiting for Roblox to fix their problems with it, which they don’t seem to be doing. I recently implemented chat bubbles. They display for the local player only. So a private message remains private, even if it’s on a chat bubble. The server side code was relatively straight forward. The client side was a bit of a challenge though, but I got it to work.
For some reason changing the BackgroundTransparency doesn’t do anything for me. So I resorted to making a UIGradient with its Transparency set to 1, and parenting it under BubbleChatMessageProperties
local props = Instance.new("BubbleChatMessageProperties")
local gradient = Instance.new("UIGradient")
gradient.Parent = props
gradient.Transparency = NumberSequence.new(1)
--[[props.BackgroundTransparency = 1
props.TailVisible = false (these two dont anything for some reason?)]]
props.TextSize = 0
-- codyface font
props.FontFace = Font.fromId(12187363887, Enum.FontWeight.ExtraLight)
return props
Unfortunately the result isn’t perfect, the chat bubbles are somewhat visible for a split second. But it’s better than nothing I guess.
Putting a very tall invisible part welded to the player will also move the chatbubble far far far far up and if it’s tall enough it’s out of sight, but this is a bit of a weird solution.