Updates to Chat Privacy API + New Account Indicators + Changes to Text Filtering APIs

I have a custom chat module for my game (That runs on the server) that broadcasts pre-recorded messages to all players (Eg. Player X won race Y with a time of 1.23!) As of this update (To my knowledge), the module breaks the entire chat system (All chat is blanked out with _'s). Is this something on my end, or Roblox’s end with speakers? I disabled the module, and the chat runs fine now.

Code under chat module folder in ChatService

local function Run(ChatService)
local speaker = ChatService:AddSpeaker(“Server Message”)
function script.message.OnInvoke(msg)
–speaker:SayMessage(msg,“All”)
end
speaker:JoinChannel(“All”)
end

return Run

You can blame me for that lol.

Sorry about this, there was a issue with how we handled non player messages. A fix for this should be coming out next tuesday. Until then you can use this version of ChatServiceRunner that includes the fix. https://www.roblox.com/library/676301521/Chat-Fixed-for-ChatBots

1 Like

I’m getting quite some reports about players being inable to see the chat bubbles above other players. Is this related to this update?

The new chatbubbles creates a significant delay when chatting, as opposed to the old chatbubbles - anything about locally simulating these chatbubbles unfiltered for the player, then showing the filtered result in their chatbubble when the chat is filtered for them? (so we at least can see our chat bubbles without delay)

2 Likes

Do you know what game this was happening in?

We could possibly do something like this. I think we would still wait for the round trip to the server but once the unfiltered message came back we would display that until the filtered message came back. This is because until the message is sent to the server we don’t know if it is a chat command.

1 Like

Could always have it be an animationg of 3 dots, like at the bottom of Discord when someone’s typing stuff. When it gets back, if it’s a message, display the filtered one. If it isn’t, just hide the bubble. Also a good indication to the user of “we’re doing your command, don’t worry!”

3 Likes

Yes, Kingdom Life™ II.

As a quick fix to this issue, can you add the following line to your ChatSettings file?

module.BubbleChatMessageTypes = {"Message", "Whisper"}

There should be an option to hide the “Under/Over 13 yrs” UI in the settings. If there is a parent PIN then the parent can decide to hide it or not, or force it to show on accounts with a parent PIN.

5 Likes

ChatSettings file? What are you referring to?

Are you referring to

C:\Users\myname\AppData\Local\Roblox\Versions\thisversion\content\scripts\Modules\Server\ClientChat\DefaultClientChatModules\ChatSettings.lua

I assume this would only fix it locally and only for myself, not for the players who play my game, or am I wrong?

Oh sorry, I mean ChatSettings module. In Chat. ClientChatModules. I presume that you have copied an old version of the chat. I think this bug can only happen in this case. Let me know if you don’t have an old version of the chat.

I can’t seem to find anything in the Chat service. It is completely empty. So as far as I know it should be inserting a new version of the chat, no?

1 Like

Run the game to automatically place the current version of the Chat Scripts in ChatService, copy and paste “BubbleChat”, edit it and then place the editted version under Chat

This privacy setting doesn’t really make sense.

image.png

You would think this only controls the actual web chat feature, but it also (incorrectly) dictates whether the user can make forum posts and group wall posts.

If this is set to Friends, the user can still make forum/group posts that are visible to everyone on the site. Forum/group posts should have a separate privacy option, otherwise it is misleading and still allows young users to communicate with strangers even if it was assumed that they could only talk to friends.

12 Likes

You now have three different functions to check wether a player can recive a message for another player.

if CanUserChatAsync(player1) and CanUsersChatAsync(player1, player2) then
msg = FilterStringAsync(msg, player1, player2)
end

Seems a little excessive to me, why not just return empty string or nil if player1 cant speak with player2?
If player1 can’t speak to anyone then always return nil.

Just a suggestion.

CanUserChatAsync is useful for making the chat not show up anyway.
CanUsersChatAsync is useful for checking if users are allowed to do whisper chat or not.
In both situations, they are still useful for preventing the UI for chatting from show up, and they are way cleaner and clearer than checking filtered strings.

Can’t you technically use FilterStringAsync for the purpose you’re describing anyway? It’s useful for your code to be explicit and clear so I would still use the CanUser(s)ChatAsync methods. If you don’t, then it’s not instantly clear in the code that string filtering may return blank, and what that would mean. You should probably be hiding the chat UI for players that can’t chat anyway.

The first check in your statement is unnecessary here.

The string will be empty if the users can’t chat, so if you prefer that then go ahead and simply check if the result is empty instead without checking CanUser(s)ChatAsync.

1 Like

Yes, that’s the point im trying to prove. How overly excessive this whole ordeal is.