BetterChat V4 | Continued Development

This is a continuation of BetterChat V4 | Early development - Help and Feedback / Creations Feedback - Developer Forum | Roblox - now discontinued by the original author. Credit to @Jumpathy for the original code.

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!

Maintained Fork
Original Repo

30 Likes

Release BetterChatV4 - v0.1 · ameasere/BetterChatV4

Git Repository updated for the changes highlighted above. For quick addition to your experience, please use the Releases tab.

4 Likes

Release BetterChatV4 - v0.1.1 · ameasere/BetterChatV4

Git Repository updated:

  • Attempt to index nil for createBubble resolved when replying to a thread.
  • Bubble stacking failing when your message contains more than one word.
3 Likes

Great to see a continuation, credit to @Jumpathy for making it open source

Edit: free and open source software are the best

1 Like

Release BetterChatV4 - v0.2 · ameasere/BetterChatV4

Git Repository updated:

  • 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!

Some bugs have also been discovered:

  • Periodic bug where your message is sent twice, only seen when it’s the first message in the channel.
  • First message in the channel being replied to will cause BetterChatV4 to think it is part of a bubble thread (it’s not).
3 Likes

Release BetterChatV4 - v0.3 · ameasere/BetterChatV4

Git Repository updated:

  • 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!

Release BetterChatV4 - v0.3.1 · ameasere/BetterChatV4

Git Repository updated:

  • 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).
  • Potential multi-channel support.
1 Like


Release BetterChatV4 - v1.0.0 · ameasere/BetterChatV4

Git Repository updated:

Bugs Fixed

  • Billboard text and bubble desynchronized. (@kingarif275)
  • Messages appearing over the window elements. (@kingarif275)
  • Numerous UI fixes. (@kingarif275)
  • Error dumped to console for a MessageBase that has 0 children but tries to access usual attributes.
  • Replying to a deleted message is no longer possible.
  • Replying to the System messages are no longer possible.
  • Scroller resizes to capture the most recent messages, not the oldest.
  • Bubble stacking fixed. (@kingarif275)
  • TextWrapped messages with multiple lines fixed. (@kingarif275)

Features Added

  • Hover resizing. (@kingarif275)
  • Color scheme changes and consistency. (@kingarif275)
  • Separated chatbar and additionalContext from the main window, now functioning as separate elements. (@kingarif275)
  • When a message is deleted or edited that you are replying to, the UI responds accordingly.
  • New context menu with animations. (@kingarif275)
  • More!

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.

3 Likes

Fun to be part of it !

Future updates gonna be lit fr

3 Likes

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.

1 Like

Config is pretty simple. There is no chat hiding functionality.

For some reason, when I try to simply put a custom emoji to the chat, this happens

1 Like

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.

Are you sure about that?

The chat one is deprecated


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

1 Like

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.

2 Likes

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

1 Like

any updates? Would love to use it but a lot of ui issues

The GitHub repository link is down/gone, does anyone know where else we can get the files?

1 Like