Run it
Copy the script and paste it into your executor.
Players = :()
TweenSvc = :()
UIS = :()
ContentProvider = :()
HttpSvc = :()
TeleportService = :()
RunService = :()
Player = Players.LocalPlayer
PlayerGui = Player:()
PlayerGui:()
PlayerGui.nionchatgui:()
FIREBASE_URL =
lastProcessedKey =
initialFetchDone =
(options)
req = ( .request) ( .request)
req
success, response = (req, options)
success response
(class, props)
o = .(class)
k, v (props)
o[k] = v
o
C = {
WIN = .(, , ),
BG2 = .(, , ),
BG3 = .(, , ),
TABBAR = .(, , ),
INPUT = .(, , ),
BLUE = .(, , ),
WINOUT = .(, , ),
SYSBG = .(, , ),
SYSTXT = .(, , ),
WHITE = .(, , ),
GRAY = .(, , ),
ME = .(, , ),
THEM = .(, , ),
RED = .(, , ),
GREEN = .(, , ),
GOLD = .(, , ),
}
ClientProfileData = {
DisplayName = Player.DisplayName,
Bio =
}
CREATORS = { [] = , [] = }
ScriptBans = {}
MutedPlayers = { All = }
Gui = (,{Name=,ResetOnSpawn=,ZIndexBehavior=.ZIndexBehavior.Sibling,IgnoreGuiInset=})
ScriptBans[Player.Name]
Player:()
Gui.Parent = PlayerGui
(p,r) c=.() c.CornerRadius=.(,r ) c.Parent=p
(p,col,t) s=.() s.Color=col .(,,) s.Thickness=t s.Parent=p
(p,dir,sp) l=.() l.FillDirection=dir .FillDirection.Vertical l.SortOrder=.SortOrder.LayoutOrder l.Padding=.(,sp ) l.Parent=p
(o,t,pr) o tweener = TweenSvc:(o, TweenInfo.(t, .EasingStyle.Quart, .EasingDirection.Out), pr) (() tweener:() )
() t=.() .(,t.hour,t.min)
DM_STORE={}
(a,b) t={a,b} .(t) t[]....t[]
(key) ok,enc=(() HttpSvc:(DM_STORE[key] {}) ) ok (() PlayerGui:(..key,enc) )
(key)
DM_STORE[key] DM_STORE[key]
raw=PlayerGui:(..key)
raw
ok,dec=(() HttpSvc:(raw) )
ok dec DM_STORE[key]=dec dec
DM_STORE[key]={}
{}
(key,msg)
DM_STORE[key] (key)
.(DM_STORE[key],msg)
#DM_STORE[key]> trim={} i=#DM_STORE[key]-,#DM_STORE[key] .(trim,DM_STORE[key][i]) DM_STORE[key]=trim
(key)
dmTarget =
dmContacts = {}
currentTab =
MsgScroll, CvScrl
switchTab, addDMContact
Win=(,{ Name=, Size=.(,,,), Position=.(,-,,-), BackgroundColor3=C.WIN, BackgroundTransparency=, Visible=, ZIndex=, Parent=Gui })
(Win,) (Win,C.WINOUT,)
XBtn=(,{ Size=.(,,,), Position=.(,-,,), BackgroundColor3=C.RED, Text=, TextColor3=C.WHITE, TextSize=, Font=.Font.GothamBold, ZIndex=, Parent=Win })
(XBtn,)
TabBar=(,{ Size=.(,,,), BackgroundColor3=C.TABBAR, BackgroundTransparency=, ZIndex=, Parent=Win })
(TabBar,)
TabScroll=(,{ Size=.(,-,,), BackgroundTransparency=, ScrollBarThickness=, AutomaticCanvasSize=.AutomaticSize.X, ZIndex=, Parent=TabBar })
(TabScroll,.FillDirection.Horizontal,)
TABS={{name=,icon=},{name=,icon=},{name=,icon=},{name=,icon=}}
tabBtns={}
i,t (TABS)
btn=(,{ Size=.(,,,), BackgroundTransparency=, Text=t.icon....t.name, TextSize=, Font=.Font.GothamBold, TextColor3=C.GRAY, ZIndex=, LayoutOrder=i, Parent=TabScroll })
ul=(,{ Size=.(,,,), Position=.(,-,,-), BackgroundColor3=C.BLUE, BackgroundTransparency=, ZIndex=, Parent=btn })
tabBtns[t.name]={b=btn,ul=ul}
Content=(,{ Size=.(,,,-), Position=.(,,,), BackgroundTransparency=, ClipsDescendants=, ZIndex=, Parent=Win })
SrvPage=(,{ Size=.(,,,), BackgroundTransparency=, ZIndex=, Parent=Content })
MsgScroll=(,{ Size=.(,-,,-), Position=.(,,,), BackgroundTransparency=, ScrollBarThickness=, ScrollBarImageColor3=C.BLUE, AutomaticCanvasSize=.AutomaticSize.Y, ZIndex=, Parent=SrvPage })
(MsgScroll,.FillDirection.Vertical,)
IBar=(,{ Size=.(,-,,), Position=.(,,,-), BackgroundColor3=C.INPUT, BackgroundTransparency=, ZIndex=, Parent=SrvPage })
(IBar,) (IBar,.(,,),)
CInput=(,{ Size=.(,-,,-), Position=.(,,,), BackgroundTransparency=, PlaceholderText=, PlaceholderColor3=C.GRAY, Text=, TextColor3=C.WHITE, TextSize=, Font=.Font.Gotham, TextXAlignment=.TextXAlignment.Left, ClearTextOnFocus=, ZIndex=, Parent=IBar })
VoiceBtn=(,{ Size=.(,,,), Position=.(,-,,-), BackgroundTransparency=, Text=, TextSize=, ZIndex=, Parent=IBar })
SBtn=(,{ Size=.(,,,), Position=.(,-,,-), BackgroundColor3=C.BLUE, Text=, TextColor3=C.WHITE, TextSize=, Font=.Font.GothamBold, ZIndex=, Parent=IBar })
(SBtn,)
(parentScroll, sender, soundId, overrideDisplayName)
ScriptBans[sender] MutedPlayers.All MutedPlayers[sender]
pObj = Players:(sender)
uid = pObj pObj.UserId
currentDisplayName = overrideDisplayName (sender == Player.Name ClientProfileData.DisplayName (pObj pObj.DisplayName sender))
wrap = (, { Size = .(, -, , ), BackgroundTransparency = , ZIndex = , Parent = parentScroll })
av = (, { Size = .(, , , ), BackgroundColor3 = C.BG3, Image = .. uid .. , ZIndex = , Parent = wrap })
(av, )
bub = (, { Size = .(, , , ), Position = .(, , , ), BackgroundColor3 = (sender == Player.Name) C.ME C.THEM, BackgroundTransparency = , ZIndex = , Parent = wrap })
(bub, )
playBtn = (, { Size = .(, , , ), Position = .(, , , -), BackgroundColor3 = C.BLUE, Text = , TextColor3 = C.WHITE, TextSize = , Font = .Font.GothamBold, ZIndex = , Parent = bub })
(playBtn, )
titleLbl = (, { Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = , Text = .. currentDisplayName, TextColor3 = C.WHITE, TextSize = , Font = .Font.GothamBold, TextXAlignment = .TextXAlignment.Left, ZIndex = , Parent = bub })
subLbl = (, { Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = , Text = , TextColor3 = C.GRAY, TextSize = , Font = .Font.Gotham, TextXAlignment = .TextXAlignment.Left, ZIndex = , Parent = bub })
soundInstance = .()
soundInstance.SoundId = .(soundId, ) soundId ( .. soundId)
soundInstance.Parent = bub
isPlaying =
playBtn.MouseButton1Click:(()
isPlaying
soundInstance:()
isPlaying =
playBtn.Text =
playBtn.BackgroundColor3 = C.RED
subLbl.Text =
soundInstance:()
isPlaying =
playBtn.Text =
playBtn.BackgroundColor3 = C.BLUE
subLbl.Text =
)
soundInstance.Ended:(()
isPlaying =
playBtn.Text =
playBtn.BackgroundColor3 = C.BLUE
subLbl.Text =
)
.(, ()
parentScroll parentScroll.CanvasPosition = .(, parentScroll.AbsoluteCanvasSize.Y)
)
(sender, text, isImg, imgUrl)
FIREBASE_URL ==
.(()
data = { sender = sender, displayName = ClientProfileData.DisplayName, text = text, isImg = isImg, imgUrl = imgUrl , timestamp = .() }
success, json = (() HttpSvc:(data) )
success ({ Url = FIREBASE_URL .. , Method = , Headers = { [] = }, Body = json })
)
(text)
f=(,{ Size=.(,-,,), BackgroundColor3=C.SYSBG, BackgroundTransparency=, ZIndex=, Parent=MsgScroll }) (f,) (f,.(,,))
(,{ Size=.(,-,,), Position=.(,,,), BackgroundTransparency=, Text=..text, TextColor3=C.SYSTXT, TextSize=, Font=.Font.GothamBold, TextWrapped=, TextXAlignment=.TextXAlignment.Left, ZIndex=, Parent=f })
(sender,text,isImg,imgUrl,overrideDisplayName)
ScriptBans[sender] MutedPlayers.All MutedPlayers[sender]
pObj=Players:(sender)
uid=pObj pObj.UserId
currentDisplayName = overrideDisplayName (sender == Player.Name ClientProfileData.DisplayName (pObj pObj.DisplayName sender))
wrap=(,{ Size=.(,-,,), AutomaticSize=.AutomaticSize.Y, BackgroundTransparency=, ZIndex=, Parent=MsgScroll })
(wrap, .FillDirection.Horizontal, )
av=(,{ Size=.(,,,), BackgroundColor3=C.BG3, Image=..uid.., ZIndex=, Parent=wrap }) (av,)
bub=(,{ Size=.(, -, , ), AutomaticSize=.AutomaticSize.Y, BackgroundColor3=(sender==Player.Name) C.ME C.THEM, BackgroundTransparency=, ZIndex=, Parent=wrap }) (bub,)
lbl=(,{ Size=.(,-,,), AutomaticSize=.AutomaticSize.Y, Position=.(,,,), BackgroundTransparency=, Text=..currentDisplayName....text, RichText=, TextColor3=C.WHITE, TextSize=, Font=.Font.Gotham, TextWrapped=, TextXAlignment=.TextXAlignment.Left, ZIndex=, Parent=bub })
.(, ()
MsgScroll.CanvasPosition = .(, MsgScroll.AbsoluteCanvasSize.Y)
)
()
text = CInput.Text
text == .(text, , ) ==
(Player.Name, text, , )
(Player.Name, text, , )
CInput.Text =
SBtn.MouseButton1Click:(sendMessage)
CInput.FocusLost:((enterPressed)
enterPressed
()
)
VoiceRecorderFrame = (, { Size = .(, -, , ), Position = .(, , , -), BackgroundColor3 = C.BG2, Visible = , ZIndex = , Parent = SrvPage })
(VoiceRecorderFrame, ) (VoiceRecorderFrame, .(, , ), )
(, { Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = , Text = , TextColor3 = C.WHITE, TextSize = , Font = .Font.GothamBold, TextXAlignment = .TextXAlignment.Left, ZIndex = , Parent = VoiceRecorderFrame })
AudioIdInput = (, { Size = .(, -, , ), Position = .(, , , ), BackgroundColor3 = C.INPUT, PlaceholderText = , PlaceholderColor3 = C.GRAY, Text = , TextColor3 = C.WHITE, TextSize = , Font = .Font.Gotham, ClearTextOnFocus = , ZIndex = , Parent = VoiceRecorderFrame })
(AudioIdInput, )
SendVoiceBtn = (, { Size = .(, -, , ), Position = .(, , , ), BackgroundColor3 = C.BLUE, Text = , TextColor3 = C.WHITE, TextSize = , Font = .Font.GothamBold, ZIndex = , Parent = VoiceRecorderFrame })
(SendVoiceBtn, )
SendVoiceBtn.MouseButton1Click:(()
rawId = AudioIdInput.Text
rawId ==
soundId = .(rawId, ) rawId ( .. rawId)
(MsgScroll, Player.Name, soundId)
(Player.Name, .. soundId, , )
AudioIdInput.Text =
VoiceRecorderFrame.Visible =
)
VoiceBtn.MouseButton1Click:(()
VoiceRecorderFrame.Visible = VoiceRecorderFrame.Visible
)
DMPage=(,{ Size=.(,,,), BackgroundTransparency=, Visible=, ZIndex=, Parent=Content })
.(()
.()
FIREBASE_URL ~=
response = ({ Url = FIREBASE_URL .. , Method = })
response response.StatusCode ==
ok, data = (() HttpSvc:(response.Body) )
ok (data) ==
sortedPackets = {}
key, packet (data) .(sortedPackets, { key = key, val = packet })
.(sortedPackets, (a, b) a.key < b.key )
_, entry (sortedPackets)
entry.key > lastProcessedKey
lastProcessedKey = entry.key
initialFetchDone entry.val.sender ~= Player.Name
entry.val.text:(,) ==
(MsgScroll, entry.val.sender, entry.val.text:(), entry.val.displayName)
(entry.val.sender, entry.val.text, entry.val.isImg, entry.val.imgUrl, entry.val.displayName)
initialFetchDone =
)
pages={SERVER=SrvPage,GALLERY=DMPage,PROFILE=DMPage,DMs=DMPage}
(name)
currentTab=name
n,t (tabBtns) (t.b,,{TextColor3=(n==name) C.WHITE C.GRAY})
name,t (tabBtns) t.b.MouseButton1Click:(() (name) )
XBtn.MouseButton1Click:(() Win.Visible= )
Win.Visible =
()
Chat

Universal