I want to blacklist certain UGC from a certain creators from my experience

So everyone knows for a fact that roblox moderation is meh.

And when I play games I saw multiple instances of people using “sus” or “r63” avatar which I hate cause I don’t think it belongs on this platform. (I’m ok with whatever people want to do I just don’t want it in my game)

I’d like my experience to still have customizable character but not including these degen stuff, how can I make a script that blacklists gui from a certain ugc publishers/accounts?

I know how to hide them and put shirt/stuff over it but I want to know how would I know if a ugc was made by a certain publishers/accounts?

think this is what you’re after

1 Like
local HttpService = game:GetService("HttpService")

local link = "https://avatar.roproxy.com/v1/users/ID/avatar"

local badcreators = { -- insert ids here
	
	
	
}

game.Players.PlayerAdded:Connect(function(Player)
	local roproxylink = string.gsub(link, "ID", Player.UserId)
	local request = HttpService:JSONDecode(HttpService:GetAsync(roproxylink))
	for index, asset in request.assets do
		local name : string = asset.assetType.name 
		
		if name:match("Animation") then -- roblox provided animation, etc rthro animations, for some reaason they get listed which is dumb dumb stupid 
			continue
		else
			local info = Marketplace:GetProductInfo(asset.id)
			if table.find(badcreators, info.Creator.Id) then
				Player:Kick("nuh uh buddy")
			end
		end
		
	end
end)
1 Like

Thank you so much! I appreciate your help!

1 Like

Quick question, how would I get the accessory itself to delete it? cause i don’t know how the proxy works

This is what I did so far

player.CharacterAdded:Connect(function(character)
		
		wait(character:WaitForChild("Humanoid"):WaitForChild("HumanoidDescription"))
		
		local roproxylink = string.gsub(RoproxylinkThingy, "ID", player.UserId)
		local request = HttpService:JSONDecode(HttpService:GetAsync(roproxylink))
		for index, asset in request.assets do
			local name : string = asset.assetType.name 

			if name:match("Animation") then
				continue
			else
				local info = mps:GetProductInfo(asset.id)
				print(name.." "..info.Creator.Id)
				if table.find(BannedUGCCreator, info.Creator.Id) then
					print(asset)
					local accessory = character:FindFirstChild(asset["name"])
					accessory:Destroy()
					--player:Kick("nuh uh buddy")
				end
			end

		end
	end)

i am completely unsure it’s probably obvious and i’m not thinking of it though

you could probably try storing the ids of any id created by a bad ugc creator, creating a clone of the humanoid description, going through each field and if it’s a bad id you remove it from that humanoid description and reapply it on the player when it’s done?

1 Like

I’ll try that, will update later

Before trying that I did try this

player.CharacterAdded:Connect(function(character)
		
		wait(character:WaitForChild("Humanoid"):WaitForChild("HumanoidDescription"))
		
		character.Archivable = true
		
		local roproxylink = string.gsub(RoproxylinkThingy, "ID", player.UserId)
		local request = HttpService:JSONDecode(HttpService:GetAsync(roproxylink))
		for index, asset in request.assets do
			local name : string = asset.assetType.name 

			if name:match("Animation") then
				continue
			else
				local info = mps:GetProductInfo(asset.id)
				print(name.." "..info.Creator.Id)
				if table.find(BannedUGCCreator, info.Creator.Id) then
					print(asset["name"])
					print(asset)
					local accessoryname = asset["name"]
					local accessory = character:FindFirstChild(accessoryname)
					if accessory then
						accessory:Destroy()
					else
						warn("Can't find "..accessoryname)
						--player:Kick("nuh uh buddy")\
					end
				end
			end

		end
		
		character.Archivable = false
	end)

It seems to work but it couldn’t get the accessory at the end

I see the problem, the proxy only gets the name from the store and not the in-game accessory name

Unless I can use the id from the asset and spawn in the same accessory iteam to compare the name then i don’t know

Exactly what i did, I found a way to do it.

For anyone who wants to use in the future:

player.CharacterAdded:Connect(function(character)
		
		wait(character:WaitForChild("Humanoid"):WaitForChild("HumanoidDescription"))
		
		character.Archivable = true
		
		local roproxylink = string.gsub(RoproxylinkThingy, "ID", player.UserId)
		local request = HttpService:JSONDecode(HttpService:GetAsync(roproxylink))
		for index, asset in request.assets do
			local name : string = asset.assetType.name 

			if name:match("Animation") then
				continue
			else
				local info = mps:GetProductInfo(asset.id)
				print(name.." "..info.Creator.Id)
				if table.find(BannedUGCCreator, info.Creator.Id) then
					local CompareAsset = game:GetService("InsertService"):LoadAsset(info["AssetId"]):GetChildren()
					local CompareAssetName = CompareAsset[1].Name
					local accessoryname = asset["name"]
					local accessory = character:FindFirstChild(CompareAssetName)
					if accessory then
						accessory:Destroy()
					else
						warn("Can't find "..accessoryname)
					end
				end
			end

		end
		
		character.Archivable = false
	end)

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.