3
0
mirror of https://github.com/reality/dbot.git synced 2024-11-24 04:49:25 +01:00
dbot/modules/profile/api.js
2014-09-05 13:51:51 +00:00

119 lines
3.9 KiB
JavaScript

var _ = require('underscore')._;
var api = function(dbot) {
return {
/**
* Create a new profile for a given "databanked" user.
* Typically only called as a hook to the new_user emit event.
* TODO(@samstudio8) Migrate to internalAPI
*/
"createProfile": function(user, callback){
if(!callback) callback = function(){};
if(user){
this.db.create('profiles', user.id, {
'id': user.id,
'profile': this.config.schema.profile,
'preferences': this.config.schema.preferences
}, callback);
}
},
//TODO(samstudio8) Merge Profiles
'mergeProfile': function(server, nick, callback){
console.log("mergeProfile not implemented");
},
'getProfile': function(server, nick, callback){
dbot.api.users.resolveUser(server, nick, function(err, user){
if(user){
this.db.read('profiles', user.id, function(err, profile){
if(!err){
if(profile) {
callback(false, user, profile);
} else {
this.api.createProfile(user, function(err, profile) {
callback(null, user, profile);
});
}
} else {
callback(true, user, null);
}
}.bind(this));
}
else{
callback(true, null, null);
}
}.bind(this));
},
'getProfileByUser': function(user, callback){
this.db.read('profiles', user.id, function(err, profile){
if(profile) {
callback(profile);
} else {
this.api.createProfile(user, function(err, profile) {
callback(profile);
});
}
}.bind(this));
},
'getAllProfiles': function(callback){
var profiles = [];
this.db.scan('profiles', function(profile){
profiles.push(profile);
}, function(err){
if(!err){
callback(profiles);
}
else{
console.log(err);
}
});
},
'getAllProfilesWith': function(item, callback) {
var profiles = [];
this.db.scan('profiles', function(profile) {
if(_.has(profile.profile, item) && profile.profile[item] != null) {
profiles.push(profile);
}
}, function(err) {
if(!err) {
callback(profiles);
} else {
console.log(err);
}
});
},
'setProperty': function(server, nick, field, value, callback){
this.api.getProfile(server, nick, function(err, user, profile){
if(!err){
profile.profile[field] = value;
this.db.save('profiles', user.id, profile, function(err){
if(!err){
callback("Ok!");
}
});
}
}.bind(this));
},
'getProperty': function(server, nick, field, callback){
this.api.getProfile(server, nick, function(err, user, profile){
if(!err){
if(profile.profile[field]){
callback(profile.profile[field]);
}
}
}.bind(this));
},
}
};
exports.fetch = function(dbot) {
return api(dbot);
};