- -- // Notes:
- -- The emojis list is based from discord the list is here: https://raw.githubusercontent.com/Aidez/emojiscopy/master/main or https://pastebin.com/raw/719UsVji \\ --
- -- My code is ugly k dont read c:
- -- // Configuration, super simple: \\ --
- local config = {
- -- // Values should be "true" or "false" and make sure there's a "," or ";" after them. \\ --
- ['EmojiAutofill'] = true; -- Autofills potential emojis like :sungla with :sunglasses:, you can hit tab to fill
- ['EmojiReplace'] = true; -- Autofills emojis instantly after adding both ":"'s example: ":sunglasses:" will turn into "?"
- }
- -- // Main (no need to modify( \\ --
- if not game:IsLoaded() then
- game.Loaded:Wait()
- end
- local jsondecode = function(arg)
- return game:GetService("HttpService"):JSONDecode(arg)
- end
- local jsonencode = function(arg)
- return game:GetService("HttpService"):JSONEncode(arg)
- end
- local getchat = function()
- return {
- main = game:GetService("Players").LocalPlayer.PlayerGui.Chat;
- chatbar = game:GetService("Players").LocalPlayer.PlayerGui.Chat.Frame.ChatBarParentFrame.Frame.BoxFrame.Frame.ChatBar;
- messages = game:GetService("Players").LocalPlayer.PlayerGui.Chat.Frame.ChatChannelParentFrame.Frame_MessageLogDisplay.Scroller
- }
- end
- local scroller = function(obj)
- obj.ClipsDescendants = true;
- local Scroller = Instance.new("Frame")
- local CopyMessage = Instance.new("TextButton")
- local UIListLayout = Instance.new("UIListLayout")
- local CopyUser = Instance.new("TextButton")
- local DeleteMessage = Instance.new("TextButton")
- local Mute = Instance.new("TextButton")
- local Unmute = Instance.new("TextButton")
- local Tp = Instance.new("TextButton")
- Scroller.Name = "Scroller"
- Scroller.Parent = obj;
- Scroller.AnchorPoint = Vector2.new(0.5, 1)
- Scroller.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
- Scroller.BackgroundTransparency = 1.000
- Scroller.Position = UDim2.new(0, #obj.TextButton.Text * 14, 6.5, 0)
- Scroller.Size = UDim2.new(0, 206, 0, 99)
- CopyMessage.Name = "CopyMessage"
- CopyMessage.Parent = Scroller
- CopyMessage.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- CopyMessage.BackgroundTransparency = 0.500
- CopyMessage.BorderColor3 = Color3.fromRGB(27, 42, 53)
- CopyMessage.BorderSizePixel = 0
- CopyMessage.Position = UDim2.new(0, 49, 0, 50)
- CopyMessage.Size = UDim2.new(0, 200, 0, 15)
- CopyMessage.Font = Enum.Font.SourceSansBold
- CopyMessage.Text = "Copy message"
- CopyMessage.TextColor3 = Color3.fromRGB(255, 255, 255)
- CopyMessage.TextSize = 14.000
- CopyMessage.TextStrokeTransparency = 0.750
- CopyMessage.TextWrapped = true
- UIListLayout.Parent = Scroller
- UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder
- UIListLayout.Padding = UDim.new(0, 2)
- CopyUser.Name = "CopyUser"
- CopyUser.Parent = Scroller
- CopyUser.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- CopyUser.BackgroundTransparency = 0.500
- CopyUser.BorderColor3 = Color3.fromRGB(27, 42, 53)
- CopyUser.BorderSizePixel = 0
- CopyUser.Position = UDim2.new(0, 49, 0, 50)
- CopyUser.Size = UDim2.new(0, 200, 0, 15)
- CopyUser.Font = Enum.Font.SourceSansBold
- CopyUser.Text = "Copy username"
- CopyUser.TextColor3 = Color3.fromRGB(255, 255, 255)
- CopyUser.TextSize = 14.000
- CopyUser.TextStrokeTransparency = 0.750
- CopyUser.TextWrapped = true
- DeleteMessage.Name = "DeleteMessage"
- DeleteMessage.Parent = Scroller
- DeleteMessage.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- DeleteMessage.BackgroundTransparency = 0.500
- DeleteMessage.BorderColor3 = Color3.fromRGB(27, 42, 53)
- DeleteMessage.BorderSizePixel = 0
- DeleteMessage.Position = UDim2.new(0, 49, 0, 50)
- DeleteMessage.Size = UDim2.new(0, 200, 0, 15)
- DeleteMessage.Font = Enum.Font.SourceSansBold
- DeleteMessage.Text = "Delete (client)"
- DeleteMessage.TextColor3 = Color3.fromRGB(255, 255, 255)
- DeleteMessage.TextSize = 14.000
- DeleteMessage.TextStrokeTransparency = 0.750
- DeleteMessage.TextWrapped = true
- Mute.Name = "Mute"
- Mute.Parent = Scroller
- Mute.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- Mute.BackgroundTransparency = 0.500
- Mute.BorderColor3 = Color3.fromRGB(27, 42, 53)
- Mute.BorderSizePixel = 0
- Mute.Position = UDim2.new(0, 49, 0, 50)
- Mute.Size = UDim2.new(0, 200, 0, 15)
- Mute.Font = Enum.Font.SourceSansBold
- Mute.Text = "Mute (client)"
- Mute.TextColor3 = Color3.fromRGB(255, 255, 255)
- Mute.TextSize = 14.000
- Mute.TextStrokeTransparency = 0.750
- Mute.TextWrapped = true
- Unmute.Name = "Unmute"
- Unmute.Parent = Scroller
- Unmute.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- Unmute.BackgroundTransparency = 0.500
- Unmute.BorderColor3 = Color3.fromRGB(27, 42, 53)
- Unmute.BorderSizePixel = 0
- Unmute.Position = UDim2.new(0, 49, 0, 50)
- Unmute.Size = UDim2.new(0, 200, 0, 15)
- Unmute.Font = Enum.Font.SourceSansBold
- Unmute.Text = "Unmute (client)"
- Unmute.TextColor3 = Color3.fromRGB(255, 255, 255)
- Unmute.TextSize = 14.000
- Unmute.TextStrokeTransparency = 0.750
- Unmute.TextWrapped = true
- Tp.Name = "Tp"
- Tp.Parent = Scroller
- Tp.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
- Tp.BackgroundTransparency = 0.500
- Tp.BorderColor3 = Color3.fromRGB(27, 42, 53)
- Tp.BorderSizePixel = 0
- Tp.Position = UDim2.new(0, 49, 0, 50)
- Tp.Size = UDim2.new(0, 200, 0, 15)
- Tp.Font = Enum.Font.SourceSansBold
- Tp.Text = "Teleport To Player"
- Tp.TextColor3 = Color3.fromRGB(255, 255, 255)
- Tp.TextSize = 14.000
- Tp.TextStrokeTransparency = 0.750
- Tp.TextWrapped = true
- return Scroller;
- end
- local bindable = Instance.new("BindableEvent");
- local cache = {};
- local dependencies = {
- ['Emojis'] = jsondecode(game:HttpGet('https://pastebin.com/raw/719UsVji'));
- ['Chat'] = getchat();
- }
- local sendmsg = function(m)
- if dependencies['Chat'] then
- game:GetService("ReplicatedStorage").DefaultChatSystemChatEvents.SayMessageRequest:FireServer(m, "All")
- end
- end
- local get = function(s)
- if dependencies['Emojis'][s] then
- return dependencies['Emojis'][s];
- else
- return nil;
- end
- end
- local fillmatches = function(emojis, object)
- local t = object.Text;
- for i, v in pairs(emojis) do
- local emoji = get(v);
- if emoji then
- object.Text = string.gsub(object.Text, ":"..v..":", emoji)
- end
- end
- end
- local last;
- local autofill = function(tbl, object)
- local find = tbl[1];
- if #find >= 2 then
- else
- return;
- end
- local start = tbl[2]
- last = tbl;
- local match;
- for i, v in pairs(dependencies['Emojis']) do
- if i:lower():sub(1, #find) == find:lower() then
- match = i;
- end
- end
- object.Parent.AutofillBox.PlaceholderText = '';
- if match then
- local s = object.Text:sub(1, start - 1);
- object.Parent.AutofillBox.PlaceholderText = s..':'..match..':'
- end
- end
- local trueautofill = function(tbl, object)
- local find = tbl[1];
- local start = tbl[2]
- local match;
- last = nil;
- if #find >= 2 then
- else
- return;
- end
- for i, v in pairs(dependencies['Emojis']) do
- if i:lower():sub(1, #find) == find:lower() then
- match = i;
- end
- end
- if match then
- local s = object.Text:sub(1, start - 1);
- object.Text = s..':'..match..':'
- end
- end
- local match = function(t, obj)
- if t:find(":") then
- local start = 0;
- local scan = {};
- local autofills = {};
- for i = 1, #t do
- local s = t:sub(i, i)
- if s == ':' then
- if start >= 1 then
- table.insert(scan, t:sub(start + 1, i - 1))
- start = 0;
- else
- start = i;
- end
- end
- end
- start = 0;
- for i = 1, #t do
- local s = t:sub(i, i)
- if s == ':' then
- if start >= 1 then
- start = 0;
- else
- start = i;
- end
- end
- end
- obj.Parent.AutofillBox.PlaceholderText = '';
- if start >= 1 then
- table.insert(autofills, t:sub(start + 1, #t))
- if config['EmojiAutofill'] == true then
- autofill({
- autofills[1],
- start
- }, obj)
- end
- else
- obj.Parent.AutofillBox.PlaceholderText = '';
- end
- if config['EmojiReplace'] == true then
- fillmatches(scan, obj)
- end
- else
- return {}
- end
- end
- spawn(function()
- game:GetService("RunService").Heartbeat:Connect(function()
- if cache[dependencies['Chat'].chatbar] == nil then
- cache[dependencies['Chat'].chatbar] = true;
- dependencies['Chat'] = getchat()
- bindable:Fire(dependencies['Chat'])
- end
- end)
- end)
- game:GetService("UserInputService").InputBegan:Connect(function(k)
- if k.KeyCode then
- if k.KeyCode == Enum.KeyCode.Tab then
- if focused then
- if last then
- local object = dependencies['Chat'].chatbar;
- trueautofill(last, object)
- wait()
- object.Text = object.Text:sub(1, #object.Text - 1)
- end
- end
- end
- end
- end)
- local getplayer = function(t)
- for i = 1, #t do
- if t:sub(i, i) == ']' then
- return game:GetService("Players"):FindFirstChild(t:sub(2, i - 1));
- end
- end
- return nil;
- end
- local getvalue = function(t)
- for i = 1,#t do
- if t:sub(i,i) == ' ' then
- else
- return t:sub(i,#t)
- end
- end
- return 'void'
- end
- local scrollers = {};
- game:GetService("UserInputService").InputBegan:Connect(function(input)
- if dependencies['Chat'] then
- if input.UserInputType == Enum.UserInputType.MouseButton2 then
- local m = game:GetService("Players").LocalPlayer:GetMouse()
- local objs = game:GetService("Players").LocalPlayer.PlayerGui:GetGuiObjectsAtPosition(m.X, m.Y)
- for i, v in pairs(objs) do
- if v:FindFirstChild("TextButton") then
- if v:FindFirstChild("Scroller") then
- return
- end
- local s = scroller(v);
- for i, v in pairs(s:GetChildren()) do
- if v:IsA("TextButton") then
- v.ZIndex = 20;
- end
- end
- table.insert(scrollers, s);
- if #scrollers >= 2 then
- scrollers[1]:Destroy()
- scrollers = {
- s
- }
- end
- s.Parent.ClipsDescendants = false;
- s.MouseLeave:Connect(function()
- s:Destroy();
- end)
- s.CopyMessage.MouseButton1Click:Connect(function()
- setclipboard(getvalue(v.Text))
- s:Destroy();
- end)
- s.DeleteMessage.MouseButton1Click:Connect(function()
- v:Destroy()
- end)
- s.CopyUser.MouseButton1Click:Connect(function()
- local t = v.TextButton.Text;
- for i = 1, #t do
- if t:sub(i, i) == ']' then
- setclipboard(t:sub(2, i - 1));
- end
- end
- s:Destroy()
- end)
- s.Unmute.MouseButton1Click:Connect(function()
- sendmsg("/unmute "..tostring(getplayer(v.TextButton.Text)))
- s:Destroy()
- end)
- s.Mute.MouseButton1Click:Connect(function()
- sendmsg("/mute "..tostring(getplayer(v.TextButton.Text)))
- s:Destroy()
- end)
- s.Tp.MouseButton1Click:Connect(function()
- local plr = getplayer(v.TextButton.Text)
- local hrp = game:GetService("Players").LocalPlayer.Character.HumanoidRootPart;
- local them = plr.Character:WaitForChild("HumanoidRootPart");
- hrp.CFrame = CFrame.new(them.Position)
- end)
- end
- end
- end
- end
- end)
- bindable.Event:Connect(function(tbl)
- local bar = tbl.chatbar;
- bar.ZIndex = 2;
- bar.Parent.TextLabel.ZIndex = 3;
- local clone = bar:Clone();
- clone.Name = 'AutofillBox'
- clone.Parent = bar.Parent;
- clone.TextEditable = false;
- clone.ZIndex = 1;
- clone.TextTransparency = .5
- clone.PlaceholderColor3 = Color3.fromRGB(0, 0, 0)
- bar:GetPropertyChangedSignal("Text"):Connect(function()
- focused = true;
- local txt = bar.Text;
- if txt == '' then
- clone.PlaceholderText = '';
- return;
- end
- match(txt, bar)
- end)
- bar.FocusLost:Connect(function()
- clone.PlaceholderText = '';
- focused = false;
- end)
- end)