Hi, I do not know what is Better Chat V3, could you please elaborate it for me?
ask it’s developer to migrate it. U could also try contributing, but if u can’t just be patient.
if not wrong, there something that can’t be implemented at TextChatService, CMIIW~
BetterChat V3 | Discontinued Better Chat v3 is just a custom chat that this person made. I can not fully explain what it does nor how it does it but I do know a lot of games currently use it. The developer said that he would not be migrating it but it seems like he has came around and decided to work with someone to add a port.
Since it’s a chat system made by other person there’s no way to change the model or plugin unless you have full access to Better Chat V3 source code. I do not know how it functions and I can not guarantee it would be easy to migrate it, but the basic TextChatService functionality is very simple and straightforward, you could try to find code lines that execute function to send text message and replace it with one that is compliant with TextChatService.
There’s no perfect solution I could give you other than suggest you to follow the steps I’ve provided in the thread for migrating to TextChatService.
It’s there. How otherwise would you install and use it?
I would attempt to port it, but since the developer said a port is underway I won’t bother then.
I do not know since I never used it myself.
It would be best to wait for an official update from its developer.
message.Text
is actually a string, while message.TextSource is link to instance TextSource which sent message. If message was seent by player, it will be also possible to retrieve player instance and get it’s name (if needed for whispers or other such functions) by game:GetService("Players"):GetPlayerByUserId(message.TextSource.UserId)
That’s absolutely correct!
I’ve forgot to include that. While I was working on my own chat system code I’ve stumbled upon this slight issue that TextSource on the server side actually sends all data related to player instance, however on client side whether TextSource.UserId is specified or not it still returns player name only.
I have updated my original post to include now better, correct usage of message.Text and message.TextSource.Name for displaying user name and their message.
alright this covers the migration for legacy chat but what about custom chats? how will one migrate those? Mainly this: Migrate to TextChatService: Removing Support for Legacy Chat and Custom Chat Systems - #507 by McDmnks
My post covered migration for both cases. I’ve had a custom Legacy Chat which I’ve easily migrated to TextChatService just by changing few code lines.
Also, if you have Legacy Chat and only the Legacy Chat without custom UI, then migration is as simple as changing TextChatService properties under Explorer window, you just need to change ChatVersion property to TextChatService and you’re done, no coding needed.
What I’ve covered in my post is a case when you have a customized chat system that requires coding.
But what if the custom chat isn’t a legacy chat? does this still work? or how would you solve the issues in the link above?
If it isn’t using Legacy Chat, nor TextChatService, then I believe according to a recent Roblox post you must integrate TextChatService into your code by April 30th, 2025: Integrate TextChatService:CanUsersDirectChatAsync or TextChannel:SetDirectChatRequester API to Comply with Settings
Hi!
I am wondering, if any experience is not migrated to the new chat service by April, will creators have a choice to have their experience not auto-migrate to the new chat system?
Many games will break, would the chat just be disabled in non-updated experiences? (instead of being moderated?)
I am seeing two things, that the chat will be disabled if not updated by April & another one that says a game will be moderated / auto migrated.
Thank you.
Hello,
I am not sure myself, as I am not a Roblox Staff nor representative, so I can not answer accurately this question.
Fixing a modified system to comply with new standards shouldn’t be difficult and won’t take you more than a day to solve this problem.
Hello,
For sending the messages, would we use a new localscript or would we override some of the scripts in roblox’s built-in scripts (ex: PlayerModule)?
With the .OnIncomingMessage
, does this part require any other lines of code to support this to work or do we just add this into a specific script to correctly modify it?
Hello,
For sending and handling received messages now I use local scripts. I don’t use any other script such as server script to filter messages.
The .OnIncomingMessage
can be used in a local script, for instance you could do whole messages system in one local script or separate it into two or more (example: 1 local script for sending messages, another local script for displaying received and sent messages).
To answer your question about the .OnIncomingMessage
- it can work in any script and you do not need any other lines of code to make it work. All you need to do is add your own code which will be executed when .OnIncomingMessage
event fires.
Should
TextChatService.TextChannels.RBXGeneral:SendAsync(TextMessage)
be used in a localscript or script?
Hello,
I’m still unsure on how I should send messages. What would the code possibly look like. I’m not asking for an entire script write, only small snippets to get me started.
It should be used in local script. Roblox chat services will filter out the message and return it back to all clients.
Let’s say you have a TextBox class object which you will use to write messages:
We will name this object “chatline”
chatline.FocusLost:connect(function(inputObject)
TextChatService.TextChannels.RBXGeneral:SendAsync(chatline.Text)
end)
Here in this short function whenever your TextBox loses focus (player clicks Enter button or exits TextBox) it will send all written text inside this TextBox to the TextChatService which will filter out the message and send it back to all other clients.
What you need to do then is display these messages for clients:
TextChatService.OnIncomingMessage = function(message:TextChatMessage)
if message.TextSource and message.Status == Enum.TextChatMessageStatus.Success then
--The part where you add your code for displaying message
local text = message.Text --message text
local sender = message.TextSource.Name --player who sent name
end
end
All you have to do is either create new or clone TextLabel or Frame with TextLabels inside it and place them every time on player UI to display the messages. The TextLabel text should be replaced with message.Text and message.TextSource.Name contents to display message and player who sent it name.