WinryChat - Open Source (No License) is a new Chat UI for TextChatService designed for use in experiences that require ChatChannel support and more customization settings of the Chat UI than the default ROBLOX solutions allow for. We’ve open-sourced it completely for free.
- No License Required
- No Attribution Required
- No Forum Reply Required
- Feedback Optional (but helpful)
Current Version: WinryChat 1.3
This is a client-side only Chat UI. The management of Channels and Commands are left to the developer.
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 the “Appearance and Behaviour Settings” tab for more.
Appearance & Behaviour Settings
AudioFeedbackEnabled:
Whether or not to play audio when the Chat is opened and closed or a button is clicked.
AutocompleteEnabled:
Whether to enable the autocomplete feature to show TextChatCommands. This respects TextChatCommand.AutocompleteVisible.
AutocompleteResultBackground:
The background color that is used for autocomplete result buttons. Transparency is used for the mouse entering and exiting the button.
AutocompleteResultTextColor:
The text color to use for autocomplete result buttons. Transparency is used to show the typing progress.
AutoHideChatIfPlayerIsInNoChannels :
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
BackgroundColor:
The background color of the major elements of the Chat UI.
ChannelButtonFont:
The font (and style) to use for text channel buttons on the top row.
ChannelButtonFontSize:
The size of the font used for each text channel button.
ChannelButtonTextColor:
The text color to use for channel buttons. Transparency is used for the mouse entering and exiting the button.
ChannelListHeight:
The height (in pixels) of the list of text channels - the buttons at the top.
ClearTextBoxOnFocus:
Whether to clear the TextBox when the player uses the Focus Chat shortcut or clicks on the TextBox.
DragCornerColor:
The color to use for the drag resize corner.
FocusChatKeyCodeId:
The ID of a KeyCode to use as the Focus Chat shortcut.
InputAreaColor:
The color of the TextBox area.
InputAreaPlaceholderTextColor:
The color of placeholder text in the TextBox.
InputAreaTextColor:
The color of player-typed text in the TextBox.
MaxResizeSafeZone:
An offset in pixels from the viewport’s bottom right corner to limit resizing to.
ScrollbarColor:
The color of all scrollbars in the Text Chat UI.
ScrollbarTransparency:
The transparency of all scrollbars in the Text Chat UI.
SelectedChannelRibbonColor:
The color of the ribbon that highlights the currently selected channel.
SystemMessageSenderName:
The name to display as the sender of system messages.
TextFieldHeight:
The height (in pixels) of the TextBox area - the field at the bottom.
TextMessageFont:
The font (and style) to use for text messages sent in a channel.
TextMessageFontSize:
The size of the font used for each text message.
TextMessageTextColor:
The color of text messages.
UICornersEnabled:
Whether UI Corners are enabled on the CanvasGroup, TextBox and Autocomplete results (if AutocompleteEnabled is true).
UISpacing:
The spacing (in pixels) between each chat channel button, as well as between the list of buttons and chat view.
UIStrokeColor:
The color for the UIStroke around the TextBox and around each Autocomplete result.
UIStrokeTransparency:
The transparency for the UIStroke around the TextBox and around each Autocomplete result.
UnreadMessagesSymbolColor
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
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.
Autocompelete for Commands
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.
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.
Setting up Arguments for Autocomplete
-
Create a new
NumberValue
instance as a child of your TextChatCommand.
-
Set the
Name
property of the new NumberValue to that of the name of the argument.
-
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.
-
Add a new attribute called
Type
, with it’s type set tostring
. WinryChat will use this as the expected type if applicable. Then set the attribute’s value to the desired type, which will bePlayer
for this example.
If set up correctly, you'll see either:
- A list of buttons to select if this is a
boolean
orPlayer
type.
- A string asking you to input a valid value for the type:
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.
Context
If you’re wondering why we decided to do this (in the event there are multiple chat UIs like ours), the answer is simply both:
- We didn’t know, sometimes multiple people make different variations of the same idea.
- We were disheartened by the issues plaguing the default UI and felt like we had to do something.
During the development of Winry 4.1, a server system for clanning, we were hoping for ROBLOX’s Chat Channel support update to be completely functional. However, it was not. Channels you were not a part of would stay and you couldn’t customize everything we wanted to.
In response, after the rest of Outpost Gambit was already complete, we spent the last week before this Chat UI originally launched just writing, bugfixing and extending it so that we could have a reliable chat UI. Our goal was to keep it as vanilla as possible. To make things that we felt comfortable with, and could use for various projects without it being restrictive.
A week and a bit later, after approval from @TigerValdos, we felt it was at a point where we could open-source it for others to benefit from. And that’s where we are now.
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.