Back to Scripts

ChatAi Open Source Code
ScriptBlox
Universal
Free
Game: Universal Script š
1,725,203
Views
19
Likes
2
Dislikes

LuaUX
offline
Features
Completely Keyless Free ChatAi you can Talk a New Update will come where you can talk Ai Grok. Claude. ChatGpt.
Tags
Script Code
-- i made it Open Source so you guys can Add it Skid it I dont Care cuz this will be Discontinued
local Api_Gemini67 = ā"
local CollectionService = game:GetService("CollectionService")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local UserInputService = game:GetService("UserInputService")
local lp = game:GetService("Players").LocalPlayer
local G2L = {}
local Api_Groq = ""
local Api_GroqGpt = ""
local Icons = loadstring(game:HttpGetAsync("https://raw.githubusercontent.com/Footagesus/Icons/main/Main-v2.lua"))()
local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()
local New = WindUI.Creator.New
Icons.Init(New, "Icon")
local currentAI = "Gemini"
local function UpdateScrollingFrame()
local totalHeight = 0
for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do
if child:IsA("TextBox") or child:IsA("TextLabel") or child:IsA("Frame") then
totalHeight = totalHeight + child.Size.Y.Offset + 5
end
end
G2L["ScrollingFrame_c"].CanvasSize = UDim2.new(0, 0, 0, totalHeight)
local yOffset = 0
for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do
if child:IsA("TextBox") or child:IsA("TextLabel") or child:IsA("Frame") then
child.Position = UDim2.new(0, 5, 0, yOffset)
yOffset = yOffset + child.Size.Y.Offset + 5
end
end
G2L["ScrollingFrame_c"].CanvasPosition = Vector2.new(0, totalHeight)
end
local function CallGeminiAPI(userMessage)
local body = HttpService:JSONEncode({
contents = {{ parts = {{ text = userMessage }} }}
})
local success, response = pcall(function()
return request({
Url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent?key=" .. Api_Gemini67,
Method = "POST",
Headers = {
["Content-Type"] = "application/json"
},
Body = body
})
end)
if not success then
return "Error: Request failed - " .. tostring(response)
end
if not response or not response.Body then
return "Error: No response from server"
end
local decodeSuccess, data = pcall(function()
return HttpService:JSONDecode(response.Body)
end)
if not decodeSuccess then
return "Error: Invalid response format - " .. tostring(data)
end
if data and data.candidates and data.candidates[1] and
data.candidates[1].content and data.candidates[1].content.parts and
data.candidates[1].content.parts[1] and data.candidates[1].content.parts[1].text then
local aiText = data.candidates[1].content.parts[1].text
return aiText
end
if data and data.error then
return "API Error: " .. (data.error.message or "Unknown error")
end
return "Error: Unable to parse AI response. Check console for details."
end
local function CallClaudeAPI(userMessage, apiKey)
local body = HttpService:JSONEncode({
model = "claude-sonnet-4-5-20250929",
max_tokens = 1024,
messages = {{
role = "user",
content = userMessage
}}
})
local success, response = pcall(function()
return request({
Url = "https://api.anthropic.com/v1/messages",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["x-api-key"] = apiKey,
["anthropic-version"] = "2023-06-01"
},
Body = body
})
end)
if not success then
return "Error: Request failed - " .. tostring(response)
end
if not response or not response.Body then
return "Error: No response from server"
end
local decodeSuccess, data = pcall(function()
return HttpService:JSONDecode(response.Body)
end)
if not decodeSuccess then
return "Error: Invalid response format"
end
if data and data.content and data.content[1] and data.content[1].text then
return data.content[1].text
end
if data and data.error then
return "Claude Error: " .. (data.error.message or "Unknown error")
end
return "Error: Unable to parse Claude response"
end
local function CallGroqLlamaAPI(userMessage)
local body = HttpService:JSONEncode({
model = "llama-3.1-8b-instant",
messages = {{
role = "user",
content = userMessage
}},
max_tokens = 1024,
temperature = 0.7
})
local success, response = pcall(function()
return request({
Url = "https://api.groq.com/openai/v1/chat/completions",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer " .. Api_Groq
},
Body = body
})
end)
if not success then
return "Error: Request failed - " .. tostring(response)
end
if not response or not response.Body then
return "Error: No response from server"
end
local decodeSuccess, data = pcall(function()
return HttpService:JSONDecode(response.Body)
end)
if not decodeSuccess then
return "Error: Invalid response format"
end
if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then
return data.choices[1].message.content
end
if data and data.error then
return "Groq Llama Error: " .. (data.error.message or "Unknown error")
end
return "Error: Unable to parse Groq Llama response"
end
local function CallGroqGptOssAPI(userMessage)
local body = HttpService:JSONEncode({
model = "openai/gpt-oss-120b",
messages = {{
role = "user",
content = userMessage
}},
max_tokens = 1024,
temperature = 0.7
})
local success, response = pcall(function()
return request({
Url = "https://api.groq.com/openai/v1/chat/completions",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer " .. Api_GroqGpt
},
Body = body
})
end)
if not success then
return "Error: Request failed - " .. tostring(response)
end
if not response or not response.Body then
return "Error: No response from server"
end
local decodeSuccess, data = pcall(function()
return HttpService:JSONDecode(response.Body)
end)
if not decodeSuccess then
return "Error: Invalid response format"
end
if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then
return data.choices[1].message.content
end
if data and data.error then
return "Groq GPT-OSS Error: " .. (data.error.message or "Unknown error")
end
return "Error: Unable to parse Groq GPT-OSS response"
end
local function CallChatGPTAPI(userMessage, apiKey)
local body = HttpService:JSONEncode({
model = "gpt-4o-mini",
messages = {{
role = "user",
content = userMessage
}},
max_tokens = 1024,
temperature = 0.7
})
local success, response = pcall(function()
return request({
Url = "https://api.openai.com/v1/chat/completions",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["Authorization"] = "Bearer " .. apiKey
},
Body = body
})
end)
if not success then
return "Error: Request failed - " .. tostring(response)
end
if not response or not response.Body then
return "Error: No response from server"
end
local decodeSuccess, data = pcall(function()
return HttpService:JSONDecode(response.Body)
end)
if not decodeSuccess then
return "Error: Invalid response format"
end
if data and data.choices and data.choices[1] and data.choices[1].message and data.choices[1].message.content then
return data.choices[1].message.content
end
if data and data.error then
return "ChatGPT Error: " .. (data.error.message or "Unknown error")
end
return "Error: Unable to parse ChatGPT response"
end
local function CallAI(userMessage)
if currentAI == "Gemini" then
return CallGeminiAPI(userMessage)
elseif currentAI == "Claude" then
return CallClaudeAPI(userMessage, getgenv().ClaudeApi)
elseif currentAI == "(Groq) Llama" then
return CallGroqLlamaAPI(userMessage)
elseif currentAI == "(Groq) Gpt Oss" then
return CallGroqGptOssAPI(userMessage)
elseif currentAI == "Gpt-4" then
return CallChatGPTAPI(userMessage, getgenv().ChatGptApi)
else
return "Please select an AI model from the settings"
end
end
local function AddMessage(sender, message, isUser)
local messageLabel = Instance.new("TextLabel")
messageLabel.Size = UDim2.new(1, -10, 0, 0)
messageLabel.BackgroundTransparency = 1
messageLabel.TextColor3 = isUser and Color3.fromRGB(100, 200, 255) or Color3.fromRGB(255, 255, 255)
messageLabel.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
messageLabel.TextSize = 14
messageLabel.TextWrapped = true
messageLabel.TextXAlignment = Enum.TextXAlignment.Left
messageLabel.TextYAlignment = Enum.TextYAlignment.Top
messageLabel.Text = sender .. ": " .. message
messageLabel.Parent = G2L["ScrollingFrame_c"]
local textBounds = game:GetService("TextService"):GetTextSize(
messageLabel.Text,
messageLabel.TextSize,
Enum.Font.Code,
Vector2.new(messageLabel.AbsoluteSize.X, math.huge)
)
messageLabel.Size = UDim2.new(1, -10, 0, math.max(textBounds.Y + 10, 30))
UpdateScrollingFrame()
return messageLabel
end
local function CreateCodeBlock(code, language)
local codeFrame = Instance.new("Frame")
codeFrame.Size = UDim2.new(1, -10, 0, 0)
codeFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
codeFrame.BorderSizePixel = 0
codeFrame.Parent = G2L["ScrollingFrame_c"]
local codeCorner = Instance.new("UICorner", codeFrame)
codeCorner.CornerRadius = UDim.new(0, 6)
local codeBox = Instance.new("TextBox")
codeBox.Size = UDim2.new(1, -50, 1, -10)
codeBox.Position = UDim2.new(0, 5, 0, 5)
codeBox.BackgroundTransparency = 1
codeBox.TextColor3 = Color3.fromRGB(0, 255, 127)
codeBox.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
codeBox.TextSize = 12
codeBox.TextWrapped = true
codeBox.TextXAlignment = Enum.TextXAlignment.Left
codeBox.TextYAlignment = Enum.TextYAlignment.Top
codeBox.Text = code
codeBox.TextEditable = false
codeBox.ClearTextOnFocus = false
codeBox.MultiLine = true
codeBox.Parent = codeFrame
local copyButton = Instance.new("ImageButton")
copyButton.Size = UDim2.new(0, 20, 0, 20)
copyButton.Position = UDim2.new(1, -50, 0, 7)
copyButton.BackgroundTransparency = 1
copyButton.Parent = codeFrame
local copyIcon = Icons.Image({
Icon = "external-link",
Colors = {Color3.fromRGB(200, 200, 200)},
Size = UDim2.new(0, 18, 0, 18)
})
copyIcon.IconFrame.Parent = copyButton
copyButton.MouseButton1Click:Connect(function()
setclipboard(code)
copyIcon.IconFrame.ImageColor3 = Color3.fromRGB(0, 255, 127)
task.wait(1)
copyIcon.IconFrame.ImageColor3 = Color3.fromRGB(200, 200, 200)
end)
local executeButton = Instance.new("ImageButton")
executeButton.Size = UDim2.new(0, 20, 0, 20)
executeButton.Position = UDim2.new(1, -25, 0, 7)
executeButton.BackgroundTransparency = 1
executeButton.Parent = codeFrame
local executeIcon = Icons.Image({
Icon = "code",
Colors = {Color3.fromRGB(200, 200, 200)},
Size = UDim2.new(0, 18, 0, 18)
})
executeIcon.IconFrame.Parent = executeButton
executeButton.MouseButton1Click:Connect(function()
local success, err = pcall(function()
loadstring(code)()
end)
if not success then
print("Execute error:", err)
end
executeIcon.IconFrame.ImageColor3 = Color3.fromRGB(255, 140, 0)
task.wait(1)
executeIcon.IconFrame.ImageColor3 = Color3.fromRGB(200, 200, 200)
end)
local textBounds = game:GetService("TextService"):GetTextSize(
code,
12,
Enum.Font.Code,
Vector2.new(codeBox.AbsoluteSize.X, math.huge)
)
codeFrame.Size = UDim2.new(1, -10, 0, math.max(textBounds.Y + 20, 50))
UpdateScrollingFrame()
return codeFrame
end
local function ExtractCodeBlocks(message)
local parts = {}
local lastIndex = 1
for codeStart, language, code, codeEnd in message:gmatch("()```([%w]*)\n?(.-)\n?```()") do
if codeStart > lastIndex then
local textBefore = message:sub(lastIndex, codeStart - 1)
if textBefore:gsub("%s+", "") ~= "" then
table.insert(parts, {type = "text", content = textBefore})
end
end
table.insert(parts, {type = "code", content = code, language = language})
lastIndex = codeEnd
end
if lastIndex <= #message then
local textAfter = message:sub(lastIndex)
if textAfter:gsub("%s+", "") ~= "" then
table.insert(parts, {type = "text", content = textAfter})
end
end
if #parts == 0 then
table.insert(parts, {type = "text", content = message})
end
return parts
end
local function DisplayAIResponse(message)
local parts = ExtractCodeBlocks(message)
local senderAdded = false
for i, part in ipairs(parts) do
if part.type == "text" then
if not senderAdded then
AddMessage(currentAI, part.content, false)
senderAdded = true
else
AddMessage("", part.content, false)
end
elseif part.type == "code" then
CreateCodeBlock(part.content, part.language)
end
end
end
local function ShowLoadingMessage()
local loadingLabel = Instance.new("TextLabel")
loadingLabel.Name = "LoadingMessage"
loadingLabel.Size = UDim2.new(1, -10, 0, 30)
loadingLabel.BackgroundTransparency = 1
loadingLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
loadingLabel.FontFace = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
loadingLabel.TextSize = 14
loadingLabel.TextXAlignment = Enum.TextXAlignment.Left
loadingLabel.TextYAlignment = Enum.TextYAlignment.Top
loadingLabel.Text = currentAI .. ": ..."
loadingLabel.Parent = G2L["ScrollingFrame_c"]
UpdateScrollingFrame()
local dots = 0
local animationRunning = true
task.spawn(function()
while animationRunning and loadingLabel.Parent do
dots = (dots % 3) + 1
loadingLabel.Text = currentAI .. ": " .. string.rep(".", dots)
task.wait(0.5)
end
end)
return loadingLabel, function()
animationRunning = false
end
end
G2L["ScreenGui_1"] = Instance.new("ScreenGui", game:GetService("Players").LocalPlayer:WaitForChild("PlayerGui"))
G2L["ScreenGui_1"]["ZIndexBehavior"] = Enum.ZIndexBehavior.Sibling
G2L["ScreenGui_1"]["ResetOnSpawn"] = false
CollectionService:AddTag(G2L["ScreenGui_1"], [[main]])
G2L["Frame_2"] = Instance.new("Frame", G2L["ScreenGui_1"])
G2L["Frame_2"]["BorderSizePixel"] = 0
G2L["Frame_2"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0)
G2L["Frame_2"]["Size"] = UDim2.new(0, 490, 0, 294)
G2L["Frame_2"]["Position"] = UDim2.new(0, 140, 0, -18)
G2L["Frame_2"]["BackgroundTransparency"] = 0.5
G2L["TextButton_3"] = Instance.new("TextButton", G2L["Frame_2"])
G2L["TextButton_3"]["BorderSizePixel"] = 0
G2L["TextButton_3"]["TextSize"] = 14
G2L["TextButton_3"]["TextColor3"] = Color3.fromRGB(0, 0, 0)
G2L["TextButton_3"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0)
G2L["TextButton_3"]["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
G2L["TextButton_3"]["BackgroundTransparency"] = 1
G2L["TextButton_3"]["Size"] = UDim2.new(0, 18, 0, 16)
G2L["TextButton_3"]["BorderColor3"] = Color3.fromRGB(255, 0, 0)
G2L["TextButton_3"]["Text"] = [[X]]
G2L["TextButton_3"]["Position"] = UDim2.new(0, 472, 0, 0)
G2L["TextLabel_4"] = Instance.new("TextLabel", G2L["Frame_2"])
G2L["TextLabel_4"]["BorderSizePixel"] = 0
G2L["TextLabel_4"]["TextSize"] = 24
G2L["TextLabel_4"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["TextLabel_4"]["FontFace"] = Font.new([[rbxasset://fonts/families/DenkOne.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
G2L["TextLabel_4"]["TextColor3"] = Color3.fromRGB(0, 0, 0)
G2L["TextLabel_4"]["BackgroundTransparency"] = 1
G2L["TextLabel_4"]["Size"] = UDim2.new(0, 148, 0, 22)
G2L["TextLabel_4"]["Text"] = [[ChatAi]]
G2L["TextLabel_4"]["Position"] = UDim2.new(0, 148, 0, -2)
G2L["UICorner_5"] = Instance.new("UICorner", G2L["Frame_2"])
G2L["TextLabel4_6"] = Instance.new("TextLabel", G2L["Frame_2"])
G2L["TextLabel4_6"]["BorderSizePixel"] = 0
G2L["TextLabel4_6"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0)
G2L["TextLabel4_6"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["TextLabel4_6"]["Text"] = [[]]
G2L["TextLabel4_6"]["Name"] = [[TextLabel4]]
G2L["TextLabel4_6"]["Position"] = UDim2.new(0, 34, 0, 2)
G2L["UICorner_7"] = Instance.new("UICorner", G2L["TextLabel4_6"])
G2L["TextLabel3_8"] = Instance.new("TextLabel", G2L["Frame_2"])
G2L["TextLabel3_8"]["BorderSizePixel"] = 0
G2L["TextLabel3_8"]["BackgroundColor3"] = Color3.fromRGB(255, 253, 15)
G2L["TextLabel3_8"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["TextLabel3_8"]["Text"] = [[]]
G2L["TextLabel3_8"]["Name"] = [[TextLabel3]]
G2L["TextLabel3_8"]["Position"] = UDim2.new(0, 18, 0, 2)
G2L["UICorner_9"] = Instance.new("UICorner", G2L["TextLabel3_8"])
G2L["TextLabel2_a"] = Instance.new("TextLabel", G2L["Frame_2"])
G2L["TextLabel2_a"]["BorderSizePixel"] = 0
G2L["TextLabel2_a"]["BackgroundColor3"] = Color3.fromRGB(42, 255, 0)
G2L["TextLabel2_a"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["TextLabel2_a"]["Text"] = [[]]
G2L["TextLabel2_a"]["Name"] = [[TextLabel2]]
G2L["TextLabel2_a"]["Position"] = UDim2.new(0, 4, 0, 2)
G2L["UICorner_b"] = Instance.new("UICorner", G2L["TextLabel2_a"])
G2L["ScrollingFrame_c"] = Instance.new("ScrollingFrame", G2L["Frame_2"])
G2L["ScrollingFrame_c"]["BorderSizePixel"] = 0
G2L["ScrollingFrame_c"]["CanvasPosition"] = Vector2.new(2.5, 208.69614)
G2L["ScrollingFrame_c"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["ScrollingFrame_c"]["Size"] = UDim2.new(0, 472, 0, 202)
G2L["ScrollingFrame_c"]["ScrollBarImageColor3"] = Color3.fromRGB(0, 0, 0)
G2L["ScrollingFrame_c"]["Position"] = UDim2.new(0, 14, 0, 28)
G2L["ScrollingFrame_c"]["ScrollBarThickness"] = 3
G2L["ScrollingFrame_c"]["BackgroundTransparency"] = 1
G2L["Frame2_d"] = Instance.new("Frame", G2L["Frame_2"])
G2L["Frame2_d"]["BorderSizePixel"] = 0
G2L["Frame2_d"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["Frame2_d"]["Size"] = UDim2.new(0, 482, 0, 50)
G2L["Frame2_d"]["Position"] = UDim2.new(0, 4, 0, 238)
G2L["Frame2_d"]["Name"] = [[Frame2]]
G2L["UICorner_e"] = Instance.new("UICorner", G2L["Frame2_d"])
G2L["TextBox_f"] = Instance.new("TextBox", G2L["Frame_2"])
G2L["TextBox_f"]["CursorPosition"] = -1
G2L["TextBox_f"]["LineHeight"] = 0
G2L["TextBox_f"]["PlaceholderColor3"] = Color3.fromRGB(136, 136, 136)
G2L["TextBox_f"]["BorderSizePixel"] = 2
G2L["TextBox_f"]["TextWrapped"] = true
G2L["TextBox_f"]["TextSize"] = 14
G2L["TextBox_f"]["TextColor3"] = Color3.fromRGB(32, 32, 32)
G2L["TextBox_f"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["TextBox_f"]["FontFace"] = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
G2L["TextBox_f"]["MultiLine"] = true
G2L["TextBox_f"]["ClearTextOnFocus"] = false
G2L["TextBox_f"]["ClipsDescendants"] = true
G2L["TextBox_f"]["PlaceholderText"] = "Ask " .. currentAI .. " anything..."
G2L["TextBox_f"]["Size"] = UDim2.new(0, 448, 0, 44)
G2L["TextBox_f"]["Position"] = UDim2.new(0, 4, 0, 242)
G2L["TextBox_f"]["BorderColor3"] = Color3.fromRGB(20, 66, 210)
G2L["TextBox_f"]["Text"] = [[]]
G2L["TextBox_f"]["BackgroundTransparency"] = 0.1
G2L["UICorner_10"] = Instance.new("UICorner", G2L["TextBox_f"])
G2L["ImageButton_11"] = Instance.new("ImageButton", G2L["Frame_2"])
G2L["ImageButton_11"]["BorderSizePixel"] = 0
G2L["ImageButton_11"]["BackgroundTransparency"] = 1
G2L["ImageButton_11"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0)
G2L["ImageButton_11"]["Size"] = UDim2.new(0, 28, 0, 26)
G2L["ImageButton_11"]["Position"] = UDim2.new(0, 456, 0, 256)
G2L["UICorner_ImageButton"] = Instance.new("UICorner", G2L["ImageButton_11"])
G2L["UIDragDetector_12"] = Instance.new("UIDragDetector", G2L["Frame_2"])
G2L["UIDragDetector_12"]["DragUDim2"] = UDim2.new(0, -11, 0, -15)
G2L["ImageButton_Toggle"] = Instance.new("ImageButton", G2L["ScreenGui_1"])
G2L["ImageButton_Toggle"]["BorderSizePixel"] = 0
G2L["ImageButton_Toggle"]["BackgroundTransparency"] = 0.1
G2L["ImageButton_Toggle"]["BackgroundColor3"] = Color3.fromRGB(27, 27, 27)
G2L["ImageButton_Toggle"]["Size"] = UDim2.new(0, 44, 0, 42)
G2L["ImageButton_Toggle"]["Position"] = UDim2.new(0, 176, 0, -42)
G2L["ImageButton_Toggle"]["Visible"] = false
G2L["UICorner_Toggle"] = Instance.new("UICorner", G2L["ImageButton_Toggle"])
G2L["UICorner_Toggle"]["CornerRadius"] = UDim.new(0, 26)
G2L["SettingsFrame"] = Instance.new("Frame", G2L["ScreenGui_1"])
G2L["SettingsFrame"]["BorderSizePixel"] = 0
G2L["SettingsFrame"]["BackgroundColor3"] = Color3.fromRGB(9, 9, 9)
G2L["SettingsFrame"]["Size"] = UDim2.new(0, 424, 0, 262)
G2L["SettingsFrame"]["Position"] = UDim2.new(0, 167, 0, -13)
G2L["SettingsFrame"]["BackgroundTransparency"] = 0.3
G2L["SettingsFrame"]["Visible"] = false
G2L["SettingsFrame"]["ZIndex"] = 20
G2L["SettingsUICorner"] = Instance.new("UICorner", G2L["SettingsFrame"])
G2L["SettingsUICorner"]["CornerRadius"] = UDim.new(0, 14)
G2L["SettingsDragDetector"] = Instance.new("UIDragDetector", G2L["SettingsFrame"])
G2L["SettingsDot1"] = Instance.new("TextLabel", G2L["SettingsFrame"])
G2L["SettingsDot1"]["BorderSizePixel"] = 0
G2L["SettingsDot1"]["BackgroundColor3"] = Color3.fromRGB(148, 0, 255)
G2L["SettingsDot1"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["SettingsDot1"]["Text"] = ""
G2L["SettingsDot1"]["Position"] = UDim2.new(0, 6, 0, 3)
G2L["SettingsDot1"]["ZIndex"] = 21
Instance.new("UICorner", G2L["SettingsDot1"])
G2L["SettingsDot2"] = Instance.new("TextLabel", G2L["SettingsFrame"])
G2L["SettingsDot2"]["BorderSizePixel"] = 0
G2L["SettingsDot2"]["BackgroundColor3"] = Color3.fromRGB(255, 0, 0)
G2L["SettingsDot2"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["SettingsDot2"]["Text"] = ""
G2L["SettingsDot2"]["Position"] = UDim2.new(0, 20, 0, 3)
G2L["SettingsDot2"]["ZIndex"] = 21
Instance.new("UICorner", G2L["SettingsDot2"])
G2L["SettingsDot3"] = Instance.new("TextLabel", G2L["SettingsFrame"])
G2L["SettingsDot3"]["BorderSizePixel"] = 0
G2L["SettingsDot3"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0)
G2L["SettingsDot3"]["Size"] = UDim2.new(0, 10, 0, 10)
G2L["SettingsDot3"]["Text"] = ""
G2L["SettingsDot3"]["Position"] = UDim2.new(0, 35, 0, 3)
G2L["SettingsDot3"]["ZIndex"] = 21
Instance.new("UICorner", G2L["SettingsDot3"])
G2L["SettingsTitle"] = Instance.new("TextLabel", G2L["SettingsFrame"])
G2L["SettingsTitle"]["TextStrokeTransparency"] = 0
G2L["SettingsTitle"]["BorderSizePixel"] = 0
G2L["SettingsTitle"]["TextSize"] = 14
G2L["SettingsTitle"]["TextTransparency"] = 0.9
G2L["SettingsTitle"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["SettingsTitle"]["FontFace"] = Font.new([[rbxasset://fonts/families/Inconsolata.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
G2L["SettingsTitle"]["TextColor3"] = Color3.fromRGB(0, 0, 2)
G2L["SettingsTitle"]["BackgroundTransparency"] = 1
G2L["SettingsTitle"]["Size"] = UDim2.new(0, 294, 0, 34)
G2L["SettingsTitle"]["Text"] = "Script Syndicate"
G2L["SettingsTitle"]["Position"] = UDim2.new(0, 58, 0, -8)
G2L["SettingsTitle"]["ZIndex"] = 21
G2L["SettingsCloseButton"] = Instance.new("TextButton", G2L["SettingsFrame"])
G2L["SettingsCloseButton"]["BorderSizePixel"] = 0
G2L["SettingsCloseButton"]["TextColor3"] = Color3.fromRGB(255, 255, 255)
G2L["SettingsCloseButton"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
G2L["SettingsCloseButton"]["BackgroundTransparency"] = 1
G2L["SettingsCloseButton"]["Size"] = UDim2.new(0, 22, 0, 20)
G2L["SettingsCloseButton"]["Text"] = "X"
G2L["SettingsCloseButton"]["Position"] = UDim2.new(0, 402, 0, 2)
G2L["SettingsCloseButton"]["ZIndex"] = 21
G2L["AISelectionFrame"] = Instance.new("Frame", G2L["SettingsFrame"])
G2L["AISelectionFrame"]["BorderSizePixel"] = 0
G2L["AISelectionFrame"]["BackgroundColor3"] = Color3.fromRGB(0, 0, 0)
G2L["AISelectionFrame"]["Size"] = UDim2.new(0, 404, 0, 56)
G2L["AISelectionFrame"]["Position"] = UDim2.new(0, 12, 0, 28)
G2L["AISelectionFrame"]["BackgroundTransparency"] = 0.2
G2L["AISelectionFrame"]["ZIndex"] = 21
G2L["AISelectionCorner"] = Instance.new("UICorner", G2L["AISelectionFrame"])
G2L["AISelectionCorner"]["CornerRadius"] = UDim.new(0, 6)
G2L["TextButton_SelectAI"] = Instance.new("TextButton", G2L["AISelectionFrame"])
G2L["TextButton_SelectAI"]["BorderSizePixel"] = 0
G2L["TextButton_SelectAI"]["TextSize"] = 14
G2L["TextButton_SelectAI"]["TextColor3"] = Color3.fromRGB(79, 210, 255)
G2L["TextButton_SelectAI"]["BackgroundColor3"] = Color3.fromRGB(48, 48, 48)
G2L["TextButton_SelectAI"]["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
G2L["TextButton_SelectAI"]["Size"] = UDim2.new(0, 376, 0, 26)
G2L["TextButton_SelectAI"]["Text"] = "Select AI"
G2L["TextButton_SelectAI"]["Position"] = UDim2.new(0, 12, 0, 16)
G2L["TextButton_SelectAI"]["ZIndex"] = 22
G2L["ButtonCorner_SelectAI"] = Instance.new("UICorner", G2L["TextButton_SelectAI"])
G2L["DropdownFrame"] = Instance.new("Frame", G2L["SettingsFrame"])
G2L["DropdownFrame"]["BorderSizePixel"] = 0
G2L["DropdownFrame"]["BackgroundColor3"] = Color3.fromRGB(45, 45, 45)
G2L["DropdownFrame"]["Size"] = UDim2.new(0, 376, 0, 0)
G2L["DropdownFrame"]["Position"] = UDim2.new(0, 26, 0, 84)
G2L["DropdownFrame"]["Visible"] = false
G2L["DropdownFrame"]["ClipsDescendants"] = true
G2L["DropdownFrame"]["ZIndex"] = 25
G2L["DropdownCorner"] = Instance.new("UICorner", G2L["DropdownFrame"])
G2L["DropdownCorner"]["CornerRadius"] = UDim.new(0, 5)
G2L["DropdownStroke"] = Instance.new("UIStroke", G2L["DropdownFrame"])
G2L["DropdownStroke"]["Color"] = Color3.fromRGB(80, 80, 80)
G2L["DropdownStroke"]["Thickness"] = 1
G2L["DropdownScroll"] = Instance.new("ScrollingFrame", G2L["DropdownFrame"])
G2L["DropdownScroll"]["BorderSizePixel"] = 0
G2L["DropdownScroll"]["BackgroundTransparency"] = 1
G2L["DropdownScroll"]["Size"] = UDim2.new(1, 0, 1, 0)
G2L["DropdownScroll"]["CanvasSize"] = UDim2.new(0, 0, 0, 0)
G2L["DropdownScroll"]["ScrollBarThickness"] = 4
G2L["DropdownScroll"]["ZIndex"] = 26
local settingsButton = Instance.new("ImageButton", G2L["Frame_2"])
settingsButton["BorderSizePixel"] = 0
settingsButton["BackgroundTransparency"] = 1
settingsButton["BackgroundColor3"] = Color3.fromRGB(50, 50, 50)
settingsButton["Size"] = UDim2.new(0, 22, 0, 22)
settingsButton["Position"] = UDim2.new(0, 445, 0, -3)
settingsButton["ZIndex"] = 10
settingsButton["Image"] = ""
settingsButton["ImageColor3"] = Color3.fromRGB(200, 200, 200)
local settingsCorner = Instance.new("UICorner", settingsButton)
settingsCorner["CornerRadius"] = UDim.new(0, 6)
local dropdownOptions = {"Claude", "Gpt-4", "Gemini", "(Groq) Llama", "(Groq) Gpt Oss"}
local function createDropdownOptions()
local totalHeight = 0
for index, option in ipairs(dropdownOptions) do
local optionButton = Instance.new("TextButton", G2L["DropdownScroll"])
optionButton["BorderSizePixel"] = 0
optionButton["BackgroundColor3"] = Color3.fromRGB(45, 45, 45)
optionButton["Size"] = UDim2.new(1, -8, 0, 28)
optionButton["Position"] = UDim2.new(0, 4, 0, (index - 1) * 28 + 4)
optionButton["Text"] = option
optionButton["TextSize"] = 12
optionButton["TextColor3"] = Color3.fromRGB(255, 255, 255)
optionButton["FontFace"] = Font.new([[rbxasset://fonts/families/ComicNeueAngular.json]], Enum.FontWeight.Regular, Enum.FontStyle.Normal)
optionButton["ZIndex"] = 27
local optionCorner = Instance.new("UICorner", optionButton)
optionCorner["CornerRadius"] = UDim.new(0, 3)
optionButton.MouseEnter:Connect(function()
optionButton["BackgroundColor3"] = Color3.fromRGB(70, 70, 70)
end)
optionButton.MouseLeave:Connect(function()
optionButton["BackgroundColor3"] = Color3.fromRGB(45, 45, 45)
end)
optionButton.MouseButton1Click:Connect(function()
currentAI = option
G2L["TextButton_SelectAI"]["Text"] = option
G2L["TextBox_f"]["PlaceholderText"] = "Ask " .. option .. " anything..."
G2L["DropdownFrame"]["Visible"] = false
AddMessage("System", "Switched to " .. option .. " AI model", false)
end)
totalHeight = totalHeight + 28
end
G2L["DropdownScroll"]["CanvasSize"] = UDim2.new(0, 0, 0, totalHeight + 8)
end
createDropdownOptions()
G2L["TextButton_SelectAI"].MouseButton1Click:Connect(function()
if G2L["DropdownFrame"]["Visible"] then
G2L["DropdownFrame"]["Visible"] = false
else
G2L["DropdownFrame"]["Visible"] = true
G2L["DropdownFrame"]["Size"] = UDim2.new(0, 376, 0, #dropdownOptions * 28 + 8)
end
end)
G2L["SettingsCloseButton"].MouseButton1Click:Connect(function()
local settingsDisappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
local settingsDisappearTween = TweenService:Create(G2L["SettingsFrame"], settingsDisappearInfo, {BackgroundTransparency = 1})
settingsDisappearTween:Play()
settingsDisappearTween.Completed:Connect(function()
G2L["SettingsFrame"]["Visible"] = false
G2L["Frame_2"]["Visible"] = true
G2L["Frame_2"]["BackgroundTransparency"] = 1
local mainAppearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local mainAppearTween = TweenService:Create(G2L["Frame_2"], mainAppearInfo, {BackgroundTransparency = 0.5})
mainAppearTween:Play()
end)
end)
settingsButton.MouseEnter:Connect(function()
local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local hoverTween = TweenService:Create(settingsButton, hoverInfo, {
BackgroundTransparency = 0.7,
BackgroundColor3 = Color3.fromRGB(100, 100, 100)
})
hoverTween:Play()
end)
settingsButton.MouseLeave:Connect(function()
local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local unhoverTween = TweenService:Create(settingsButton, unhoverInfo, {
BackgroundTransparency = 1,
BackgroundColor3 = Color3.fromRGB(50, 50, 50)
})
unhoverTween:Play()
end)
settingsButton.MouseButton1Click:Connect(function()
if not G2L["SettingsFrame"]["Visible"] then
local mainDisappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
local mainDisappearTween = TweenService:Create(G2L["Frame_2"], mainDisappearInfo, {BackgroundTransparency = 1})
mainDisappearTween:Play()
mainDisappearTween.Completed:Connect(function()
G2L["Frame_2"]["Visible"] = false
G2L["SettingsFrame"]["Visible"] = true
G2L["SettingsFrame"]["BackgroundTransparency"] = 1
local settingsAppearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local settingsAppearTween = TweenService:Create(G2L["SettingsFrame"], settingsAppearInfo, {BackgroundTransparency = 0.3})
settingsAppearTween:Play()
end)
end
end)
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if G2L["DropdownFrame"]["Visible"] then
local mouse = game:GetService("Players").LocalPlayer:GetMouse()
local ddFrame = G2L["DropdownFrame"]
local buttonSize = G2L["TextButton_SelectAI"].AbsoluteSize
local buttonPos = G2L["TextButton_SelectAI"].AbsolutePosition
local ddSize = ddFrame.AbsoluteSize
local ddPos = ddFrame.AbsolutePosition
local mouseX = mouse.X
local mouseY = mouse.Y
if not (mouseX >= buttonPos.X and mouseX <= buttonPos.X + buttonSize.X and
mouseY >= buttonPos.Y and mouseY <= buttonPos.Y + buttonSize.Y) and
not (mouseX >= ddPos.X and mouseX <= ddPos.X + ddSize.X and
mouseY >= ddPos.Y and mouseY <= ddPos.Y + ddSize.Y) then
G2L["DropdownFrame"]["Visible"] = false
end
end
end
end)
G2L["TextButton_3"].MouseEnter:Connect(function()
local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local hoverTween = TweenService:Create(G2L["TextButton_3"], hoverInfo, {
BackgroundTransparency = 0.4,
BackgroundColor3 = Color3.fromRGB(255, 255, 255)
})
hoverTween:Play()
end)
G2L["TextButton_3"].MouseLeave:Connect(function()
local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local unhoverTween = TweenService:Create(G2L["TextButton_3"], unhoverInfo, {
BackgroundTransparency = 1,
BackgroundColor3 = Color3.fromRGB(255, 0, 0)
})
unhoverTween:Play()
end)
G2L["TextButton_3"].MouseButton1Click:Connect(function()
local disappearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut)
local disappearTween = TweenService:Create(G2L["Frame_2"], disappearInfo, {
BackgroundTransparency = 1,
Position = UDim2.new(0.5, -245, 0.5, -147)
})
disappearTween:Play()
disappearTween.Completed:Connect(function()
G2L["Frame_2"].Visible = false
G2L["ImageButton_Toggle"].Visible = true
local appearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local appearTween = TweenService:Create(G2L["ImageButton_Toggle"], appearInfo, {Position = UDim2.new(0, 176, 0, 10)})
appearTween:Play()
end)
end)
G2L["ImageButton_Toggle"].MouseButton1Click:Connect(function()
local hideInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In)
local hideTween = TweenService:Create(G2L["ImageButton_Toggle"], hideInfo, {Position = UDim2.new(0, 176, 0, -42)})
hideTween:Play()
hideTween.Completed:Connect(function()
G2L["ImageButton_Toggle"].Visible = false
G2L["Frame_2"].Visible = true
G2L["Frame_2"].BackgroundTransparency = 1
G2L["Frame_2"].Position = UDim2.new(0.5, -245, 0.5, -147)
local appearInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local appearTween = TweenService:Create(G2L["Frame_2"], appearInfo, {
BackgroundTransparency = 0.5,
Position = UDim2.new(0, 140, 0, -18)
})
appearTween:Play()
end)
end)
G2L["ImageButton_11"].MouseEnter:Connect(function()
local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local hoverTween = TweenService:Create(G2L["ImageButton_11"], hoverInfo, {
BackgroundTransparency = 0.7,
BackgroundColor3 = Color3.fromRGB(255, 140, 0)
})
hoverTween:Play()
end)
G2L["ImageButton_11"].MouseLeave:Connect(function()
local unhoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local unhoverTween = TweenService:Create(G2L["ImageButton_11"], unhoverInfo, {
BackgroundTransparency = 1,
BackgroundColor3 = Color3.fromRGB(255, 0, 0)
})
unhoverTween:Play()
end)
local sendIcon = Icons.Image({
Icon = "circle-arrow-up",
Colors = {Color3.fromRGB(255, 140, 0)},
Size = UDim2.new(0, 22, 0, 22)
})
sendIcon.IconFrame.Parent = G2L["ImageButton_11"]
sendIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
sendIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5)
local currentAIRequest = nil
local isAIResponding = false
local function UpdateSendIcon(iconName, color)
if sendIcon and sendIcon.IconFrame then
sendIcon.IconFrame:Destroy()
end
sendIcon = Icons.Image({
Icon = iconName,
Colors = {color},
Size = UDim2.new(0, 22, 0, 22)
})
sendIcon.IconFrame.Parent = G2L["ImageButton_11"]
sendIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
sendIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5)
end
G2L["ImageButton_11"].MouseButton1Click:Connect(function()
if isAIResponding then
isAIResponding = false
if currentAIRequest then
task.cancel(currentAIRequest)
currentAIRequest = nil
end
UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0))
for _, child in ipairs(G2L["ScrollingFrame_c"]:GetChildren()) do
if child.Name == "LoadingMessage" then
child:Destroy()
end
end
AddMessage("System", "...", false)
return
end
local userMessage = G2L["TextBox_f"].Text
if userMessage:gsub("%s+", "") == "" then return end
AddMessage("You", userMessage, true)
G2L["TextBox_f"].Text = ""
UpdateSendIcon("circle-stop", Color3.fromRGB(255, 0, 0))
isAIResponding = true
local loadingMessage, stopAnimation = ShowLoadingMessage()
currentAIRequest = task.spawn(function()
local aiResponse = CallAI(userMessage)
if isAIResponding then
stopAnimation()
if loadingMessage and loadingMessage.Parent then
loadingMessage:Destroy()
end
DisplayAIResponse(aiResponse)
end
isAIResponding = false
currentAIRequest = nil
UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0))
end)
end)
G2L["TextBox_f"].FocusLost:Connect(function(enterPressed)
if enterPressed and not isAIResponding then
local userMessage = G2L["TextBox_f"].Text
if userMessage:gsub("%s+", "") == "" then return end
AddMessage("You", userMessage, true)
G2L["TextBox_f"].Text = ""
UpdateSendIcon("circle-stop", Color3.fromRGB(255, 0, 0))
isAIResponding = true
local loadingMessage, stopAnimation = ShowLoadingMessage()
currentAIRequest = task.spawn(function()
local aiResponse = CallAI(userMessage)
if isAIResponding then
stopAnimation()
if loadingMessage and loadingMessage.Parent then
loadingMessage:Destroy()
end
DisplayAIResponse(aiResponse)
end
isAIResponding = false
currentAIRequest = nil
UpdateSendIcon("circle-arrow-up", Color3.fromRGB(255, 140, 0))
end)
task.wait(0.1)
G2L["TextBox_f"]:CaptureFocus()
end
end)
local botIcon = Icons.Image({
Icon = "bot-message-square",
Colors = {Color3.fromRGB(255, 255, 255)},
Size = UDim2.new(0, 30, 0, 30)
})
botIcon.IconFrame.Parent = G2L["ImageButton_Toggle"]
botIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
botIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5)
local SettingIcon = Icons.Image({
Icon = "settings",
Colors = {Color3.fromRGB(200, 200, 200)},
Size = UDim2.new(0, 18, 0, 18)
})
SettingIcon.IconFrame.Parent = settingsButton
SettingIcon.IconFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
SettingIcon.IconFrame.AnchorPoint = Vector2.new(0.5, 0.5)
AddMessage("System", "[V2.8] Hello " .. lp.DisplayName .. "! I'm ChatAI Made by Script Syndicate! - https://discord.gg/DMB3CDrDa9\n\nChangeLogs:\n+ Improved CodeBox\n+ Added Execute Button on CodeBox\n+ Added 4 Ai Models\n\nAvailable Ai:\n⢠Gemini\n⢠Groq Gpt Oss\n⢠Groq Llama\n⢠Claude (Need Custom API - Paid)\n⢠ChatGPT 4o mini (Need Custom API - Paid)\nA new Ai will be added soon, stay tuned!", false)
CreateCodeBlock([[
game.Players.LocalPlayer.Character.Humanoid.WalkSpeed = 50
]], "lua")
AddMessage("VelocityX", "Execute it using the icon on the top!", false)
return G2L["ScreenGui_1"]
Comments (0)
Please login to comment
Login with Discord
Loading comments...