nv-fca
Version:
A node.js package for automating Facebook Messenger bot, and is one of the most advanced next-generation Facebook Chat API (FCA) by @NethWs3Dev (Kenneth Aceberos)
94 lines (80 loc) • 2.91 kB
JavaScript
;
var utils = require("../utils");
// @NethWs3Dev
module.exports = function(defaultFuncs, api, ctx) {
return function getThreadHistory(threadID, amount, timestamp, callback) {
var resolveFunc = function(){};
var rejectFunc = function(){};
var returnPromise = new Promise(function (resolve, reject) {
resolveFunc = resolve;
rejectFunc = reject;
});
if (!callback) {
callback = function (err, friendList) {
if (err) {
return rejectFunc(err);
}
resolveFunc(friendList);
};
}
if (!callback) {
throw { error: "getThreadHistory: need callback" };
}
var form = {
client: "mercury"
};
api.getUserInfo(threadID, function(err, res) {
if (err) {
return callback(err);
}
var key = Object.keys(res).length > 0 ? "user_ids" : "thread_fbids";
form["messages[" + key + "][" + threadID + "][offset]"] = 0;
form["messages[" + key + "][" + threadID + "][timestamp]"] = timestamp;
form["messages[" + key + "][" + threadID + "][limit]"] = amount;
if (ctx.globalOptions.pageID)
form.request_user_id = ctx.globalOptions.pageID;
defaultFuncs
.post(
"https://www.facebook.com/ajax/mercury/thread_info.php",
ctx.jar,
form
)
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
.then(function(resData) {
if (resData.error) {
throw resData;
} else if (!resData.payload) {
throw { error: "Could not retrieve thread history." };
}
// Asking for message history from a thread with no message history
// will return undefined for actions here
if (!resData.payload.actions) {
resData.payload.actions = [];
}
var userIDs = {};
resData.payload.actions.forEach(function(v) {
userIDs[v.author.split(":").pop()] = "";
});
api.getUserInfo(Object.keys(userIDs), function(err, data) {
if (err) return callback(err); //callback({error: "Could not retrieve user information in getThreadHistory."});
resData.payload.actions.forEach(function(v) {
var sender = data[v.author.split(":").pop()];
if (sender) v.sender_name = sender.name;
else v.sender_name = "Facebook User";
v.sender_fbid = v.author;
delete v.author;
});
callback(
null,
resData.payload.actions.map(utils.formatHistoryMessage)
);
});
})
.catch(function(err) {
utils.error("getThreadHistory", err);
return callback(err);
});
});
return returnPromise;
};
};