add gs
This commit is contained in:
+97
@@ -0,0 +1,97 @@
|
||||
local root = script.Parent.Parent
|
||||
|
||||
local Constants = require(root.Constants)
|
||||
local getAssetCreationDetails = require(root.util.getAssetCreationDetails)
|
||||
|
||||
local function parseContentId(contentIds, contentIdMap, object, fieldName)
|
||||
local contentId = object[fieldName]
|
||||
|
||||
-- map to ending digits
|
||||
-- rbxassetid://1234 -> 1234
|
||||
-- http://www.roblox.com/asset/?id=1234 -> 1234
|
||||
local id = tonumber(string.match(contentId, "%d+$"))
|
||||
if id == nil then
|
||||
return false, {
|
||||
"Could not parse ContentId",
|
||||
contentId,
|
||||
}
|
||||
end
|
||||
contentIdMap[id] = {
|
||||
fieldName = fieldName,
|
||||
instance = object,
|
||||
}
|
||||
table.insert(contentIds, id)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
local function parseDescendantContentIds(contentIds, contentIdMap, object)
|
||||
for _, descendant in pairs(object:GetDescendants()) do
|
||||
if descendant:IsA("SpecialMesh") then
|
||||
local success, reasons
|
||||
success, reasons = parseContentId(contentIds, contentIdMap, descendant, "MeshId")
|
||||
if not success then
|
||||
return false, reasons
|
||||
end
|
||||
success, reasons = parseContentId(contentIds, contentIdMap, descendant, "TextureId")
|
||||
if not success then
|
||||
return false, reasons
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- ensures accessory content ids have all passed moderation review
|
||||
local function validateModeration(isAsync, instance)
|
||||
local contentIdMap = {}
|
||||
local contentIds = {}
|
||||
|
||||
local parseSuccess, parseReasons = parseDescendantContentIds(contentIds, contentIdMap, instance)
|
||||
if not parseSuccess then
|
||||
return false, parseReasons
|
||||
end
|
||||
|
||||
local moderatedIds = {}
|
||||
|
||||
local success, response = getAssetCreationDetails(isAsync, contentIds)
|
||||
|
||||
if not success or #response ~= #contentIds then
|
||||
return false, { "Could not fetch details for assets" }
|
||||
end
|
||||
|
||||
for _, details in pairs(response) do
|
||||
if details.status == Constants.ASSET_STATUS.UNKNOWN
|
||||
or details.status == Constants.ASSET_STATUS.REVIEW_PENDING
|
||||
or details.status == Constants.ASSET_STATUS.MODERATED
|
||||
then
|
||||
table.insert(moderatedIds, details.assetId)
|
||||
end
|
||||
end
|
||||
|
||||
if #moderatedIds > 0 then
|
||||
local moderationMessages = {}
|
||||
for idx, id in pairs(moderatedIds) do
|
||||
local mapped = contentIdMap[id]
|
||||
if mapped then
|
||||
moderationMessages[idx] = string.format(
|
||||
"%s.%s ( %s )",
|
||||
mapped.instance:GetFullName(),
|
||||
mapped.fieldName,
|
||||
id
|
||||
)
|
||||
else
|
||||
moderationMessages[idx] = id
|
||||
end
|
||||
end
|
||||
return false, {
|
||||
"The following asset IDs have not passed moderation:",
|
||||
unpack(moderationMessages),
|
||||
}
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
return validateModeration
|
||||
Reference in New Issue
Block a user