Botpack / includes /login /src /markAsRead.js
Jonell01's picture
Upload 55 files
e192d16 verified
"use strict";
const utils = require("../utils");
const log = require("npmlog");
module.exports = function (defaultFuncs, api, ctx) {
return async function markAsRead(threadID, read, callback) {
if (utils.getType(read) === 'Function' || utils.getType(read) === 'AsyncFunction') {
callback = read;
read = true;
}
if (read == undefined) {
read = true;
}
if (!callback) {
callback = () => { };
}
const form = {};
if (typeof ctx.globalOptions.pageID !== 'undefined') {
form["source"] = "PagesManagerMessagesInterface";
form["request_user_id"] = ctx.globalOptions.pageID;
form["ids[" + threadID + "]"] = read;
form["watermarkTimestamp"] = new Date().getTime();
form["shouldSendReadReceipt"] = true;
form["commerce_last_message_type"] = "";
//form["titanOriginatedThreadId"] = utils.generateThreadingID(ctx.clientID);
let resData;
try {
resData = await (
defaultFuncs
.post(
"https://www.facebook.com/ajax/mercury/change_read_status.php",
ctx.jar,
form
)
.then(utils.saveCookies(ctx.jar))
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
);
} catch (e) {
callback(e);
return e;
}
if (resData.error) {
const err = resData.error;
log.error("markAsRead", err);
if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
ctx.loggedIn = false;
}
callback(err);
return err;
}
callback();
return null;
} else {
try {
if (ctx.mqttClient) {
const err = await new Promise(r => ctx.mqttClient.publish("/mark_thread", JSON.stringify({
threadID,
mark: "read",
state: read
}), { qos: 1, retain: false }, r));
if (err) throw err;
} else {
throw {
error: "You can only use this function after you start listening."
};
}
} catch (e) {
callback(e);
return e;
}
}
};
};