Friend checker
Key RequiredUniversal

Friend checker

Universal Scriptmcdaggittmcdaggitt 21.7K views 1.4K executesUpdated Jun 5, 2025
3.8/ 5(4 votes)
3175% Positive
Lua Script•388 lines (15403 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local HttpService = game:GetService("HttpService")
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "FriendViewer"
ScreenGui.Parent = game:GetService("CoreGui")
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0, 350, 0, 500)
MainFrame.Position = UDim2.new(0.5, -175, 0.5, -250)
MainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
MainFrame.BorderSizePixel = 0
MainFrame.ClipsDescendants = true
MainFrame.Parent = ScreenGui
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 8)
Corner.Parent = MainFrame
local Shadow = Instance.new("ImageLabel")
Shadow.Name = "Shadow"
Shadow.Size = UDim2.new(1, 10, 1, 10)
Shadow.Position = UDim2.new(0, -5, 0, -5)
Shadow.BackgroundTransparency = 1
Shadow.Image = "rbxassetid://1316045217"
Shadow.ImageColor3 = Color3.new(0, 0, 0)
Shadow.ImageTransparency = 0.8
Shadow.ScaleType = Enum.ScaleType.Slice
Shadow.SliceCenter = Rect.new(10, 10, 118, 118)
Shadow.ZIndex = -1
Shadow.Parent = MainFrame

local Title = Instance.new("TextLabel")
Title.Name = "Title"
Title.Size = UDim2.new(1, 0, 0, 45)
Title.Position = UDim2.new(0, 0, 0, 0)
Title.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
Title.BorderSizePixel = 0
Title.Text = "FRIEND CHECKER"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 16
Title.Parent = MainFrame

local TitleCorner = Instance.new("UICorner")
TitleCorner.CornerRadius = UDim.new(0, 8)
TitleCorner.Parent = Title

local CloseButton = Instance.new("ImageButton")
CloseButton.Name = "CloseButton"
CloseButton.Size = UDim2.new(0, 25, 0, 25)
CloseButton.Position = UDim2.new(1, -30, 0.5, -12)
CloseButton.AnchorPoint = Vector2.new(0, 0.5)
CloseButton.BackgroundTransparency = 1
CloseButton.Image = "rbxassetid://3926305904"
CloseButton.ImageRectOffset = Vector2.new(284, 4)
CloseButton.ImageRectSize = Vector2.new(24, 24)
CloseButton.Parent = Title

CloseButton.MouseEnter:Connect(function()
    TweenService:Create(CloseButton, TweenInfo.new(0.15), {
        ImageColor3 = Color3.fromRGB(255, 80, 80)
    }):Play()
end)

CloseButton.MouseLeave:Connect(function()
    TweenService:Create(CloseButton, TweenInfo.new(0.15), {
        ImageColor3 = Color3.fromRGB(255, 255, 255)
    }):Play()
end)

local PlayerList = Instance.new("ScrollingFrame")
PlayerList.Name = "PlayerList"
PlayerList.Size = UDim2.new(1, -20, 1, -60)
PlayerList.Position = UDim2.new(0, 10, 0, 50)
PlayerList.BackgroundTransparency = 1
PlayerList.ScrollBarThickness = 2
PlayerList.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100)
PlayerList.Parent = MainFrame

local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 5)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = PlayerList
layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
	PlayerList.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y)
end)

local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Padding = UDim.new(0, 8)
UIListLayout.Parent = PlayerList

local friendships = {}

local function createPlayerButton(player)
    local button = Instance.new("TextButton")
    button.Name = player.Name
    button.Size = UDim2.new(1, 0, 0, 60)
    button.BackgroundColor3 = Color3.fromRGB(40, 40, 50)
    button.BorderSizePixel = 0
    button.Text = ""
    button.AutoButtonColor = false
    button.Parent = PlayerList
    local Corner = Instance.new("UICorner")
	Corner.CornerRadius = UDim.new(0, 6)
	Corner.Parent = button
    local Layout = Instance.new("UIListLayout")
    Layout.Padding = UDim.new(0, 5)
    Layout.Parent = button
    local DisplayNameLabel = Instance.new("TextLabel")
    DisplayNameLabel.Name = "DisplayName"
	DisplayNameLabel.Size = UDim2.new(1, -60, 0, 15)
	DisplayNameLabel.Position = UDim2.new(0, 50, 0, 25)
    DisplayNameLabel.BackgroundTransparency = 1
    DisplayNameLabel.Text = "@" .. player.DisplayName
    DisplayNameLabel.TextColor3 = Color3.fromRGB(180, 180, 180)
    DisplayNameLabel.Font = Enum.Font.Gotham
    DisplayNameLabel.TextSize = 12
    DisplayNameLabel.TextXAlignment = Enum.TextXAlignment.Left
    DisplayNameLabel.Parent = button
	local FriendCount = Instance.new("TextLabel")
	FriendCount.Name = "FriendCount"
	FriendCount.Size = UDim2.new(0, 60, 0, 18)
	FriendCount.Position = UDim2.new(1, -65, 0, 5)
	FriendCount.AnchorPoint = Vector2.new(0, 0)
	FriendCount.BackgroundColor3 = Color3.fromRGB(45, 70, 50)
	FriendCount.BackgroundTransparency = 1
	FriendCount.Text = ""
	FriendCount.TextColor3 = Color3.fromRGB(255, 255, 255)
	FriendCount.Font = Enum.Font.GothamBold
	FriendCount.TextSize = 0
	FriendCount.TextXAlignment = Enum.TextXAlignment.Center
	FriendCount.TextYAlignment = Enum.TextYAlignment.Center
	FriendCount.ZIndex = 5
	FriendCount.Parent = button
    local Avatar = Instance.new("ImageLabel")
    Avatar.Name = "Avatar"
    Avatar.Size = UDim2.new(0, 40, 0, 40)
    Avatar.Position = UDim2.new(0, 5, 0, 5)
    Avatar.BackgroundColor3 = Color3.fromRGB(60, 60, 70)
    Avatar.BorderSizePixel = 0
    Avatar.Parent = button

    local thumb = Players:GetUserThumbnailAsync(player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
    Avatar.Image = thumb
    local AvatarCorner = Instance.new("UICorner")
    AvatarCorner.CornerRadius = UDim.new(0, 6)
    AvatarCorner.Parent = Avatar
    button.MouseEnter:Connect(function()
        TweenService:Create(button, TweenInfo.new(0.15), {
            BackgroundColor3 = Color3.fromRGB(55, 55, 65)
        }):Play()
    end)
    button.MouseLeave:Connect(function()
        TweenService:Create(button, TweenInfo.new(0.15), {
            BackgroundColor3 = Color3.fromRGB(40, 40, 50)
        }):Play()
    end)
    coroutine.wrap(function()
        local friendCount = 0
        for _, otherPlayer in Players:GetPlayers() do
            if otherPlayer ~= player then
                local success, isFriend = pcall(function()
                    return otherPlayer:IsFriendsWith(player.UserId)
                end)
                
                if success and isFriend then
                    friendCount = friendCount + 1
                    local found = false
                    for _, pair in ipairs(friendships) do
                        if (pair[1] == player and pair[2] == otherPlayer) or (pair[1] == otherPlayer and pair[2] == player) then
                            found = true
                            break
                        end
                    end
                    
                    if not found then
                        table.insert(friendships, {player, otherPlayer})
                    end
                end
            end
        end
        FriendCount.Text = "Friends: " .. friendCount
    end)()
    button.MouseButton1Click:Connect(function()
        local Popup = Instance.new("Frame")
        Popup.Name = "FriendListPopup"
        Popup.Size = UDim2.new(0, 300, 0, 400)
        Popup.Position = UDim2.new(0.5, -150, 0.5, -200)
        Popup.AnchorPoint = Vector2.new(0.5, 0.5)
        Popup.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
        Popup.BorderSizePixel = 0
        Popup.Parent = ScreenGui
        local PopupCorner = Instance.new("UICorner")
        PopupCorner.CornerRadius = UDim.new(0, 8)
        PopupCorner.Parent = Popup
        local PopupShadow = Instance.new("ImageLabel")
        PopupShadow.Name = "Shadow"
        PopupShadow.Size = UDim2.new(1, 10, 1, 10)
        PopupShadow.Position = UDim2.new(0, -5, 0, -5)
        PopupShadow.BackgroundTransparency = 1
        PopupShadow.Image = "rbxassetid://1316045217"
        PopupShadow.ImageColor3 = Color3.new(0, 0, 0)
        PopupShadow.ImageTransparency = 0.8
        PopupShadow.ScaleType = Enum.ScaleType.Slice
        PopupShadow.SliceCenter = Rect.new(10, 10, 118, 118)
        PopupShadow.ZIndex = -1
        PopupShadow.Parent = Popup
        local PopupTitle = Instance.new("TextLabel")
        PopupTitle.Name = "Title"
        PopupTitle.Size = UDim2.new(1, 0, 0, 40)
        PopupTitle.Position = UDim2.new(0, 0, 0, 0)
        PopupTitle.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
        PopupTitle.BorderSizePixel = 0
        PopupTitle.Text = player.Name .. "'s Friends"
        PopupTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
        PopupTitle.Font = Enum.Font.GothamBold
        PopupTitle.TextSize = 16
        PopupTitle.Parent = Popup
        local PopupClose = Instance.new("ImageButton")
        PopupClose.Name = "CloseButton"
        PopupClose.Size = UDim2.new(0, 25, 0, 25)
        PopupClose.Position = UDim2.new(1, -30, 0.5, -12)
        PopupClose.AnchorPoint = Vector2.new(0, 0.5)
        PopupClose.BackgroundTransparency = 1
        PopupClose.Image = "rbxassetid://3926305904"
        PopupClose.ImageRectOffset = Vector2.new(284, 4)
        PopupClose.ImageRectSize = Vector2.new(24, 24)
        PopupClose.Parent = PopupTitle
        local FriendsScroll = Instance.new("ScrollingFrame")
        FriendsScroll.Name = "FriendsScroll"
        FriendsScroll.Size = UDim2.new(1, -10, 1, -50)
        FriendsScroll.Position = UDim2.new(0, 5, 0, 45)
        FriendsScroll.BackgroundTransparency = 1
        FriendsScroll.ScrollBarThickness = 2
        FriendsScroll.Parent = Popup
        local FriendsLayout = Instance.new("UIListLayout")
        FriendsLayout.Padding = UDim.new(0, 5)
        FriendsLayout.Parent = FriendsScroll
        local friendCount = 0
        for _, otherPlayer in Players:GetPlayers() do
            if otherPlayer ~= player then
                local success, isFriend = pcall(function()
                    return otherPlayer:IsFriendsWith(player.UserId)
                end)
                if success and isFriend then
                    friendCount = friendCount + 1
                    local friendEntry = Instance.new("TextButton")
                    friendEntry.Name = otherPlayer.Name
                    friendEntry.Size = UDim2.new(1, 0, 0, 40)
                    friendEntry.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
                    friendEntry.BorderSizePixel = 0
                    friendEntry.Text = ""
                    friendEntry.AutoButtonColor = false
                    friendEntry.Parent = FriendsScroll
                    local FriendCorner = Instance.new("UICorner")
                    FriendCorner.CornerRadius = UDim.new(0, 6)
                    FriendCorner.Parent = friendEntry
                    local FriendName = Instance.new("TextLabel")
                    FriendName.Name = "Name"
                    FriendName.Size = UDim2.new(1, -50, 1, 0)
                    FriendName.Position = UDim2.new(0, 50, 0, 0)
                    FriendName.BackgroundTransparency = 1
                    FriendName.Text = otherPlayer.Name
                    FriendName.TextColor3 = Color3.fromRGB(255, 255, 255)
                    FriendName.Font = Enum.Font.Gotham
                    FriendName.TextSize = 14
                    FriendName.TextXAlignment = Enum.TextXAlignment.Left
                    FriendName.Parent = friendEntry
                    local FriendAvatar = Instance.new("ImageLabel")
                    FriendAvatar.Name = "Avatar"
                    FriendAvatar.Size = UDim2.new(0, 30, 0, 30)
                    FriendAvatar.Position = UDim2.new(0, 10, 0.5, -15)
                    FriendAvatar.AnchorPoint = Vector2.new(0, 0.5)
                    FriendAvatar.BackgroundColor3 = Color3.fromRGB(60, 60, 70)
                    FriendAvatar.BorderSizePixel = 0
                    FriendAvatar.Parent = friendEntry
                    local thumb = Players:GetUserThumbnailAsync(otherPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
                    FriendAvatar.Image = thumb
                    local AvatarCorner = Instance.new("UICorner")
                    AvatarCorner.CornerRadius = UDim.new(0, 6)
                    AvatarCorner.Parent = FriendAvatar
                    friendEntry.MouseEnter:Connect(function()
                        TweenService:Create(friendEntry, TweenInfo.new(0.15), {
                            BackgroundColor3 = Color3.fromRGB(65, 65, 75)
                        }):Play()
                    end)
                    friendEntry.MouseLeave:Connect(function()
                        TweenService:Create(friendEntry, TweenInfo.new(0.15), {
                            BackgroundColor3 = Color3.fromRGB(50, 50, 60)
                        }):Play()
                    end)
                end
            end
        end
        if friendCount == 0 then
            local noFriends = Instance.new("TextLabel")
            noFriends.Size = UDim2.new(1, 0, 0, 40)
            noFriends.Position = UDim2.new(0, 0, 0.5, -20)
            noFriends.BackgroundTransparency = 1
            noFriends.Text = "No friends in this server"
            noFriends.TextColor3 = Color3.fromRGB(150, 150, 150)
            noFriends.Font = Enum.Font.Gotham
            noFriends.TextSize = 14
            noFriends.Parent = FriendsScroll
        end
        
        PopupClose.MouseButton1Click:Connect(function()
            Popup:Destroy()
        end)
    end)
end
for _, player in ipairs(Players:GetPlayers()) do
    createPlayerButton(player)
end
Players.PlayerAdded:Connect(function(player)
    createPlayerButton(player)
end)
Players.PlayerRemoving:Connect(function(player)
    local button = PlayerList:FindFirstChild(player.Name)
    if button then
        button:Destroy()
    end

    for i = #friendships, 1, -1 do
        if friendships[i][1] == player or friendships[i][2] == player then
            table.remove(friendships, i)
        end
    end
end)

local dragging
local dragInput
local dragStart
local startPos

local function update(input)
    local delta = input.Position - dragStart
    MainFrame.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 then
        dragging = true
        dragStart = input.Position
        startPos = MainFrame.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 then
        dragInput = input
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if input == dragInput and dragging then
        update(input)
    end
end)

CloseButton.MouseButton1Click:Connect(function()
    ScreenGui:Destroy()
end)

local isFriendInServer = true

for _, otherPlayer in ipairs(players:GetPlayers()) do
	if player:IsFriendsWith(otherPlayer.UserId) then
		isFriendInServer = true
		break
	end
end

--Currently broken too lazy to fix so placeholder
if isFriendInServer then
	button.BackgroundColor3 = Color3.fromRGB(45, 125, 80)
else
	button.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
end

Features & Information

# Checks who is related to who - WARNING: Games with high player count makes the script struggle to check players, advised to play games like mm2. Note: I haven't tested this on a high executer; I use XENO; so please let me know on high player counted servers if it works well! - Open source since I feel like someone can edit and make it better; + some source was taken from "rypp"! () Credits - https://scriptblox.com/script/Universal-Script-friendviewer-41329 Img logo - Versatile botting service @rypp

Community Comments (2)

NismoNismoadminJun 7, 2025

neat

mfadedfadedmfadedfadedJul 15, 2025

can you make it better for mobile users by additional a toggle pls and thanks, it covers up ur whole screeen once u execute and u cant get it out

More Scripts for Universal Scripts