Know I have a Chat output - But how to get a inputbox (Where I set the msg I will say)

Sorry for the big code

Using this code:

local gui = {}

function percent(x,y) return UDim2.new(x/100,0,y/100,0) end function gui:percent(x,y) return percent(x,y) end
function scale(x,y) return UDim2.new(x,0,y,0) end			function gui:scale(x,y) return scale(x,y) end
function pixels(x,y) return UDim2.new(0,x,0,y) end			function gui:pixels(x,y) return pixels(x,y) end

local recolor = "BackgroundColor3"

function color(r,g,b)
	return Color3.fromRGB(r,g,b)
end
function gui:color(...) return color(...) end

function gui:pgui() return game.Players.LocalPlayer:WaitForChild("PlayerGui") end

local ColorTranslateAPI = function(text)
	-- Description: Translates text to a brick color so you dont have to input exact names
	local colors = {
		["red"] = BrickColor.new("Really red"),
		["dark red"] = BrickColor.new("Bright red"),
		["blue"] = BrickColor.new("Really blue"),
		["dark blue"] = BrickColor.new("Bright blue"),
		["green"] = BrickColor.new("Lime green"),
		["dark green"] = BrickColor.new("Bright green"),
		["darker green"] = BrickColor.new("Dark green"),
		["darkest green"] = BrickColor.new("Earth green"),
		["earth green"] = BrickColor.new("Earth green"),
		["purple"] = BrickColor.new("Bright violet"),
		["orange"] = BrickColor.new("Bright orange"),
		["dark orange"] = BrickColor.new("Neon orange"),
		["white"] = BrickColor.new("Institutional white"),
		["dark white"] = BrickColor.new("White"),
		["yellow"] = BrickColor.new("New Yeller"),
		["dark yellow"] = BrickColor.new("Bright yellow"),
		["grey"] = BrickColor.new("Medium stone grey"),
		["gray"] = BrickColor.new("Medium stone grey"),
		["dark grey"] = BrickColor.new("Dark stone grey"),
		["dark gray"] = BrickColor.new("Dark stone grey"),
		["dark black"] = BrickColor.new("Really black"),
		["black"] = BrickColor.new("Black"),
		["camo"] = BrickColor.new("Camo"),
		["dark green"] = BrickColor.new("Dark green"),
		["bright green"] = BrickColor.new("Bright green"),
		["lavender"] = BrickColor.new("Lavender"),
		["peach"] = BrickColor.new("Light orange"),
		["pale peach"] = BrickColor.new("Pastel brown"),
		["brick yellow"] = BrickColor.new("Brick yellow"),
		["aqua"] = BrickColor.new("Bright bluish green"),
		["baby blue"] = BrickColor.new("Toothpaste"),
		["cyan"] = BrickColor.new("Cyan"),
		["brown"] = BrickColor.new("Reddish brown")
		-- add to this list if you want.
	}
	local c = BrickColor.Black()
	if colors[text:lower()] then
		c = colors[text:lower()]
	end
	if tonumber(text) then
		c = BrickColor.new(math.floor(tonumber(text)))
	end
	return c
end

function gui:GetTextLength(txt,font,size)
	local pgui = gui:pgui()
	local sc = pgui:FindFirstChild("__TextLengthGetter") or Instance.new("ScreenGui",pgui)
	sc.Name = "__TextLengthGetter"
	local t = sc:FindFirstChild("__TextLabel") or Instance.new("TextLabel",sc)
	t.Name = "__TextLabel" -- Just in case
	t.BackgroundTransparency = 1
	t.TextTransparency = 1
	t.Font = font or t.Font
	t.FontSize = size or t.FontSize
	t.Text = txt or ""
	return t.TextBounds.X
end

function explode(str,div)
	local tab,cur={},""
	for i = 1, #str do
		if str:sub(i,i+(div:len()-1))==div then
			tab[#tab+1]=cur
			cur=""
			i=i+(div:len()-1)
		else
			cur=cur..str:sub(i,i)
		end
	end
	if cur ~= "" then
		tab[#tab+1]=cur
	end
	return tab
end

function gui:Frame()
	local f = Instance.new("Frame")
	f[recolor] = color(255,255,255)
	f.Size = pixels(0,0)
	f.BorderSizePixel = 0
	return f
end

function gui:TextLabel()
	local f = Instance.new("TextLabel")
	f.Size = pixels(0,0)
	f.FontSize = "Size18"
	f.Font = "SourceSans"
	f.Text = ""
	f.TextColor3 = color(255,255,255)
	f.BorderSizePixel = 0
	return f
end
 
-- {shadow,red:hello} {blue:world}

function FormatLabel(tl,col,layer)
	local shadow,bold,sep,ital,underline,light
	local formats = explode(col,",")
	for _,str in pairs(formats) do
		if str:lower() == "shadow" then
			shadow = true
		elseif str:lower() == "b" then
			bold = true
		elseif str:lower() == "sep" then
			sep = true
		elseif str:lower() == "i" then
			ital = true
		elseif str:lower() == "l" then
			light = true
		elseif str:lower() == "u" then
			underline = true
		else
			tl.TextColor3 = ColorTranslateAPI(str).Color
		end
	end
	-- font changing
	if bold then
		local font = tl.Font.Name
		if font:find("SourceSans") then
			tl.Font = "SourceSansBold"
		elseif font:find("Arial") then
			tl.Font = "ArialBold"
		end
	end
	if ital then
		local font = tl.Font.Name
		if font:find("SourceSans") then
			tl.Font = "SourceSansItalic"
		end
	end
	if light then
		local font = tl.Font.Name
		if font:find("SourceSans") then
			tl.Font = "SourceSansLight"
		end
	end
	-- label formatting
	if underline then
		local u = gui:Frame()
		u.Name = "Underline"
		u.Size = gui:percent(100,0) + gui:pixels(0,2)
		u.Position = gui:percent(0,100) - gui:pixels(0,2)
		u.BackgroundColor3 = tl.TextColor3 -- hack
		u.Parent = tl
		u.ZIndex = layer + 1
	end
	if sep then
		local s = gui:Frame()
		s.Name = "Separator"
		s.Size = gui:percent(0,100) + gui:pixels(2,0)
		s.Position = gui:percent(100,0) - gui:pixels(2,0)
		s.BackgroundColor3 = tl.TextColor3 -- hack
		s.Parent = tl
		s.ZIndex = layer + 1
	end
	-- last
	if shadow then
		local t = tl:Clone()
		t.TextColor3 = gui:color(0,0,0)
		t.Name = "Shadow"
		t.Position = gui:pixels(2,2)
		t.Size = gui:percent(100,100)
		t.BackgroundTransparency = 1
		t.TextTransparency = 0.5
		tl.ZIndex = t.ZIndex + 1
		t.Parent = tl
	end
end

function gui:GetFormattedText(txt, settings)
	settings = settings or {}
	local padding,
		linemax,
		default_format,
		layer = 
		settings.padding or 0,
		settings.linebreak or 1e4,
		settings.default,
		settings.layer or 1
	local f = gui:Frame()
	f.Name = "__TextContainer"
	f.ZIndex = layer
	local tl = gui:TextLabel()
	tl.BackgroundTransparency = 1
	tl.Name = "Text"
	tl.ZIndex = layer + 1
	local init,last = txt,1
	local linepos = padding or 0
	local toppos = padding or 0
	local curline = 0
	local afterstr
	local function NewLabel(ntext, formatted, color)
		local newtext = tl:Clone()
		newtext.Text = ntext
		if formatted then
			FormatLabel(newtext,color,layer)
		elseif default_format then
			FormatLabel(newtext,default_format,layer)
		end
		local tlen = gui:GetTextLength(ntext, newtext.Font, newtext.FontSize)
		if linemax+padding-linepos < tlen then
			f.Size = f.Size + gui:pixels(0, 18)
			linepos = padding or 0
			curline = curline + 1
		end
		newtext.Size = gui:pixels(tlen,18)
		newtext.Position = gui:pixels(linepos, (padding or 0) + (curline * (18 + padding)))
		linepos = linepos + tlen
		newtext.Parent = f
		toppos = math.max(toppos, linepos)
		return newtext
	end
	for before,cstart,cstop,start,stop,after in txt:gmatch("(){().-():().-()}()") do
		local color = txt:sub(cstart,cstop-1) -- get color string
		local text = txt:sub(start,stop-1) -- get text string
		init = txt:sub(last, before-1) -- get before string
		afterstr = txt:sub(after) -- get remaining string after the capture
		last = after
		-- Handle before
			NewLabel(init,false)
		-- Handle formatted
			NewLabel(text,true,color)
	end
	if afterstr then
		-- Handling the final label
			NewLabel(afterstr,false)
	else
		-- Handle whole text
			NewLabel(txt,false)
	end
	f.Size = gui:pixels(toppos + padding, (20*(curline + 1)) + padding)
	return f
end

return gui