| | "use strict"; |
| |
|
| | const utils = require("../utils"); |
| | const log = require("npmlog"); |
| |
|
| | module.exports = function (defaultFuncs, api, ctx) { |
| | return function addUserToGroup(userID, threadID, callback) { |
| | let resolveFunc = function () { }; |
| | let rejectFunc = function () { }; |
| | const returnPromise = new Promise(function (resolve, reject) { |
| | resolveFunc = resolve; |
| | rejectFunc = reject; |
| | }); |
| |
|
| | if ( |
| | !callback && |
| | (utils.getType(threadID) === "Function" || |
| | utils.getType(threadID) === "AsyncFunction") |
| | ) { |
| | throw new utils.CustomError({ error: "please pass a threadID as a second argument." }); |
| | } |
| |
|
| | if (!callback) { |
| | callback = function (err) { |
| | if (err) { |
| | return rejectFunc(err); |
| | } |
| | resolveFunc(); |
| | }; |
| | } |
| |
|
| | if ( |
| | utils.getType(threadID) !== "Number" && |
| | utils.getType(threadID) !== "String" |
| | ) { |
| | throw new utils.CustomError({ |
| | error: |
| | "ThreadID should be of type Number or String and not " + |
| | utils.getType(threadID) + |
| | "." |
| | }); |
| | } |
| |
|
| | if (utils.getType(userID) !== "Array") { |
| | userID = [userID]; |
| | } |
| |
|
| | const messageAndOTID = utils.generateOfflineThreadingID(); |
| | const form = { |
| | client: "mercury", |
| | action_type: "ma-type:log-message", |
| | author: "fbid:" + (ctx.i_userID || ctx.userID), |
| | thread_id: "", |
| | timestamp: Date.now(), |
| | timestamp_absolute: "Today", |
| | timestamp_relative: utils.generateTimestampRelative(), |
| | timestamp_time_passed: "0", |
| | is_unread: false, |
| | is_cleared: false, |
| | is_forward: false, |
| | is_filtered_content: false, |
| | is_filtered_content_bh: false, |
| | is_filtered_content_account: false, |
| | is_spoof_warning: false, |
| | source: "source:chat:web", |
| | "source_tags[0]": "source:chat", |
| | log_message_type: "log:subscribe", |
| | status: "0", |
| | offline_threading_id: messageAndOTID, |
| | message_id: messageAndOTID, |
| | threading_id: utils.generateThreadingID(ctx.clientID), |
| | manual_retry_cnt: "0", |
| | thread_fbid: threadID |
| | }; |
| |
|
| | for (let i = 0; i < userID.length; i++) { |
| | if ( |
| | utils.getType(userID[i]) !== "Number" && |
| | utils.getType(userID[i]) !== "String" |
| | ) { |
| | throw new utils.CustomError({ |
| | error: |
| | "Elements of userID should be of type Number or String and not " + |
| | utils.getType(userID[i]) + |
| | "." |
| | }); |
| | } |
| |
|
| | form["log_message_data[added_participants][" + i + "]"] = |
| | "fbid:" + userID[i]; |
| | } |
| |
|
| | defaultFuncs |
| | .post("https://www.facebook.com/messaging/send/", ctx.jar, form) |
| | .then(utils.parseAndCheckLogin(ctx, defaultFuncs)) |
| | .then(function (resData) { |
| | if (!resData) { |
| | throw new utils.CustomError({ error: "Add to group failed." }); |
| | } |
| | if (resData.error) { |
| | throw new utils.CustomError(resData); |
| | } |
| |
|
| | return callback(); |
| | }) |
| | .catch(function (err) { |
| | log.error("addUserToGroup", err); |
| | return callback(err); |
| | }); |
| |
|
| | return returnPromise; |
| | }; |
| | }; |
| |
|