official-zach-remade 32.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of official-zach-remade might be problematic. Click here for more details.
- package/DOCS.md +1738 -0
- package/Extra/ExtraAddons.js +78 -0
- package/Extra/ExtraFindUID.js +60 -0
- package/Extra/ExtraGetThread.js +118 -0
- package/Extra/ExtraScreenShot.js +673 -0
- package/Extra/ExtraTranslate.js +62 -0
- package/Extra/ExtraUptimeRobot.js +59 -0
- package/Extra/Html/Classic/script.js +231 -0
- package/Extra/Html/Classic/style.css +8 -0
- package/Extra/PM2/ecosystem.config.js +23 -0
- package/Extra/Security/Index.js +174 -0
- package/Extra/Security/Step_1.js +15 -0
- package/Extra/Security/Step_2.js +23 -0
- package/Extra/Security/Step_3.js +23 -0
- package/Extra/Src/History.js +115 -0
- package/Extra/Src/Last-Run.js +65 -0
- package/Extra/Src/Premium.js +84 -0
- package/Extra/Src/SecurityCheck.js +2 -0
- package/Func/AcceptAgreement.js +32 -0
- package/Func/ClearCache.js +64 -0
- package/Func/ReportV1.js +54 -0
- package/LICENSE +21 -0
- package/LICENSE.md +23 -0
- package/Language/index.json +176 -0
- package/OldSecurity.js +100 -0
- package/README.md +129 -0
- package/SECURITY.md +21 -0
- package/broadcast.js +38 -0
- package/index.js +1332 -0
- package/logger.js +65 -0
- package/package.json +191 -0
- package/src/Horizon_Data.js +123 -0
- package/src/Premium.js +30 -0
- package/src/Screenshot.js +85 -0
- package/src/addExternalModule.js +16 -0
- package/src/addUserToGroup.js +79 -0
- package/src/changeAdminStatus.js +79 -0
- package/src/changeArchivedStatus.js +41 -0
- package/src/changeAvt.js +85 -0
- package/src/changeBio.js +65 -0
- package/src/changeBlockedStatus.js +36 -0
- package/src/changeGroupImage.js +106 -0
- package/src/changeNickname.js +45 -0
- package/src/changeThreadColor.js +62 -0
- package/src/changeThreadEmoji.js +42 -0
- package/src/createNewGroup.js +70 -0
- package/src/createPoll.js +60 -0
- package/src/deleteMessage.js +45 -0
- package/src/deleteThread.js +43 -0
- package/src/forwardAttachment.js +48 -0
- package/src/getAccessToken.js +32 -0
- package/src/getCurrentUserID.js +7 -0
- package/src/getEmojiUrl.js +27 -0
- package/src/getFriendsList.js +73 -0
- package/src/getMessage.js +80 -0
- package/src/getThreadHistory.js +537 -0
- package/src/getThreadInfo.js +348 -0
- package/src/getThreadList.js +213 -0
- package/src/getThreadMain.js +219 -0
- package/src/getThreadPictures.js +59 -0
- package/src/getUID.js +59 -0
- package/src/getUserID.js +62 -0
- package/src/getUserInfo.js +129 -0
- package/src/getUserInfoMain.js +65 -0
- package/src/getUserInfoV2.js +36 -0
- package/src/getUserInfoV3.js +63 -0
- package/src/getUserInfoV4.js +55 -0
- package/src/getUserInfoV5.js +61 -0
- package/src/handleFriendRequest.js +46 -0
- package/src/handleMessageRequest.js +49 -0
- package/src/httpGet.js +49 -0
- package/src/httpPost.js +48 -0
- package/src/httpPostFormData.js +41 -0
- package/src/listenMqtt.js +702 -0
- package/src/logout.js +68 -0
- package/src/markAsDelivered.js +48 -0
- package/src/markAsRead.js +70 -0
- package/src/markAsReadAll.js +43 -0
- package/src/markAsSeen.js +51 -0
- package/src/muteThread.js +47 -0
- package/src/removeUserFromGroup.js +49 -0
- package/src/resolvePhotoUrl.js +37 -0
- package/src/searchForThread.js +43 -0
- package/src/sendMessage.js +334 -0
- package/src/sendTypingIndicator.js +80 -0
- package/src/setMessageReaction.js +109 -0
- package/src/setPostReaction.js +102 -0
- package/src/setTitle.js +74 -0
- package/src/threadColors.js +39 -0
- package/src/unfriend.js +43 -0
- package/src/unsendMessage.js +40 -0
- package/utils.js +1648 -0
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 7 | 
            +
              return function deleteThread(threadOrThreads, callback) {
         | 
| 8 | 
            +
                var resolveFunc = function () { };
         | 
| 9 | 
            +
                var rejectFunc = function () { };
         | 
| 10 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 11 | 
            +
                  resolveFunc = resolve;
         | 
| 12 | 
            +
                  rejectFunc = reject;
         | 
| 13 | 
            +
                });
         | 
| 14 | 
            +
                if (!callback) {
         | 
| 15 | 
            +
                  callback = function (err) {
         | 
| 16 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 17 | 
            +
                    resolveFunc();
         | 
| 18 | 
            +
                  };
         | 
| 19 | 
            +
                }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                var form = {
         | 
| 22 | 
            +
                  client: "mercury"
         | 
| 23 | 
            +
                };
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                if (utils.getType(threadOrThreads) !== "Array") threadOrThreads = [threadOrThreads];
         | 
| 26 | 
            +
                for (var i = 0; i < threadOrThreads.length; i++) form["ids[" + i + "]"] = threadOrThreads[i];
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                defaultFuncs
         | 
| 29 | 
            +
                  .post("https://www.facebook.com/ajax/mercury/delete_thread.php", ctx.jar, form)
         | 
| 30 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 31 | 
            +
                  .then(function (resData) {
         | 
| 32 | 
            +
                    if (resData.error) throw resData;
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    return callback();
         | 
| 35 | 
            +
                  })
         | 
| 36 | 
            +
                  .catch(function (err) {
         | 
| 37 | 
            +
                    log.error("deleteThread", err);
         | 
| 38 | 
            +
                    return callback(err);
         | 
| 39 | 
            +
                  });
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                return returnPromise;
         | 
| 42 | 
            +
              };
         | 
| 43 | 
            +
            };
         | 
| @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 7 | 
            +
              return function forwardAttachment(attachmentID, userOrUsers, callback) {
         | 
| 8 | 
            +
                var resolveFunc = function () { };
         | 
| 9 | 
            +
                var rejectFunc = function () { };
         | 
| 10 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 11 | 
            +
                  resolveFunc = resolve;
         | 
| 12 | 
            +
                  rejectFunc = reject;
         | 
| 13 | 
            +
                });
         | 
| 14 | 
            +
                if (!callback) {
         | 
| 15 | 
            +
                  callback = function (err) {
         | 
| 16 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 17 | 
            +
                    resolveFunc();
         | 
| 18 | 
            +
                  };
         | 
| 19 | 
            +
                }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                var form = {
         | 
| 22 | 
            +
                  attachment_id: attachmentID
         | 
| 23 | 
            +
                };
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                if (utils.getType(userOrUsers) !== "Array") userOrUsers = [userOrUsers];
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                var timestamp = Math.floor(Date.now() / 1000);
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                //That's good, the key of the array is really timestmap in seconds + index
         | 
| 30 | 
            +
                //Probably time when the attachment will be sent?
         | 
| 31 | 
            +
                for (var i = 0; i < userOrUsers.length; i++) form["recipient_map[" + (timestamp + i) + "]"] = userOrUsers[i];
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                defaultFuncs
         | 
| 34 | 
            +
                  .post("https://www.facebook.com/mercury/attachments/forward/", ctx.jar, form)
         | 
| 35 | 
            +
                  .then(utils.parseAndCheckLogin(ctx.jar, defaultFuncs))
         | 
| 36 | 
            +
                  .then(function (resData) {
         | 
| 37 | 
            +
                    if (resData.error) throw resData;
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    return callback();
         | 
| 40 | 
            +
                  })
         | 
| 41 | 
            +
                  .catch(function (err) {
         | 
| 42 | 
            +
                    log.error("forwardAttachment", err);
         | 
| 43 | 
            +
                    return callback(err);
         | 
| 44 | 
            +
                  });
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                return returnPromise;
         | 
| 47 | 
            +
              };
         | 
| 48 | 
            +
            };
         | 
| @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            /* eslint-disable linebreak-style */
         | 
| 2 | 
            +
            "use strict";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            var utils = require("../utils");
         | 
| 5 | 
            +
            var log = require("npmlog");
         | 
| 6 | 
            +
             | 
| 7 | 
            +
             | 
| 8 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 9 | 
            +
                return function getAccessToken(callback) {
         | 
| 10 | 
            +
                  var resolveFunc = function () { };
         | 
| 11 | 
            +
                  var rejectFunc = function () { };
         | 
| 12 | 
            +
                  var returnPromise = new Promise(function (resolve, reject) {
         | 
| 13 | 
            +
                    resolveFunc = resolve;
         | 
| 14 | 
            +
                    rejectFunc = reject;
         | 
| 15 | 
            +
                  });
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
                  if (!callback) {
         | 
| 18 | 
            +
                    callback = function (err, userInfo) {
         | 
| 19 | 
            +
                      if (err) return rejectFunc(err);
         | 
| 20 | 
            +
                      resolveFunc(userInfo);
         | 
| 21 | 
            +
                    };
         | 
| 22 | 
            +
                  }
         | 
| 23 | 
            +
                try {
         | 
| 24 | 
            +
                  var { getAccessToken } = require('../Extra/ExtraAddons');
         | 
| 25 | 
            +
                  getAccessToken(ctx.jar,ctx,defaultFuncs).then(data => callback(null,data));
         | 
| 26 | 
            +
                }
         | 
| 27 | 
            +
                catch (e) {
         | 
| 28 | 
            +
                  callback(null, e);
         | 
| 29 | 
            +
                }
         | 
| 30 | 
            +
                return returnPromise;
         | 
| 31 | 
            +
                };
         | 
| 32 | 
            +
              };
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            const util = require("util");
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module.exports = function () {
         | 
| 6 | 
            +
              return function getEmojiUrl(c, size, pixelRatio) {
         | 
| 7 | 
            +
                /*
         | 
| 8 | 
            +
                 Resolves Facebook Messenger emoji image asset URL for an emoji character.
         | 
| 9 | 
            +
                 Supported sizes are 32, 64, and 128.
         | 
| 10 | 
            +
                 Supported pixel ratios are '1.0' and '1.5' (possibly more; haven't tested)
         | 
| 11 | 
            +
                 */
         | 
| 12 | 
            +
                const baseUrl = "https://static.xx.fbcdn.net/images/emoji.php/v8/z%s/%s";
         | 
| 13 | 
            +
                pixelRatio = pixelRatio || "1.0";
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                let ending = util.format(
         | 
| 16 | 
            +
                  "%s/%s/%s.png",
         | 
| 17 | 
            +
                  pixelRatio,
         | 
| 18 | 
            +
                  size,
         | 
| 19 | 
            +
                  c.codePointAt(0).toString(16)
         | 
| 20 | 
            +
                );
         | 
| 21 | 
            +
                let base = 317426846;
         | 
| 22 | 
            +
                for (let i = 0; i < ending.length; i++) base = (base << 5) - base + ending.charCodeAt(i);
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                let hashed = (base & 255).toString(16);
         | 
| 25 | 
            +
                return util.format(baseUrl, hashed, ending);
         | 
| 26 | 
            +
              };
         | 
| 27 | 
            +
            };
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            //var cheerio = require("cheerio");
         | 
| 4 | 
            +
            var utils = require("../utils");
         | 
| 5 | 
            +
            var log = require("npmlog");
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            // [almost] copy pasted from one of FB's minified file (GenderConst)
         | 
| 8 | 
            +
            var GENDERS = {
         | 
| 9 | 
            +
              0: "unknown",
         | 
| 10 | 
            +
              1: "female_singular",
         | 
| 11 | 
            +
              2: "male_singular",
         | 
| 12 | 
            +
              3: "female_singular_guess",
         | 
| 13 | 
            +
              4: "male_singular_guess",
         | 
| 14 | 
            +
              5: "mixed",
         | 
| 15 | 
            +
              6: "neuter_singular",
         | 
| 16 | 
            +
              7: "unknown_singular",
         | 
| 17 | 
            +
              8: "female_plural",
         | 
| 18 | 
            +
              9: "male_plural",
         | 
| 19 | 
            +
              10: "neuter_plural",
         | 
| 20 | 
            +
              11: "unknown_plural"
         | 
| 21 | 
            +
            };
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            function formatData(obj) {
         | 
| 24 | 
            +
              return Object.keys(obj).map(function (key) {
         | 
| 25 | 
            +
                var user = obj[key];
         | 
| 26 | 
            +
                return {
         | 
| 27 | 
            +
                  alternateName: user.alternateName,
         | 
| 28 | 
            +
                  firstName: user.firstName,
         | 
| 29 | 
            +
                  gender: GENDERS[user.gender],
         | 
| 30 | 
            +
                  userID: utils.formatID(user.id.toString()),
         | 
| 31 | 
            +
                  isFriend: user.is_friend != null && user.is_friend ? true : false,
         | 
| 32 | 
            +
                  fullName: user.name,
         | 
| 33 | 
            +
                  profilePicture: user.thumbSrc,
         | 
| 34 | 
            +
                  type: user.type,
         | 
| 35 | 
            +
                  profileUrl: user.uri,
         | 
| 36 | 
            +
                  vanity: user.vanity,
         | 
| 37 | 
            +
                  isBirthday: !!user.is_birthday
         | 
| 38 | 
            +
                };
         | 
| 39 | 
            +
              });
         | 
| 40 | 
            +
            }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 43 | 
            +
              return function getFriendsList(callback) {
         | 
| 44 | 
            +
                var resolveFunc = function () { };
         | 
| 45 | 
            +
                var rejectFunc = function () { };
         | 
| 46 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 47 | 
            +
                  resolveFunc = resolve;
         | 
| 48 | 
            +
                  rejectFunc = reject;
         | 
| 49 | 
            +
                });
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                if (!callback) {
         | 
| 52 | 
            +
                  callback = function (err, friendList) {
         | 
| 53 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 54 | 
            +
                    resolveFunc(friendList);
         | 
| 55 | 
            +
                  };
         | 
| 56 | 
            +
                }
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                defaultFuncs
         | 
| 59 | 
            +
                  .postFormData("https://www.facebook.com/chat/user_info_all", ctx.jar, {}, { viewer: ctx.userID })
         | 
| 60 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 61 | 
            +
                  .then(function (resData) {
         | 
| 62 | 
            +
                    if (!resData) throw { error: "getFriendsList returned empty object." };
         | 
| 63 | 
            +
                    if (resData.error) throw resData;
         | 
| 64 | 
            +
                    callback(null, formatData(resData.payload));
         | 
| 65 | 
            +
                  })
         | 
| 66 | 
            +
                  .catch(function (err) {
         | 
| 67 | 
            +
                    log.error("getFriendsList", "Lỗi getFriendsList Có Thể Do Bạn Spam Quá Nhiều ! Hãy Hạn Chế !");
         | 
| 68 | 
            +
                    return callback(err);
         | 
| 69 | 
            +
                  });
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                return returnPromise;
         | 
| 72 | 
            +
              };
         | 
| 73 | 
            +
            };
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            /* eslint-disable linebreak-style */
         | 
| 2 | 
            +
            "use strict";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            var utils = require("../utils");
         | 
| 5 | 
            +
            var log = require("npmlog");
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module.exports = function(defaultFuncs, api, ctx) {
         | 
| 8 | 
            +
                return function getMessage(threadID, messageID, callback) {
         | 
| 9 | 
            +
                  if (!callback) {
         | 
| 10 | 
            +
                    return callback({ error: "getMessage: need callback" });
         | 
| 11 | 
            +
                  }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  if (!threadID || !messageID) {
         | 
| 14 | 
            +
                    return callback({ error: "getMessage: need threadID and messageID" });
         | 
| 15 | 
            +
                  }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  const form = {
         | 
| 18 | 
            +
                    "av": ctx.globalOptions.pageID,
         | 
| 19 | 
            +
                    "queries": JSON.stringify({
         | 
| 20 | 
            +
                      "o0": {
         | 
| 21 | 
            +
                        //This doc_id is valid as of ? (prob January 18, 2020)
         | 
| 22 | 
            +
                        "doc_id": "1768656253222505",
         | 
| 23 | 
            +
                        "query_params": {
         | 
| 24 | 
            +
                          "thread_and_message_id": {
         | 
| 25 | 
            +
                            "thread_id": threadID,
         | 
| 26 | 
            +
                            "message_id": messageID,
         | 
| 27 | 
            +
                          }
         | 
| 28 | 
            +
                        }
         | 
| 29 | 
            +
                      }
         | 
| 30 | 
            +
                    })
         | 
| 31 | 
            +
                  };
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  defaultFuncs
         | 
| 34 | 
            +
                  .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
         | 
| 35 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 36 | 
            +
                  .then((resData) => {
         | 
| 37 | 
            +
                    if (resData[resData.length - 1].error_results > 0) {
         | 
| 38 | 
            +
                      throw resData[0].o0.errors;
         | 
| 39 | 
            +
                    }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    if (resData[resData.length - 1].successful_results === 0) {
         | 
| 42 | 
            +
                      throw { error: "getMessage: there was no successful_results", res: resData };
         | 
| 43 | 
            +
                    }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    var fetchData = resData[0].o0.data.message;
         | 
| 46 | 
            +
                    if (fetchData) {
         | 
| 47 | 
            +
                      (!ctx.globalOptions.selfListen &&
         | 
| 48 | 
            +
                        fetchData.message_sender.id.toString() === ctx.userID) ||
         | 
| 49 | 
            +
                        !ctx.loggedIn ?
         | 
| 50 | 
            +
                        undefined :
         | 
| 51 | 
            +
                        (function () { callback(null, {
         | 
| 52 | 
            +
                            threadID: threadID,
         | 
| 53 | 
            +
                            messageID: fetchData.message_id,
         | 
| 54 | 
            +
                            senderID: fetchData.message_sender.id,
         | 
| 55 | 
            +
                            attachments: fetchData.blob_attachments.map(att => {
         | 
| 56 | 
            +
                                var x;
         | 
| 57 | 
            +
                                try {
         | 
| 58 | 
            +
                                    x = utils._formatAttachment(att);
         | 
| 59 | 
            +
                                } catch (ex) {
         | 
| 60 | 
            +
                                    x = att;
         | 
| 61 | 
            +
                                    x.error = ex;
         | 
| 62 | 
            +
                                    x.type = "unknown";
         | 
| 63 | 
            +
                                }
         | 
| 64 | 
            +
                                return x;
         | 
| 65 | 
            +
                            }),
         | 
| 66 | 
            +
                            body: fetchData.message.text,
         | 
| 67 | 
            +
                            mentions: fetchData.message.ranges,
         | 
| 68 | 
            +
                            timestamp: fetchData.timestamp_precise,
         | 
| 69 | 
            +
                            messageReply: fetchData.replied_to_message,
         | 
| 70 | 
            +
                            raw: fetchData,
         | 
| 71 | 
            +
                        }); })();
         | 
| 72 | 
            +
                    }
         | 
| 73 | 
            +
                })
         | 
| 74 | 
            +
                .catch((err) => {
         | 
| 75 | 
            +
                  log.error("getMessage", err);
         | 
| 76 | 
            +
                  callback(err);
         | 
| 77 | 
            +
                });
         | 
| 78 | 
            +
             | 
| 79 | 
            +
              };
         | 
| 80 | 
            +
            }; 
         |