Here's what I threw together in a few minutes: on('chat:message', function(msg) {
var folderdata = JSON.parse(Campaign().get('journalfolder')),
charactersInFolder = _.chain(findNestedFolder(folderdata, 'Characters').i)
.filter(function(obj) { return _.isString(obj); })
.map(function(id) { return getObj('character', id); })
.reject(function(char) { return !char; })
.value();
log(charactersInFolder);
});
function findNestedFolder(folderData, name) {
var targetFolder;
_.each(folderData, function(obj) {
if (!_.isObject(obj) || targetFolder) return;
if (obj.n.toLowerCase() === name.toLowerCase()) {
targetFolder = obj;
return;
}
targetFolder = findNestedFolder(obj.i, name);
});
return targetFolder;
}
From this folder structure: The result is: [ {"name":"Drulyut","bio":"","gmnotes":"","_defaulttoken":"","archived":false,"inplayerjournals":"","controlledby":"","_id":"-JTJFofS76c1Xx5ZMHK9","_type":"character","avatar":""}, {"name":"Panther","bio":"","gmnotes":"","_defaulttoken":"","archived":false,"inplayerjournals":"","controlledby":"-J19JXG9_NPQb1y0UIhP","_id":"-J5EQW26czvL3bdTKCWp","_type":"character","avatar":""} ] As the call to findNestedFolder specified the 'Characters' folder. If you want to include characters in subfolders (eg, ask for the 'Characters' folder and get everything in 'Test Nested' as well), that's just a change to the value of charactersInFolder. Let me know if you need that. In order to create an attribute on each of those characters, simply iterate over the charactersInFolder array and create an attribute for each: _.each(charactersInFolder, function(char) { createObj("attribute", {
name: "Strength",
current: 0,
max: 30,
characterid: char.id
}); });