As BetterChat V4 is no longer being maintained, I am doing my best to customize this for experiences of my own - and I want to share the updates I make. @Jumpathy wanted someone to continue the project, which I am doing my upmost to help keep it going. Please be aware the code is extensive, intimidating if you are not used to advanced Lua and is extremely complex. Bugs will be prevalent as the project is unfinished.
As of post creation, I have:
Resolved Bugs
Deleting the first message in the chat will cause next messages to not appear at all.
New messages not appearing when Adonis loads.
Deleting messages and reacting to messages failing when Adonis loads.
Added Features
Setting the username color in the chat window.
Adding rank prefixes for groups that use them (e.g. [O] Owner).
Added icons for ranks in groups using Decals/Asset IDs. Yes, these are actual images.
Please do get involved if you can, everyone loved BetterChat V3 before it broke and we cannot let this amazing framework slip through the cracks!
Reply Context! If you are replying to a message, a new dialog appears under the chatbar displaying who/what you are replying to. This is helpful so you don’t accidentally reply to the wrong message!
Periodic bug where your message is sent twice, only seen when it’s the first message in the channel. This has been fixed with a debounce timer of 0.5s, more of a “band aid fix” for now.
First message in the channel being replied to will cause BetterChatV4 to think it is part of a bubble thread (it’s not).
Reply context showing [] if you did not set up Group compatibility when replying to a message - Fixed.
Message scroller overlapping with the chatbar - turns out the scroller needed the extra padding, not the chatbar, when adding the reply context UI element!
Message wrapping! Your messages will now wrap in the window properly! Wrapping the bubble above the player’s head is still in progress (the positioning is also way off).
Message input is limited to 120 characters - this is to prevent spam, major issues with dimension calculations and general conversational circumstances.
Debounce timer for duplicated messages increased to 1 second from 0.5 seconds. Duplicated messages were still observed with the shorter timer.
Still to be resolved
Reactions - you can spam them, and react with far too many emojis both in total and per person.
“Save” feature - potentially going to be repurposed.
Bubbles above player heads not wrapping (these are called Billboard GUIs).
In this present release, the Save feature is not enabled. We are still deciding whether to proceed with this feature or repurpose it. We are also deciding on adding more emojis with a selection window - for now this button does nothing.
Huge credit to @kingarif275 for the work on this release.
How to hide the chat ? because using mobile i cant even hide the channel text tab, makes player on mobile cant even walk, and the config very confusing.
Was really hoping this was a custom chat that doesn’t rely on roblox’s API to bypass their age segregation. Is there any chance you can tell me what part of the scripts to modify to fix that? would save some time
Yes i am aware it is against ToS, no i do not care.
It is impossible to not use roblox’s api, without breaking ToS. Previous chat systems used TextFilterResult:GetChatForUserAsync(), which now returns an empty string. There are other methods of TextFilterResult, but they are for non “chat” messages, and you very much shouldn’t replace the deprecated one with these
What you should use is TextChannel:SendAsync(), which will be much safer for your community, by preventing players from chatting. Can’t get any safer than that
I don’t know how safe GetNonChatStringForUserAsync() is, if it prevents players from chatting or not
Thank you for the answer! however you seem to have not read the part of my reply that said “i do not care”. I am looking for a good custom chat that doesn’t use roblox’s APIs because those will adhere to their new Chat Segregation, the APIs for nonchat strings is good enough if roblox decided to deprecate the chat one.
I was mainly hoping if someone could give me some advice on how to convert the system to that instead of spending days modifying it but i guess i’ll have to do that anyways.
If you take one of the new chat systems, that uses TextChannel:SendAsync(), the TextChannel:SendAsync() method is very different to the TextFilterResult methods that older chat systems used. :SendAsync() does the whole client → server → client network stuff, filtering and doing other stuffs along the way. TextFilterResult:GetChatForUserAsync() was more like a simple filtering function, and is very similar to :GetNonChatStringForUserAsync(), so much so that swapping one for the other would probably just work. (Though this would be a very very bad thing to do, that you definitely should not do, because it would be very very bad. Very very bad)
The lua chat system (legacy chat) used TextFilterResult:GetChatForUserAsync(), Better Chat V3 probably did as well, and likely others that I do not know of. If the chat was very old, it probably used the even older and also deprecated Chat:FilterStringForPlayerAsync() method
Yeah i’m sure, mainly trying to experiment how much you can get away with before roblox actually bans you for it. i’ve seen games that bypass the APIs not be banned so there u go.
My replies were sarcastic, I don’t care :P, as long as you are aware of the implications
Basically :GetNonChatStringForUserAsync() or :GetNonChatStringForBroadcastAsync() is your best bet, by replacing :GetChatForUserAsync() in an older chat system