You can use a data store, if there is nothing on the datastore you can create one to say that they joined
Example
local DSS = game:GetService("DataStoreService")
local store = DSS:GetDataStore("Joins")
game.Players.PlayerAdded:Connect(function(plr)
local didjoin = false
local firsttime = false
local success, joined = pcall(function()
return store:GetAsync(plr.UserId)
end)
if success then
if joined = 1 then
didjoin = true
else
store:SetAsync(plr.UserId, 1)
firsttime = true
end
end
if not success then
print("failed")
end
end)
If you don’t understand this you can read more about datastores here: Data Stores or I can recommend this video from @UseCode_Tap whos videos helped me a lot when I was getting started. Data Stores Video