WinryChat 1.5 | Open-Source Multi-Platform Chat UI for TextChatService


Example Place    WinryChat Model - Creator Store

Version: 1.5.0
Latest Patch Notes

Special Thanks to:
@Ebonhelm - EN-US Dictionary Proofreading & Assistance
@TigerValdos - Live Testing & Initial Funding


Features

  • 38 Unique Settings

  • Drag & Drop Theme Support + Theme Scripting Support

  • Integrated Gamepad Support with Virtual Keyboard
    Tested with XBOX, PlayStation and Nintendo Switch Pro Controllers via USB-C on Windows.

  • Complete Luau Documentation & Comments
    Documentation can be found at Chat/ChatSettings and Chat/Theme/NOTICE
    Luau Comments are provided in All Scripts.


No-Attribution License

Developers are not required to credit or otherwise refer to WinryChat. You are free to do anything, including (but not limited to) the modification and redistribution of WinryChat. Use of WinryChat as a direct-reference resource for source code is also permitted for any other chat systems without accreditation.

Disclaimer of Distribution

In return for the limitless use of WinryChat, outside of the original format(s) supplied above, we do not retain any responsibility or liability as open-source developers for modifications to or alternate distributions of WinryChat by third-parties and can in no way guarantee that every version will work as described in the original distributions’ documentation. If any problems occur with the original distribution, developers may notify us via this post or in direct messages and we will work with all reasonable action to resolve them as part of ongoing patches and updates if possible.


Information

How WinryChat Works

WinryChat searches through (and listens for new) descendants in TextChatService to get TextChannels and TextChatCommands.

  • When a player is added to a TextChannel, a new view and channel button are created for the player.

  • When a player is removed from a TextChannel, the view and channel button are cleaned up, then deleted.

  • If a Text Channel is given a Default tag (via Luau or In Studio), it is treated as the first channel a player should see when joining the game.

  • If a Text Channel has a LayoutOrder (number) attribute, that number is then used to set it’s order in the Channels List.

Default WinryChat Shortcuts

Since Version 1.4, developers can now have the option to change the shortcuts for WinryChat. This includes the ability to enable and disable Gamepad Support for WinryChat. Chat Shortcuts can also be

For PC/Keyboard Users, the default shortcuts are:

  • Toggle Chat Visibility: Z
  • Focus Text Box: /

For Controller Users, the default shortcuts are:

  • Toggle Chat Visibility: DPad Down
  • Focus Text Box: DPad Up

Focusing the text box should open an On-Screen Keyboard for most platforms (XBOX, PlayStation, Android, iOS), but this isn’t always functional. In our case, we found out that ROBLOX for Desktop didn’t have an on-screen keyboard for testing… so we made our own! WinryVirtualKeyboard has been designed as a universal On-Screen Keyboard, with it’s debut example being here in WinryChat.

Setting Up Winry Chat

The new Chat UI can be found at StarterGui.PlayerChat.Chat and can be copied or moved anywhere without interference. You can also customize the appearance and behaviour of WinryChat using the list of attributes attached to the Chat UI - see Chat/ChatSettings for the full documentation.

You can also find the latest version of WinryVirtualKeyboard - an On-Screen keyboard implementation alongside WinryChat in StarterGui.PlayerChat.OnScreenKeyboard. Both are maintained and improved together.

Example Themes
THA Theme Images




Light-mode Theme Images




Setting Up Chat Command Autocompelete

Text Chat Commands are automatically setup by the Autocomplete system, if AutocompleteEnabled is set to true. Autocomplete for Arguments is also supported.

WinryChat’s Autocomplete feature is also dynamic. It will show any TextChatCommand and it’s arguments if the AutocompleteVisible property is set to true, even if this is changed after it’s setup. This allows for the visibility of commands to be changed when a player is granted admin, or developer, status in-game (or if permissions are revoked).

Setting up Arguments for Autocomplete

Any type is supported for Argument Autocomplete, however, only boolean and Player types provide a list of buttons for autofilling values. Additionally, the byte type provides a custom message instead of the default message. This will expand over time.

  1. Create a new NumberValue instance as a child of your TextChatCommand.
    image

  2. Set the Name property of the new NumberValue to that of the name of the argument.
    image

  3. Set the Value property of the new NumberValue to that of which argument it is in line. This can start at any number. So long as the order of arguments is correct, WinryChat will handle the rest for you.
    image

  4. Add a new attribute called Type, with it’s type set to string. WinryChat will use this as the expected type if applicable. Then set the attribute’s value to the desired type, which will be Player for this example.


    image

If set up correctly, you'll see either:


Alternatives

This section will be updated over time, as more resources are brought to my attention.


Final Notes
If you have any features to suggest, or find any bugs, please leave a comment and we’ll try to respond with either a fix or update for you. We want to make a reliable system that anyone can use in their workflows.

ASSET ATTRIBUTIONS

While we ourselves don’t require any specific accreditation, we cannot be sure of that of the Audio Effects we’ve used in place of our privately used ones. The placeholder UIClick, UIOpen and UIClose sound effects have been uploaded by ROBLOX, Z9R and ProSoundEffects.

If these assets require unique licenses, and you wish to use them, you may need to contact the individual owners.


31 Likes

Super cool! This works flawlessly, I like the work you have contributed.

4 Likes

Thank you!

We’re actively looking for feedback on WinryChat too. Anything that can help the experience feel better for developers and users alike. We really want to prioritize a smooth, easy chat experience for a variety of devices.

1 Like

I really like the way this module is build, if I find any bugs or inconsistencies I’ll let you guys know! :smiley:

1 Like

We’ll release more open-source technologies when we can!

We’re digging into how ROBLOX’s UI/UX works, how common interactions and reactions occur in ROBLOX’s UI/UX and similar happen. We’ve got a few ideas already and we want to make a manual for editing WinryChat exists as soon as we can ensure a high quality of a production-ready PDF/AFPUB file can be released.

We’ve integrated ROBLOX’s new intellisense-like features as a starting point for documentation, and hopefully it will improve over time so that we can push how much we can communicate to developers further.

1 Like

Winry Chat - Update Log for Version 1.1

Hello? Hello Hello? Uh, I wanted to record a message for you guys- ahem. Anywayyyy, yes this is still in development. I’ve been very busy this christmas season tending to quite a few projects and gatherings! But Winry Chat is still chugging along and there are plenty of bugs I wish to address over time.

I will say that I recommend this chat system right now if you plan to use custom chat channels instead of ROBLOX’s defaults. However, for default chat, there seems to be an issue that’s spawned in due to recent updates to ROBLOX’s default channels causing RBXSystem and RBXGeneral to behave strangely and I need more time to investigate that (sorry!). Right now, there’s only a few changes while I get back in the saddle.


New Settings (Attributes)


ClearTextBoxOnFocus : Boolean
Changes whether the text box is cleared or not when using the keyboard shortcut for focusing chat or clicking on the text area of chat. Default: True

FocusChatKeyCodeId : Number
Changes the keybind used for focusing chat. The keybind is also displayed (by name for now) in the PlaceholderText area of the TextBox. Using integers, as listed in KeyCode is the only way to currently get this in. Properties Window says that we can use EnumItems. I don’t know if this is working or not because I can’t see a KeyCode option myself in the new beta or legacy Studio UIs.


New Functions


GetKeyCodeIdAsEnumValue : (number) → (Enum.KeyCode)
Returns the Enum.KeyCode value, if one exists for the given id.


Old Verisons


If an update to WinryChat does somehow break a feature or something you were using previously. We’ll still keep old versions stored in their own corresponding folder here:
image

We don’t go around with the intention to break things (at least I think not), but sometimes things go sideways and a backup plan is always a good option.


These changes should be live now!

2 Likes

Winry Chat - Update Log for Version 1.2

This is a small update to address a missing feature and a bug that occurred from a oversight. Players will now see a small circle next to chat channels they aren’t viewing, if a new message has been sent to the chat channel. Developers now have the option to auto-hide the chat if the local player doesn’t have any channels to view or type in.

Unread Messages - Default Appearance

On an important note: WinryChat will no longer be recommended for users looking to only change the chat appearance while retaining the default ROBLOX Chat channels. It’s heartbreaking to me to say that, and hopefully this is only temporary, but the Default Chat Channels keep breaking and I am unable to reliably reproduce and isolate the bug. This issue hasn’t been reproducible so far with custom chat channels created by developers.

If you find a fix, please let me know immediately. I would love for the full set of default channels to work as intended.


New Settings (Attributes)


AutoHideChatIfPlayerIsInNoChannels : boolean
If the player isn’t in any chat channels, this determines whether or not to hide the chat channel to prevent confusion from players. Default: True

UnreadMessagesSymbolColor : Color3
Changes the color of the unread messages symbol next to a chat channel’s name, which appears when a channel receives a new message. Default: 10, 185, 225


Bugfixes

  • Fixed an error message that would occur when a player tried to send a message through WinryChat when the player wasn’t added to any channels. Instead, the player will not be able to send a message. If you wish for the player to not see any chat, in the event they can’t view a channel or send messages in a channel, then set AutoHideChatIfPlayerIsInNoChannels to true.

  • The default keybind for FocusChatKeyCodeId has been reverted back to 47 for Slash “/”, instead of 53 for “5”. This was for testing purposes only and wasn’t reverted in Version 1.1 for public use by mistake.


These changes should be live now!

1 Like

Love the slick modernize design! Well done and keep up the good work

1 Like

really cool module, any plans to continue expanding it yourself or is it a free for all
having chat rescale and drag and drop theming would be cool, rather than attributes, module script perhaps

other than that, really good base for a chat system, might use it

1 Like

We plan to do these things over time.

WinryChat is actively expanding as and when we can facilitate resources to it, and there are some issues (notably documentation) I’d personally like to work out with the code.

Looking forward to it!
There are many new systems out there and this could be one of the best.

1 Like

Thank you!

We’ve developed the system in the scope of clanning, but the goal is to release more systems that we’re developing for completely free. As we speak, WinryChat Version 1.3 is already in development from internal and external feedback.

And if anyone’s curious or suspicious as to why this is free: We want feedback, suggestions and perspective from everyone, so that we can improve our tools for our own community, other communities and improve how we build our internal (clan-specific) and free tools. That’s the trade we look to make with the games development community.

We’re testing the drag resize feature now, while we test something relating to TextChatCommands. Drag and Drop Theming is something that may take more time, due to complexity, but here’s some testing images!



We are also working out some issues where the application losing focus keeps the dragging enabled. But this will be shipping with WinryChat 1.3 on your request! (It’s also just handy to have in general.)

1 Like

looks really good, good job!
Let me know when this is public

2 Likes

It’ll be out with the next release. There’s also safeguards built in for a minimum size and restraining the chat window to within the Viewport. This includes a new setting for a Safe Zone if you want some padding between the bottom right corner and the drag resize UI.

Of course, the issues with making drag-and-drop theming is the amount of settings provided to users. So that would take more time, if it is even possible with the existing logic. In the mean time, we’ve been reworking how the settings are applied. We want to make way for a settings panel for users can try out custom themes with in the future (and a developer setting for enabling or disabling custom theming).

1 Like

Winry Chat - Update Log for Version 1.3

Happy New Years folks! We intended to ship this yesterday, yet the Autocomplete feature couldn’t be completed in a single 4 hour sprint… so it took another 4 hour sprint today to debug and address that feature in a way that integrated nicely with the chat.

Our goal with WinryChat as an open-source utility is and always will be the same: Minimize Impact on Developer Workflows.


New Features


  • Drag Resizing (Feature Request) We understand the importance of being able to see and resize your chat window, especially for those moments where someone spills the tea. So, we made it a top priority to get this in first for developers.

  • Autocomplete for Command Arguments (Internal Request)
    Something missing from our server manager, Winry, was the ability to display information for TextChatCommand arguments. While we considered it as an internal feature in settings or in a separate panel, that just wouldn’t cut it. With some careful considerations, we found a way we believe to be unobtrusive to developers’ workflows for this feature.


New Settings (Attributes)


DragCornerColor : Color3
Changes whether the text box is cleared or not when using the keyboard shortcut for focusing chat or clicking on the text area of chat. Default: (10, 185, 255)

MaxResizeSafeZone : Vector2
An offset in pixels from the viewport’s bottom right corner to limit resizing to. Default: {16, 72}


New Functions


BindDragResizeFeature : () → ()
Binds functions to UserInputService and the DragArea (ImageButton) so that players can use the new Drag Resize feature.

CreateCommandInfoForAlias : ( {} , string, {} ) → (ChatCommandInfo)
Consolidated the creation of command info for command aliases into one function, so that redundant code is reduced. First and Third Arguments are custom types with names too long to keep this on a single line.

SetAppearanceAndBehaviourFromSettings : () → ()
Refresh the appearance and behaviour of the Chat UI from it’s settings attributes. This has been added ahead of time, for when we can find an appropriate way to integrate a settings panel for custom theming.

SetInteractableState : (boolean) → ()
Set the interactable property of the Chat Channels list, Channel View and Input Area.


Bugfixes


  • Fixed an issue where MessageTemplate was requesting an attribute called TextMesageFont and not TextMessageFont.

  • Fixed a few conditional statements and added more object clearing / destruction steps where appropriate to prevent memory leaks.

  • Fixed the initial Interactable state of Chat UI elements. Core elements were not reverted to true after testing the dragging feature.


These changes should be live now!

If you’re reading this a few minutes after it’s posted, we’ll be updating the initial forum post to be reflective of the new version. We will also add additional information on how to specify information to display for an argument of a TextChatCommand, so that it can appear with our Autocomplete.

[Update]: We’ve rewritten the original post to reflect the changes, and provide better documentation.

@Wertyhappy27 - Here’s Version 1.3 for you too!

1 Like

As a Ui designer myself, that is very good!
Keep up the great work, looking forward to it! :grin:

2 Likes

Thank you!

We’ve brought our internal version of WinryChat 1.3 up to parity with the open-source version now, and are doing some bug hunting in a live production (good for case studies too). A few small patches to the open-source version should roll out for the argument autocomplete.


Update: This seems to be specific to our project’s object creation pipeline, but if we can identify a cause that’s caused by WinryChat’s scripting, we’ll push a patch as soon as possible.

2 Likes

Hello, I was just wondering but does WinryChat have a community server we can join for support or live discussions?

Hi, Iris!

We didn’t previously consider a community server for WinryChat, as it’s an independent system from our main server system. These were developed in house for The Horizon Ascendancy. We’ll look at creating one, though given the original community space our projects come from, this may take a while.

I’ll discuss with TigerValdos on how to approach this request, as there’s moderation & user/staff safety to setup too. In the mean time, I can try my best to answer your queries.

– May / extraclear

1 Like