|
|
"use strict"; |
|
|
|
|
|
const utils = require("../utils"); |
|
|
const log = require("npmlog"); |
|
|
|
|
|
module.exports = function (defaultFuncs, api, ctx) { |
|
|
function makeTypingIndicator(typ, threadID, callback, isGroup) { |
|
|
const form = { |
|
|
typ: +typ, |
|
|
to: "", |
|
|
source: "mercury-chat", |
|
|
thread: threadID |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (utils.getType(isGroup) == "Boolean") { |
|
|
if (!isGroup) { |
|
|
form.to = threadID; |
|
|
} |
|
|
defaultFuncs |
|
|
.post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form) |
|
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs)) |
|
|
.then(function (resData) { |
|
|
if (resData.error) { |
|
|
throw resData; |
|
|
} |
|
|
|
|
|
return callback(); |
|
|
}) |
|
|
.catch(function (err) { |
|
|
log.error("sendTypingIndicator", err); |
|
|
if (utils.getType(err) == "Object" && err.error === "Not logged in") { |
|
|
ctx.loggedIn = false; |
|
|
} |
|
|
return callback(err); |
|
|
}); |
|
|
} else { |
|
|
api.getUserInfo(threadID, function (err, res) { |
|
|
if (err) { |
|
|
return callback(err); |
|
|
} |
|
|
|
|
|
|
|
|
if (Object.keys(res).length > 0) { |
|
|
form.to = threadID; |
|
|
} |
|
|
|
|
|
defaultFuncs |
|
|
.post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form) |
|
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs)) |
|
|
.then(function (resData) { |
|
|
if (resData.error) { |
|
|
throw resData; |
|
|
} |
|
|
|
|
|
return callback(); |
|
|
}) |
|
|
.catch(function (err) { |
|
|
log.error("sendTypingIndicator", err); |
|
|
if (utils.getType(err) == "Object" && err.error === "Not logged in.") { |
|
|
ctx.loggedIn = false; |
|
|
} |
|
|
return callback(err); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
return function sendTypingIndicator(threadID, callback, isGroup) { |
|
|
if ( |
|
|
utils.getType(callback) !== "Function" && |
|
|
utils.getType(callback) !== "AsyncFunction" |
|
|
) { |
|
|
if (callback) { |
|
|
log.warn( |
|
|
"sendTypingIndicator", |
|
|
"callback is not a function - ignoring." |
|
|
); |
|
|
} |
|
|
callback = () => { }; |
|
|
} |
|
|
|
|
|
makeTypingIndicator(true, threadID, callback, isGroup); |
|
|
|
|
|
return function end(cb) { |
|
|
if ( |
|
|
utils.getType(cb) !== "Function" && |
|
|
utils.getType(cb) !== "AsyncFunction" |
|
|
) { |
|
|
if (cb) { |
|
|
log.warn( |
|
|
"sendTypingIndicator", |
|
|
"callback is not a function - ignoring." |
|
|
); |
|
|
} |
|
|
cb = () => { }; |
|
|
} |
|
|
|
|
|
makeTypingIndicator(false, threadID, cb, isGroup); |
|
|
}; |
|
|
}; |
|
|
}; |
|
|
|