local HttpService = game:GetService("HttpService") local Players = game:GetService("Players") local TextService = game:GetService("TextService") local UserInputService = game:GetService("UserInputService") local VoiceChatService = game:GetService("VoiceChatService") local player = Players.LocalPlayer shared.__FAKE_CHAT_BUS = shared.__FAKE_CHAT_BUS or { Messages = {}, Event = Instance.new("BindableEvent") } local ChatBus = shared.__FAKE_CHAT_BUS local gui = Instance.new("ScreenGui") gui.Name = "TopbarPlusChat" gui.ResetOnSpawn = false gui.Parent = game.CoreGui local topButton = Instance.new("ImageButton") topButton.Size = UDim2.new(0,36,0,36) topButton.BackgroundColor3 = Color3.fromRGB(30,30,30) topButton.BorderSizePixel = 0 topButton.Image = "rbxassetid://88317614019211" topButton.Parent = gui Instance.new("UICorner", topButton).CornerRadius = UDim.new(1,0) local function updateTopbarPosition() local hasVoice = false pcall(function() hasVoice = VoiceChatService:IsVoiceEnabledForUserId(player.UserId) end) if hasVoice then topButton.AnchorPoint = Vector2.new(0.5,0) topButton.Position = UDim2.new(0.5,0,0,6) else topButton.AnchorPoint = Vector2.new(0,0) topButton.Position = UDim2.new(0,6,0,6) end end task.spawn(function() while true do updateTopbarPosition() task.wait(5) end end) local chatFrame = Instance.new("Frame") chatFrame.Size = UDim2.new(0, math.min(300, workspace.CurrentCamera.ViewportSize.X * 0.9), 0, math.min(320, workspace.CurrentCamera.ViewportSize.Y * 0.8)) chatFrame.Position = UDim2.new(0.05,0,0.1,0) chatFrame.BackgroundColor3 = Color3.fromRGB(20,20,20) chatFrame.BackgroundTransparency = 0.4 chatFrame.Visible = false chatFrame.Parent = gui Instance.new("UICorner", chatFrame).CornerRadius = UDim.new(0,12) local title = Instance.new("TextLabel") title.Text = "SpectyChat Box" title.Size = UDim2.new(1,-10,0,30) title.Position = UDim2.new(0,5,0,5) title.BackgroundTransparency = 1 title.TextColor3 = Color3.new(1,1,1) title.Font = Enum.Font.Arial title.TextSize = 16 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = chatFrame local infoButton = Instance.new("ImageButton") infoButton.Size = UDim2.new(0,22,0,22) infoButton.Position = UDim2.new(1,-32,0,9) infoButton.BackgroundColor3 = Color3.fromRGB(0,0,0) infoButton.BorderSizePixel = 0 infoButton.Image = "rbxassetid://5832745500" infoButton.Parent = chatFrame Instance.new("UICorner", infoButton).CornerRadius = UDim.new(1,0) local scroll = Instance.new("ScrollingFrame") scroll.Position = UDim2.new(0,10,0,40) scroll.Size = UDim2.new(1,-20,1,-120) scroll.CanvasSize = UDim2.new(0,0,0,0) scroll.BackgroundTransparency = 1 scroll.BorderSizePixel = 0 scroll.ScrollBarImageTransparency = 0.4 scroll.Parent = chatFrame local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0,6) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = scroll local infoFrame = Instance.new("Frame") infoFrame.Size = scroll.Size infoFrame.Position = scroll.Position infoFrame.BackgroundTransparency = 1 infoFrame.Visible = false infoFrame.Parent = chatFrame local infoScroll = Instance.new("ScrollingFrame") infoScroll.Size = UDim2.new(1,0,1,0) infoScroll.CanvasSize = UDim2.new(0,0,0,0) infoScroll.ScrollBarImageTransparency = 0.4 infoScroll.BackgroundTransparency = 1 infoScroll.BorderSizePixel = 0 infoScroll.Parent = infoFrame local infoLayout = Instance.new("UIListLayout") infoLayout.Padding = UDim.new(0,10) infoLayout.Parent = infoScroll local function addInfoText(text) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1,-10,0,0) lbl.BackgroundTransparency = 1 lbl.TextWrapped = true lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextYAlignment = Enum.TextYAlignment.Top lbl.Font = Enum.Font.Arial lbl.TextSize = 14 lbl.TextColor3 = Color3.new(1,1,1) lbl.Text = text lbl.Parent = infoScroll local width = infoScroll.AbsoluteSize.X if width == 0 then width = 300 end lbl.Size = UDim2.new(1,-10,0,TextService:GetTextSize(text,14,lbl.Font,Vector2.new(width,9999)).Y+4) infoScroll.CanvasSize = UDim2.new(0,0,0,infoLayout.AbsoluteContentSize.Y+6) end addInfoText("1. Friends appear in RED.") addInfoText("2. Bots appear in WHITE.") addInfoText("3. Made by SpectravaxISBACK.") local box = Instance.new("TextBox") box.Size = UDim2.new(1,-90,0,34) box.Position = UDim2.new(0,10,1,-90) box.BackgroundColor3 = Color3.fromRGB(25,25,25) box.TextColor3 = Color3.new(1,1,1) box.PlaceholderText = "Tap here to chat or press the / key..." box.ClearTextOnFocus = false box.Font = Enum.Font.Arial box.TextSize = 14 box.Parent = chatFrame Instance.new("UICorner", box).CornerRadius = UDim.new(0,8) local send = Instance.new("TextButton") send.Size = UDim2.new(0,60,0,34) send.Position = UDim2.new(1,-70,1,-90) send.Text = "Send" send.Font = Enum.Font.Arial send.TextSize = 14 send.TextColor3 = Color3.new(1,1,1) send.BackgroundColor3 = Color3.fromRGB(40,40,40) send.Parent = chatFrame Instance.new("UICorner", send).CornerRadius = UDim.new(0,8) local typingLabel = Instance.new("TextLabel") typingLabel.Size = UDim2.new(1,-20,0,20) typingLabel.Position = UDim2.new(0,10,1,-55) typingLabel.BackgroundTransparency = 1 typingLabel.TextColor3 = Color3.new(1,1,1) typingLabel.Font = Enum.Font.Arial typingLabel.TextSize = 14 typingLabel.TextXAlignment = Enum.TextXAlignment.Left typingLabel.Text = "" typingLabel.Parent = chatFrame topButton.MouseButton1Click:Connect(function() chatFrame.Visible = not chatFrame.Visible end) -- Bot Names/Phrases with fallback local botNamesUrl = "https://raw.githubusercontent.com/deedlemcdoodledeedlemcdoodle-creator/Names_and_Phrases/refs/heads/main/bot_names.txt" local botPhrasesUrl = "https://raw.githubusercontent.com/deedlemcdoodledeedlemcdoodle-creator/Names_and_Phrases/refs/heads/main/bot_phrases.txt" local botNames, botPhrases = {}, {} pcall(function() botNames = string.split(HttpService:GetAsync(botNamesUrl), "\n") botPhrases = string.split(HttpService:GetAsync(botPhrasesUrl), "\n") end) if #botNames == 0 then botNames = {"NoodleLUCKisreal:", "WhoAteMyToaster:", "MrBreasty:", "iCantChat:", "jfjdjsidjcbsjsba:", "V4MP:", "ST4R:"} end if #botPhrases == 0 then botPhrases = { "Hello everyone!", "What's up?", "Anyone here?", "Nice chat!", "Finally, we don't need face id!!", "This is awesome, good job!", "I love this game!", "Who wants to play some Roblox together?", "Just finished a really fun obby!", "This chat is so cool!", "Can't believe we can finally chat without restrictions!", "I just got a new skin, looks awesome!", "Anyone up for a race?", "Wow, this place is amazing!", "I found a secret area in the game!", "Who wants to trade items?", "This game reminds me of the good old days!", "I love hanging out here with friends!", "Finally, no face id needed!", "Let's start a group game!", "Who wants to explore together?", "LOL, that was funny!", "I just got the highest score!", "This is so relaxing!", "I love customizing my avatar!", "Who else is playing this today?", "Finally, chat is back!", "I can't stop laughing!", "Anyone knows a good obby?", "This game is perfect for chill time!", "I just found a rare item!", "Finally, we can all chat freely!", "Who's up for some mini-games?", "I love the community here!", "Just joined, hi everyone!", "Finally, no more face id problems!", "Let's play together!", "This is the best script ever!", "I just completed a challenge!", "Who's online right now?", "I found a cool trick in this game!", "This chat is so fun!", "Finally, we can chat without limits!", "Anyone wants to team up?", "I love how smooth everything is!", "Who wants to join my game?", "Finally, we can enjoy chatting!", "This makes the game way more fun!", "I just unlocked a new area!", "Let's have some fun!", "I love the graphics in this game!", "Anyone wants to build something together?", "Finally, chatting made easy!", "LOL, that was hilarious!", "I just got a new badge!", "Who's ready for a game night?", "I love playing with friends here!", "Finally, no more restrictions!", "Let's make a team!", "This chat is amazing!", "I just discovered something cool!", "Who wants to hang out?", "Finally, free chat for everyone!", "This game is super fun!", "I love exploring here!", "Anyone wants to race?", "Finally, no face id needed again!", "Let's have some fun together!", "I just got a rare pet!", "This script is so useful!", "Who wants to join a party?", "Finally, we can chat without worries!", "I love the friendly vibes here!", "This game is so cozy!", "Anyone wants to trade?", "Finally, chat for everyone!", "I just leveled up!", "Let's play some fun games!", "This is so relaxing and fun!", "I love hanging out in this chat!", "Finally, no face id troubles anymore!" } end -- Friends local friends = {} pcall(function() for _,f in ipairs(player:GetFriendsAsync():GetCurrentPage()) do friends[f.Username] = true friends[f.DisplayName] = true end end) -- Add Message local function addMessage(name,text) local isRed = friends[name] == true local lbl = Instance.new("TextLabel") lbl.BackgroundTransparency = 1 lbl.TextWrapped = true lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextYAlignment = Enum.TextYAlignment.Top lbl.Font = Enum.Font.Arial lbl.TextSize = 14 lbl.RichText = true local width = scroll.AbsoluteSize.X if width == 0 then width = 300 end if isRed then lbl.Text = string.format('%s: %s',name,text) else lbl.Text = string.format('%s: %s',name,text) end lbl.Size = UDim2.new(1,-10,0,TextService:GetTextSize(text,14,lbl.Font,Vector2.new(width,9999)).Y+4) lbl.Parent = scroll scroll.CanvasSize = UDim2.new(0,0,0,layout.AbsoluteContentSize.Y+6) scroll.CanvasPosition = Vector2.new(0,math.max(0,scroll.CanvasSize.Y.Offset-scroll.AbsoluteWindowSize.Y)) end -- Send Button send.MouseButton1Click:Connect(function() if box.Text ~= "" then local msg = {name=player.DisplayName,text=box.Text} table.insert(ChatBus.Messages,msg) ChatBus.Event:Fire(msg) box.Text = "" end end) -- Listen for new messages ChatBus.Event.Event:Connect(function(msg) addMessage(msg.name,msg.text) end) -- Display old messages for _,msg in ipairs(ChatBus.Messages) do addMessage(msg.name,msg.text) end -- Bot Messages task.spawn(function() while true do local name = botNames[math.random(#botNames)] local text = botPhrases[math.random(#botPhrases)] local msg = {name=name,text=text} table.insert(ChatBus.Messages,msg) ChatBus.Event:Fire(msg) task.wait(math.random(1,4)) end end) -- Typing Label task.spawn(function() while true do local typingUsers = {} local numTyping = math.random(1,6) for i=1,numTyping do table.insert(typingUsers, botNames[math.random(#botNames)]) end if #typingUsers == 0 then typingLabel.Text = "" elseif #typingUsers == 1 then typingLabel.Text = typingUsers[1].." is typing..." elseif #typingUsers > 4 then typingLabel.Text = "Several users are typing..." else local text = table.concat(typingUsers,", ") text = text:gsub(", ([^,]+)$"," and %1") typingLabel.Text = text.." are typing..." end task.wait(math.random(2,5)) typingLabel.Text = "" task.wait(math.random(1,2)) end end) -- Info Button local showingInfo = false infoButton.MouseButton1Click:Connect(function() showingInfo = not showingInfo if showingInfo then title.Text = "Informations" scroll.Visible = false infoFrame.Visible = true else title.Text = "SpectyChat Box" scroll.Visible = true infoFrame.Visible = false end end) -- Slash Key Open UserInputService.InputBegan:Connect(function(input,gp) if gp then return end if input.UserInputType == Enum.UserInputType.Keyboard and input.KeyCode == Enum.KeyCode.Slash then if not chatFrame.Visible then chatFrame.Visible = true end box:CaptureFocus() end end)