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
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
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)
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.
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!”
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.
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.
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
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.
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.
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.