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,219 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
            // tương lai đi rồi fix ahahha
         | 
| 6 | 
            +
            function formatEventReminders(reminder) {
         | 
| 7 | 
            +
              return {
         | 
| 8 | 
            +
                reminderID: reminder.id,
         | 
| 9 | 
            +
                eventCreatorID: reminder.lightweight_event_creator.id,
         | 
| 10 | 
            +
                time: reminder.time,
         | 
| 11 | 
            +
                eventType: reminder.lightweight_event_type.toLowerCase(),
         | 
| 12 | 
            +
                locationName: reminder.location_name,
         | 
| 13 | 
            +
                // @TODO verify this
         | 
| 14 | 
            +
                locationCoordinates: reminder.location_coordinates,
         | 
| 15 | 
            +
                locationPage: reminder.location_page,
         | 
| 16 | 
            +
                eventStatus: reminder.lightweight_event_status.toLowerCase(),
         | 
| 17 | 
            +
                note: reminder.note,
         | 
| 18 | 
            +
                repeatMode: reminder.repeat_mode.toLowerCase(),
         | 
| 19 | 
            +
                eventTitle: reminder.event_title,
         | 
| 20 | 
            +
                triggerMessage: reminder.trigger_message,
         | 
| 21 | 
            +
                secondsToNotifyBefore: reminder.seconds_to_notify_before,
         | 
| 22 | 
            +
                allowsRsvp: reminder.allows_rsvp,
         | 
| 23 | 
            +
                relatedEvent: reminder.related_event,
         | 
| 24 | 
            +
                members: reminder.event_reminder_members.edges.map(function(member) {
         | 
| 25 | 
            +
                  return {
         | 
| 26 | 
            +
                    memberID: member.node.id,
         | 
| 27 | 
            +
                    state: member.guest_list_state.toLowerCase()
         | 
| 28 | 
            +
                  };
         | 
| 29 | 
            +
                })
         | 
| 30 | 
            +
              };
         | 
| 31 | 
            +
            }
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            function formatThreadGraphQLResponse(data) {
         | 
| 34 | 
            +
              try{
         | 
| 35 | 
            +
                var messageThread = data.message_thread;
         | 
| 36 | 
            +
              } catch (err){
         | 
| 37 | 
            +
                console.error("GetThreadInfoGraphQL", "Can't get this thread info!");
         | 
| 38 | 
            +
                return {err: err};
         | 
| 39 | 
            +
              }
         | 
| 40 | 
            +
              var threadID = messageThread.thread_key.thread_fbid
         | 
| 41 | 
            +
                ? messageThread.thread_key.thread_fbid
         | 
| 42 | 
            +
                : messageThread.thread_key.other_user_id;
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              // Remove me
         | 
| 45 | 
            +
              var lastM = messageThread.last_message;
         | 
| 46 | 
            +
              var snippetID =
         | 
| 47 | 
            +
                lastM &&
         | 
| 48 | 
            +
                lastM.nodes &&
         | 
| 49 | 
            +
                lastM.nodes[0] &&
         | 
| 50 | 
            +
                lastM.nodes[0].message_sender &&
         | 
| 51 | 
            +
                lastM.nodes[0].message_sender.messaging_actor
         | 
| 52 | 
            +
                  ? lastM.nodes[0].message_sender.messaging_actor.id
         | 
| 53 | 
            +
                  : null;
         | 
| 54 | 
            +
              var snippetText =
         | 
| 55 | 
            +
                lastM && lastM.nodes && lastM.nodes[0] ? lastM.nodes[0].snippet : null;
         | 
| 56 | 
            +
              var lastR = messageThread.last_read_receipt;
         | 
| 57 | 
            +
              var lastReadTimestamp =
         | 
| 58 | 
            +
                lastR && lastR.nodes && lastR.nodes[0] && lastR.nodes[0].timestamp_precise
         | 
| 59 | 
            +
                  ? lastR.nodes[0].timestamp_precise
         | 
| 60 | 
            +
                  : null;
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              return {
         | 
| 63 | 
            +
                threadID: threadID,
         | 
| 64 | 
            +
                threadName: messageThread.name,
         | 
| 65 | 
            +
                participantIDs: messageThread.all_participants.edges.map(d => d.node.messaging_actor.id),
         | 
| 66 | 
            +
                userInfo: messageThread.all_participants.edges.map(d => ({
         | 
| 67 | 
            +
                  id: d.node.messaging_actor.id,
         | 
| 68 | 
            +
                  name: d.node.messaging_actor.name,
         | 
| 69 | 
            +
                  firstName: d.node.messaging_actor.short_name,
         | 
| 70 | 
            +
                  vanity: d.node.messaging_actor.username,
         | 
| 71 | 
            +
                  thumbSrc: d.node.messaging_actor.big_image_src.uri,
         | 
| 72 | 
            +
                  profileUrl: d.node.messaging_actor.big_image_src.uri,
         | 
| 73 | 
            +
                  gender: d.node.messaging_actor.gender,
         | 
| 74 | 
            +
                  type: d.node.messaging_actor.__typename,
         | 
| 75 | 
            +
                  isFriend: d.node.messaging_actor.is_viewer_friend,
         | 
| 76 | 
            +
                  isBirthday: !!d.node.messaging_actor.is_birthday //not sure?
         | 
| 77 | 
            +
                })),
         | 
| 78 | 
            +
                unreadCount: messageThread.unread_count,
         | 
| 79 | 
            +
                messageCount: messageThread.messages_count,
         | 
| 80 | 
            +
                timestamp: messageThread.updated_time_precise,
         | 
| 81 | 
            +
                muteUntil: messageThread.mute_until,
         | 
| 82 | 
            +
                isGroup: messageThread.thread_type == "GROUP",
         | 
| 83 | 
            +
                isSubscribed: messageThread.is_viewer_subscribed,
         | 
| 84 | 
            +
                isArchived: messageThread.has_viewer_archived,
         | 
| 85 | 
            +
                folder: messageThread.folder,
         | 
| 86 | 
            +
                cannotReplyReason: messageThread.cannot_reply_reason,
         | 
| 87 | 
            +
                eventReminders: messageThread.event_reminders
         | 
| 88 | 
            +
                  ? messageThread.event_reminders.nodes.map(formatEventReminders)
         | 
| 89 | 
            +
                  : null,
         | 
| 90 | 
            +
                emoji: messageThread.customization_info
         | 
| 91 | 
            +
                  ? messageThread.customization_info.emoji
         | 
| 92 | 
            +
                  : null,
         | 
| 93 | 
            +
                color:
         | 
| 94 | 
            +
                  messageThread.customization_info &&
         | 
| 95 | 
            +
                  messageThread.customization_info.outgoing_bubble_color
         | 
| 96 | 
            +
                    ? messageThread.customization_info.outgoing_bubble_color.slice(2)
         | 
| 97 | 
            +
                    : null,
         | 
| 98 | 
            +
                nicknames:
         | 
| 99 | 
            +
                  messageThread.customization_info &&
         | 
| 100 | 
            +
                  messageThread.customization_info.participant_customizations
         | 
| 101 | 
            +
                    ? messageThread.customization_info.participant_customizations.reduce(
         | 
| 102 | 
            +
                        function(res, val) {
         | 
| 103 | 
            +
                          if (val.nickname) res[val.participant_id] = val.nickname;
         | 
| 104 | 
            +
                          return res;
         | 
| 105 | 
            +
                        },
         | 
| 106 | 
            +
                        {}
         | 
| 107 | 
            +
                      )
         | 
| 108 | 
            +
                    : {},
         | 
| 109 | 
            +
                adminIDs: messageThread.thread_admins,
         | 
| 110 | 
            +
                approvalMode: Boolean(messageThread.approval_mode),
         | 
| 111 | 
            +
                approvalQueue: messageThread.group_approval_queue.nodes.map(a => ({
         | 
| 112 | 
            +
                  inviterID: a.inviter.id,
         | 
| 113 | 
            +
                  requesterID: a.requester.id,
         | 
| 114 | 
            +
                  timestamp: a.request_timestamp,
         | 
| 115 | 
            +
                  request_source: a.request_source // @Undocumented
         | 
| 116 | 
            +
                })),
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                // @Undocumented
         | 
| 119 | 
            +
                reactionsMuteMode: messageThread.reactions_mute_mode.toLowerCase(),
         | 
| 120 | 
            +
                mentionsMuteMode: messageThread.mentions_mute_mode.toLowerCase(),
         | 
| 121 | 
            +
                isPinProtected: messageThread.is_pin_protected,
         | 
| 122 | 
            +
                relatedPageThread: messageThread.related_page_thread,
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                // @Legacy
         | 
| 125 | 
            +
                name: messageThread.name,
         | 
| 126 | 
            +
                snippet: snippetText,
         | 
| 127 | 
            +
                snippetSender: snippetID,
         | 
| 128 | 
            +
                snippetAttachments: [],
         | 
| 129 | 
            +
                serverTimestamp: messageThread.updated_time_precise,
         | 
| 130 | 
            +
                imageSrc: messageThread.image ? messageThread.image.uri : null,
         | 
| 131 | 
            +
                isCanonicalUser: messageThread.is_canonical_neo_user,
         | 
| 132 | 
            +
                isCanonical: messageThread.thread_type != "GROUP",
         | 
| 133 | 
            +
                recipientsLoadable: true,
         | 
| 134 | 
            +
                hasEmailParticipant: false,
         | 
| 135 | 
            +
                readOnly: false,
         | 
| 136 | 
            +
                canReply: messageThread.cannot_reply_reason == null,
         | 
| 137 | 
            +
                lastMessageTimestamp: messageThread.last_message
         | 
| 138 | 
            +
                  ? messageThread.last_message.timestamp_precise
         | 
| 139 | 
            +
                  : null,
         | 
| 140 | 
            +
                lastMessageType: "message",
         | 
| 141 | 
            +
                lastReadTimestamp: lastReadTimestamp,
         | 
| 142 | 
            +
                threadType: messageThread.thread_type == "GROUP" ? 2 : 1,
         | 
| 143 | 
            +
                TimeCreate: Date.now(),
         | 
| 144 | 
            +
                TimeUpdate: Date.now()
         | 
| 145 | 
            +
              };
         | 
| 146 | 
            +
            }
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            module.exports = function(defaultFuncs, api, ctx) {
         | 
| 149 | 
            +
              return function getThreadInfoGraphQL(threadID, callback) {
         | 
| 150 | 
            +
                var resolveFunc = function(){};
         | 
| 151 | 
            +
                var rejectFunc = function(){};
         | 
| 152 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 153 | 
            +
                  resolveFunc = resolve;
         | 
| 154 | 
            +
                  rejectFunc = reject;
         | 
| 155 | 
            +
                });
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                if (utils.getType(callback) != "Function" && utils.getType(callback) != "AsyncFunction") {
         | 
| 158 | 
            +
                  callback = function (err, data) {
         | 
| 159 | 
            +
                    if (err) {
         | 
| 160 | 
            +
                      return rejectFunc(err);
         | 
| 161 | 
            +
                    }
         | 
| 162 | 
            +
                    resolveFunc(data);
         | 
| 163 | 
            +
                  };
         | 
| 164 | 
            +
                }
         | 
| 165 | 
            +
                
         | 
| 166 | 
            +
                //! được tìm thấy vào giữa tháng 8/2022 bởi @KanzuWakazaki - đã được chia sẻ cho @D-Jukie và Horizon Team Public group 🤴
         | 
| 167 | 
            +
                //* những code tương tự muliti thread như này đều có thể là copy idea 🐧
         | 
| 168 | 
            +
                //* đã áp dụng vào fca mới(cloud - fca(private)) vào cuối tháng 8/2022 bởi @IteralingCode(Hidden Member( always :) )) - Synthetic 4 - @Horizon Team
         | 
| 169 | 
            +
                //*cập nhật dự án bị bỏ rơi này vào ngày 19/11/2022 bởi @KanzuWakazaki(Owner) - Synthetic 1  - @Horizon Team nhằm đáp ứng nhu cầu của client !
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                  if (utils.getType(threadID) !== "Array") threadID = [threadID];
         | 
| 172 | 
            +
                  
         | 
| 173 | 
            +
                  var Form = {};
         | 
| 174 | 
            +
                  var ThreadInfo = [];
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                  threadID.map(function (x,y) {
         | 
| 177 | 
            +
                    Form["o" + y] = {
         | 
| 178 | 
            +
                      doc_id: "3449967031715030",
         | 
| 179 | 
            +
                      query_params: {
         | 
| 180 | 
            +
                        id: x,
         | 
| 181 | 
            +
                        message_limit: 0,
         | 
| 182 | 
            +
                        load_messages: false,
         | 
| 183 | 
            +
                        load_read_receipts: false,
         | 
| 184 | 
            +
                        before: null
         | 
| 185 | 
            +
                      }
         | 
| 186 | 
            +
                    };
         | 
| 187 | 
            +
                  });
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                var form = {
         | 
| 190 | 
            +
                  queries: JSON.stringify(Form),
         | 
| 191 | 
            +
                  batch_name: "MessengerGraphQLThreadFetcher"
         | 
| 192 | 
            +
                };
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                defaultFuncs
         | 
| 195 | 
            +
                  .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
         | 
| 196 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 197 | 
            +
                  .then(function(resData) {
         | 
| 198 | 
            +
                  if (resData.error) {
         | 
| 199 | 
            +
                    callback(null,resData.error);
         | 
| 200 | 
            +
                    throw resData;
         | 
| 201 | 
            +
                  }
         | 
| 202 | 
            +
                  resData = resData.splice(0, resData.length - 1);
         | 
| 203 | 
            +
                  resData.sort((a, b) => { return Object.keys(a)[0].localeCompare(Object.keys(b)[0]); });
         | 
| 204 | 
            +
                  resData.map(function (x,y) {
         | 
| 205 | 
            +
                    ThreadInfo.push(formatThreadGraphQLResponse(x["o"+y].data));
         | 
| 206 | 
            +
                  });
         | 
| 207 | 
            +
                  if (Object.keys(resData).length == 1) {
         | 
| 208 | 
            +
                    callback(null, ThreadInfo[0]);
         | 
| 209 | 
            +
                  } else {
         | 
| 210 | 
            +
                  callback(null, ThreadInfo);
         | 
| 211 | 
            +
                  }
         | 
| 212 | 
            +
                })
         | 
| 213 | 
            +
                .catch(function(err) {
         | 
| 214 | 
            +
                  log.error("getThreadInfoGraphQL", "Lỗi: getThreadInfoGraphQL Có Thể Do Bạn Spam Quá Nhiều, Hãy Thử Lại !");
         | 
| 215 | 
            +
                return callback(err);
         | 
| 216 | 
            +
              });
         | 
| 217 | 
            +
              return returnPromise;
         | 
| 218 | 
            +
              };
         | 
| 219 | 
            +
            };
         | 
| @@ -0,0 +1,59 @@ | |
| 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 getThreadPictures(threadID, offset, limit, 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 | 
            +
             | 
| 15 | 
            +
                if (!callback) {
         | 
| 16 | 
            +
                  callback = function (err, data) {
         | 
| 17 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 18 | 
            +
                    resolveFunc(data);
         | 
| 19 | 
            +
                  };
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                var form = {
         | 
| 23 | 
            +
                  thread_id: threadID,
         | 
| 24 | 
            +
                  offset: offset,
         | 
| 25 | 
            +
                  limit: limit
         | 
| 26 | 
            +
                };
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                defaultFuncs
         | 
| 29 | 
            +
                  .post("https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php", ctx.jar, form)
         | 
| 30 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 31 | 
            +
                  .then(function (resData) {
         | 
| 32 | 
            +
                    if (resData.error) throw resData;
         | 
| 33 | 
            +
                    return Promise.all(
         | 
| 34 | 
            +
                      resData.payload.imagesData.map(function (image) {
         | 
| 35 | 
            +
                        form = {
         | 
| 36 | 
            +
                          thread_id: threadID,
         | 
| 37 | 
            +
                          image_id: image.fbid
         | 
| 38 | 
            +
                        };
         | 
| 39 | 
            +
                        return defaultFuncs
         | 
| 40 | 
            +
                          .post("https://www.facebook.com/ajax/messaging/attachments/sharedphotos.php", ctx.jar, form)
         | 
| 41 | 
            +
                          .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 42 | 
            +
                          .then(function (resData) {
         | 
| 43 | 
            +
                            if (resData.error) throw resData;
         | 
| 44 | 
            +
                            // the response is pretty messy
         | 
| 45 | 
            +
                            var queryThreadID = resData.jsmods.require[0][3][1].query_metadata.query_path[0].message_thread;
         | 
| 46 | 
            +
                            var imageData = resData.jsmods.require[0][3][1].query_results[queryThreadID].message_images.edges[0].node.image2;
         | 
| 47 | 
            +
                            return imageData;
         | 
| 48 | 
            +
                          });
         | 
| 49 | 
            +
                      })
         | 
| 50 | 
            +
                    );
         | 
| 51 | 
            +
                  })
         | 
| 52 | 
            +
                  .then(resData => callback(null, resData))
         | 
| 53 | 
            +
                  .catch(function (err) {
         | 
| 54 | 
            +
                    log.error("Error in getThreadPictures", err);
         | 
| 55 | 
            +
                    callback(err);
         | 
| 56 | 
            +
                  });
         | 
| 57 | 
            +
                return returnPromise;
         | 
| 58 | 
            +
              };
         | 
| 59 | 
            +
            };
         | 
    
        package/src/getUID.js
    ADDED
    
    | @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            /* eslint-disable linebreak-style */
         | 
| 2 | 
            +
            "use strict";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module.exports = function (_defaultFuncs, api, _ctx) {
         | 
| 5 | 
            +
                return function getUID(link, callback) {
         | 
| 6 | 
            +
                  var resolveFunc = function () { };
         | 
| 7 | 
            +
                  var rejectFunc = function () { };
         | 
| 8 | 
            +
                  var returnPromise = new Promise(function (resolve, reject) {
         | 
| 9 | 
            +
                    resolveFunc = resolve;
         | 
| 10 | 
            +
                    rejectFunc = reject;
         | 
| 11 | 
            +
                  });
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
                  if (!callback) {
         | 
| 14 | 
            +
                    callback = function (err, uid) {
         | 
| 15 | 
            +
                      if (err) return rejectFunc(err);
         | 
| 16 | 
            +
                      resolveFunc(uid);
         | 
| 17 | 
            +
                    };
         | 
| 18 | 
            +
                  }
         | 
| 19 | 
            +
                  
         | 
| 20 | 
            +
                try {
         | 
| 21 | 
            +
                    var Link = String(link);
         | 
| 22 | 
            +
                    var FindUID = require('../Extra/ExtraFindUID');
         | 
| 23 | 
            +
                    if (Link.includes('facebook.com') || Link.includes('Facebook.com') || Link.includes('fb')) {
         | 
| 24 | 
            +
                        var LinkSplit = Link.split('/');
         | 
| 25 | 
            +
                        if (LinkSplit.indexOf("https:") == 0) {
         | 
| 26 | 
            +
                          if (!isNaN(LinkSplit[3]) && !Link.split('=')[1]  && !isNaN(Link.split('=')[1])) {
         | 
| 27 | 
            +
                            api.sendMessage('Sai Link, Link Cần Có Định Dạng Như Sau: facebook.com/Lazic.Kanzu',global.Fca.Data.event.threadID,global.Fca.Data.event.messageID);
         | 
| 28 | 
            +
                            callback(null, String(4));
         | 
| 29 | 
            +
                          }
         | 
| 30 | 
            +
                          else if (!isNaN(Link.split('=')[1]) && Link.split('=')[1]) {
         | 
| 31 | 
            +
                            var Format = `https://www.facebook.com/profile.php?id=${Link.split('=')[1]}`;
         | 
| 32 | 
            +
                            FindUID(Format,api).then(function (data) {
         | 
| 33 | 
            +
                              callback(null, data);
         | 
| 34 | 
            +
                            });
         | 
| 35 | 
            +
                          } 
         | 
| 36 | 
            +
                          else {
         | 
| 37 | 
            +
                            FindUID(Link,api).then(function (data) {
         | 
| 38 | 
            +
                              callback(null, data);
         | 
| 39 | 
            +
                            });
         | 
| 40 | 
            +
                          }
         | 
| 41 | 
            +
                        }
         | 
| 42 | 
            +
                        else {
         | 
| 43 | 
            +
                            var Form = `https://www.facebook.com/${LinkSplit[1]}`;
         | 
| 44 | 
            +
                            FindUID(Form,api).then(function (data) {
         | 
| 45 | 
            +
                                callback(null, data);
         | 
| 46 | 
            +
                            });
         | 
| 47 | 
            +
                        }
         | 
| 48 | 
            +
                    }
         | 
| 49 | 
            +
                    else {
         | 
| 50 | 
            +
                        callback(null, null);
         | 
| 51 | 
            +
                        api.sendMessage('Sai Link, Link Cần Là Link Của Facebook',global.Fca.Data.event.threadID,global.Fca.Data.event.messageID)
         | 
| 52 | 
            +
                    }
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
                catch (e) {
         | 
| 55 | 
            +
                  return callback(null, e);
         | 
| 56 | 
            +
                }
         | 
| 57 | 
            +
                return returnPromise;
         | 
| 58 | 
            +
                };
         | 
| 59 | 
            +
              };
         | 
    
        package/src/getUserID.js
    ADDED
    
    | @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            function formatData(data) {
         | 
| 7 | 
            +
              return {
         | 
| 8 | 
            +
                userID: utils.formatID(data.uid.toString()),
         | 
| 9 | 
            +
                photoUrl: data.photo,
         | 
| 10 | 
            +
                indexRank: data.index_rank,
         | 
| 11 | 
            +
                name: data.text,
         | 
| 12 | 
            +
                isVerified: data.is_verified,
         | 
| 13 | 
            +
                profileUrl: data.path,
         | 
| 14 | 
            +
                category: data.category,
         | 
| 15 | 
            +
                score: data.score,
         | 
| 16 | 
            +
                type: data.type
         | 
| 17 | 
            +
              };
         | 
| 18 | 
            +
            }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 21 | 
            +
              return function getUserID(name, callback) {
         | 
| 22 | 
            +
                var resolveFunc = function () { };
         | 
| 23 | 
            +
                var rejectFunc = function () { };
         | 
| 24 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 25 | 
            +
                  resolveFunc = resolve;
         | 
| 26 | 
            +
                  rejectFunc = reject;
         | 
| 27 | 
            +
                });
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                if (!callback) {
         | 
| 30 | 
            +
                  callback = function (err, data) {
         | 
| 31 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 32 | 
            +
                    resolveFunc(data);
         | 
| 33 | 
            +
                  };
         | 
| 34 | 
            +
                }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                var form = {
         | 
| 37 | 
            +
                  value: name.toLowerCase(),
         | 
| 38 | 
            +
                  viewer: ctx.userID,
         | 
| 39 | 
            +
                  rsp: "search",
         | 
| 40 | 
            +
                  context: "search",
         | 
| 41 | 
            +
                  path: "/home.php",
         | 
| 42 | 
            +
                  request_id: utils.getGUID()
         | 
| 43 | 
            +
                };
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                defaultFuncs
         | 
| 46 | 
            +
                  .get("https://www.facebook.com/ajax/typeahead/search.php", ctx.jar, form)
         | 
| 47 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 48 | 
            +
                  .then(function (resData) {
         | 
| 49 | 
            +
                    if (resData.error) throw resData;
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    var data = resData.payload.entries;
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    callback(null, data.map(formatData));
         | 
| 54 | 
            +
                  })
         | 
| 55 | 
            +
                  .catch(function (err) {
         | 
| 56 | 
            +
                    log.error("getUserID", err);
         | 
| 57 | 
            +
                    return callback(err);
         | 
| 58 | 
            +
                  });
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                return returnPromise;
         | 
| 61 | 
            +
              };
         | 
| 62 | 
            +
            };
         | 
| @@ -0,0 +1,129 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            function formatData(data) {
         | 
| 7 | 
            +
              var retObj = {};
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              for (var prop in data) {
         | 
| 10 | 
            +
                // eslint-disable-next-line no-prototype-builtins
         | 
| 11 | 
            +
                if (data.hasOwnProperty(prop)) {
         | 
| 12 | 
            +
                  var innerObj = data[prop];
         | 
| 13 | 
            +
                  retObj[prop] = {
         | 
| 14 | 
            +
                    name: innerObj.name,
         | 
| 15 | 
            +
                    firstName: innerObj.firstName,
         | 
| 16 | 
            +
                    vanity: innerObj.vanity,
         | 
| 17 | 
            +
                    thumbSrc: innerObj.thumbSrc,
         | 
| 18 | 
            +
                    profileUrl: innerObj.uri,
         | 
| 19 | 
            +
                    gender: innerObj.gender,
         | 
| 20 | 
            +
                    type: innerObj.type,
         | 
| 21 | 
            +
                    isFriend: innerObj.is_friend,
         | 
| 22 | 
            +
                    isBirthday: !!innerObj.is_birthday
         | 
| 23 | 
            +
                  };
         | 
| 24 | 
            +
                }
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              return retObj;
         | 
| 28 | 
            +
            }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 31 | 
            +
              return function getUserInfo(id, callback) {
         | 
| 32 | 
            +
                var resolveFunc = function () { };
         | 
| 33 | 
            +
                var rejectFunc = function () { };
         | 
| 34 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 35 | 
            +
                  resolveFunc = resolve;
         | 
| 36 | 
            +
                  rejectFunc = reject;
         | 
| 37 | 
            +
                });
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                if (!callback) {
         | 
| 40 | 
            +
                  callback = function (err, userInfo) {
         | 
| 41 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 42 | 
            +
                    resolveFunc(userInfo);
         | 
| 43 | 
            +
                  };
         | 
| 44 | 
            +
                }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                if (utils.getType(id) !== "Array") id = [id];
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                var respone = [];
         | 
| 49 | 
            +
                var Nope = [];
         | 
| 50 | 
            +
                if (global.Fca.Data.Userinfo != undefined && global.Fca.Data.Userinfo.length != 0) {
         | 
| 51 | 
            +
                  if (id.length == 1) {
         | 
| 52 | 
            +
                    if (global.Fca.Data.Userinfo[0].some(i => i.id == id[0])) {
         | 
| 53 | 
            +
                      var Format = {}
         | 
| 54 | 
            +
                      Format[id[0]] = global.Fca.Data.Userinfo[0].find(i => i.id == id[0])
         | 
| 55 | 
            +
                      callback(null,Format);
         | 
| 56 | 
            +
                    }
         | 
| 57 | 
            +
                    else {
         | 
| 58 | 
            +
                      Nope.push(id[0]);
         | 
| 59 | 
            +
                    }
         | 
| 60 | 
            +
                  } 
         | 
| 61 | 
            +
                  else for (let ii of id) {
         | 
| 62 | 
            +
                    if (global.Fca.Data.Userinfo[0].some(i => i.id == ii)) {
         | 
| 63 | 
            +
                      let Format = {}
         | 
| 64 | 
            +
                      Format[id[ii]] = global.Fca.Data.Userinfo[0].find(i => i.id == ii);
         | 
| 65 | 
            +
                      respone.push(Format);
         | 
| 66 | 
            +
                    }
         | 
| 67 | 
            +
                    else {
         | 
| 68 | 
            +
                      Nope.push(ii);
         | 
| 69 | 
            +
                    }
         | 
| 70 | 
            +
                  }
         | 
| 71 | 
            +
                  if (Nope.length > 0 && respone > 0) {
         | 
| 72 | 
            +
                    var form = {};
         | 
| 73 | 
            +
                    Nope.map(function (v, i) {
         | 
| 74 | 
            +
                      form["ids[" + i + "]"] = v;
         | 
| 75 | 
            +
                    });
         | 
| 76 | 
            +
                    defaultFuncs
         | 
| 77 | 
            +
                      .post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
         | 
| 78 | 
            +
                      .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 79 | 
            +
                      .then(function (resData) {
         | 
| 80 | 
            +
                        if (resData.error) throw resData;
         | 
| 81 | 
            +
                        respone.push(formatData(resData.payload.profiles));
         | 
| 82 | 
            +
                        callback(null, respone);
         | 
| 83 | 
            +
                      })
         | 
| 84 | 
            +
                      .catch(function (err) {
         | 
| 85 | 
            +
                        log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
         | 
| 86 | 
            +
                        return callback(err, respone);
         | 
| 87 | 
            +
                      });
         | 
| 88 | 
            +
                    return returnPromise;
         | 
| 89 | 
            +
                  }
         | 
| 90 | 
            +
                  else if (Nope.length > 0 && respone <= 0) {
         | 
| 91 | 
            +
                    let form = {};
         | 
| 92 | 
            +
                    Nope.map(function (v, i) {
         | 
| 93 | 
            +
                      form["ids[" + i + "]"] = v;
         | 
| 94 | 
            +
                    });
         | 
| 95 | 
            +
                    defaultFuncs
         | 
| 96 | 
            +
                      .post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
         | 
| 97 | 
            +
                      .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 98 | 
            +
                      .then(function (resData) {
         | 
| 99 | 
            +
                        if (resData.error) throw resData;
         | 
| 100 | 
            +
                        callback(null, formatData(resData.payload.profiles));
         | 
| 101 | 
            +
                      })
         | 
| 102 | 
            +
                      .catch(function (err) {
         | 
| 103 | 
            +
                        log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
         | 
| 104 | 
            +
                        return callback(err, respone);
         | 
| 105 | 
            +
                      });
         | 
| 106 | 
            +
                    return returnPromise;
         | 
| 107 | 
            +
                  };
         | 
| 108 | 
            +
                  return returnPromise
         | 
| 109 | 
            +
                }
         | 
| 110 | 
            +
                else {
         | 
| 111 | 
            +
                  let form = {};
         | 
| 112 | 
            +
                    id.map(function (v, i) {
         | 
| 113 | 
            +
                      form["ids[" + i + "]"] = v;
         | 
| 114 | 
            +
                    });
         | 
| 115 | 
            +
                    defaultFuncs
         | 
| 116 | 
            +
                      .post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
         | 
| 117 | 
            +
                      .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 118 | 
            +
                      .then(function (resData) {
         | 
| 119 | 
            +
                        if (resData.error) throw resData;
         | 
| 120 | 
            +
                        callback(null, formatData(resData.payload.profiles));
         | 
| 121 | 
            +
                      })
         | 
| 122 | 
            +
                      .catch(function (err) {
         | 
| 123 | 
            +
                        log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
         | 
| 124 | 
            +
                        callback(err, formatData(resData.payload.profiles));
         | 
| 125 | 
            +
                      });
         | 
| 126 | 
            +
                    return returnPromise;
         | 
| 127 | 
            +
                }
         | 
| 128 | 
            +
              };
         | 
| 129 | 
            +
            };
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            "use strict";
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            var utils = require("../utils");
         | 
| 4 | 
            +
            var log = require("npmlog");
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            function formatData(data) {
         | 
| 7 | 
            +
              var retObj = {};
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              for (var prop in data) {
         | 
| 10 | 
            +
                // eslint-disable-next-line no-prototype-builtins
         | 
| 11 | 
            +
                if (data.hasOwnProperty(prop)) {
         | 
| 12 | 
            +
                  var innerObj = data[prop];
         | 
| 13 | 
            +
                  retObj[prop] = {
         | 
| 14 | 
            +
                    name: innerObj.name,
         | 
| 15 | 
            +
                    firstName: innerObj.firstName,
         | 
| 16 | 
            +
                    vanity: innerObj.vanity,
         | 
| 17 | 
            +
                    thumbSrc: innerObj.thumbSrc,
         | 
| 18 | 
            +
                    profileUrl: innerObj.uri,
         | 
| 19 | 
            +
                    gender: innerObj.gender,
         | 
| 20 | 
            +
                    type: innerObj.type,
         | 
| 21 | 
            +
                    isFriend: innerObj.is_friend,
         | 
| 22 | 
            +
                    isBirthday: !!innerObj.is_birthday
         | 
| 23 | 
            +
                  };
         | 
| 24 | 
            +
                }
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              return retObj;
         | 
| 28 | 
            +
            }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            module.exports = function (defaultFuncs, api, ctx) {
         | 
| 31 | 
            +
              return function getUserInfo(id, callback) {
         | 
| 32 | 
            +
                var resolveFunc = function () { };
         | 
| 33 | 
            +
                var rejectFunc = function () { };
         | 
| 34 | 
            +
                var returnPromise = new Promise(function (resolve, reject) {
         | 
| 35 | 
            +
                  resolveFunc = resolve;
         | 
| 36 | 
            +
                  rejectFunc = reject;
         | 
| 37 | 
            +
                });
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                if (!callback) {
         | 
| 40 | 
            +
                  callback = function (err, userInfo) {
         | 
| 41 | 
            +
                    if (err) return rejectFunc(err);
         | 
| 42 | 
            +
                    resolveFunc(userInfo);
         | 
| 43 | 
            +
                  };
         | 
| 44 | 
            +
                }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                if (utils.getType(id) !== "Array") id = [id];
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                var form = {};
         | 
| 49 | 
            +
                id.map(function (v, i) {
         | 
| 50 | 
            +
                  form["ids[" + i + "]"] = v;
         | 
| 51 | 
            +
                });
         | 
| 52 | 
            +
                defaultFuncs
         | 
| 53 | 
            +
                  .post("https://www.facebook.com/chat/user_info/", ctx.jar, form)
         | 
| 54 | 
            +
                  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 55 | 
            +
                  .then(function (resData) {
         | 
| 56 | 
            +
                    if (resData.error) throw resData;
         | 
| 57 | 
            +
                    return callback(null, formatData(resData.payload.profiles));
         | 
| 58 | 
            +
                  })
         | 
| 59 | 
            +
                  .catch(function (err) {
         | 
| 60 | 
            +
                    log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
         | 
| 61 | 
            +
                    return callback(err);
         | 
| 62 | 
            +
                  });
         | 
| 63 | 
            +
                return returnPromise;
         | 
| 64 | 
            +
              };
         | 
| 65 | 
            +
            };
         | 
| @@ -0,0 +1,36 @@ | |
| 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 getUserInfoV2(id, 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 { getInfo } = require('../Extra/ExtraAddons');
         | 
| 25 | 
            +
                  getInfo(id,ctx.jar,ctx,defaultFuncs)
         | 
| 26 | 
            +
                    .then(data => {
         | 
| 27 | 
            +
                      api.Horizon_Data([data], "Users", "Post");
         | 
| 28 | 
            +
                    return callback(null, data);
         | 
| 29 | 
            +
                  });
         | 
| 30 | 
            +
                }
         | 
| 31 | 
            +
                catch (e) {
         | 
| 32 | 
            +
                  return callback(null, e);
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
                return returnPromise;
         | 
| 35 | 
            +
                };
         | 
| 36 | 
            +
              };
         | 
| @@ -0,0 +1,63 @@ | |
| 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 getUserInfoV3(id,full, callback) {
         | 
| 10 | 
            +
                    if (utils.getType(full) !== "Boolean") {
         | 
| 11 | 
            +
                        throw {error: "getUserInfoV3: full must be a boolean"};
         | 
| 12 | 
            +
                    }
         | 
| 13 | 
            +
                    var resolveFunc = function () { };
         | 
| 14 | 
            +
                    var rejectFunc = function () { };
         | 
| 15 | 
            +
                    var returnPromise = new Promise(function (resolve, reject) {
         | 
| 16 | 
            +
                        resolveFunc = resolve;
         | 
| 17 | 
            +
                        rejectFunc = reject;
         | 
| 18 | 
            +
                    });
         | 
| 19 | 
            +
                
         | 
| 20 | 
            +
                    if (!callback) {
         | 
| 21 | 
            +
                        callback = function (err, userInfo) {
         | 
| 22 | 
            +
                        if (err) return rejectFunc(err);
         | 
| 23 | 
            +
                        resolveFunc(userInfo);
         | 
| 24 | 
            +
                        };
         | 
| 25 | 
            +
                    }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            var form = {
         | 
| 28 | 
            +
                "av": ctx.userID,
         | 
| 29 | 
            +
                "fb_api_caller_class": "RelayModern",
         | 
| 30 | 
            +
                "fb_api_req_friendly_name": "ProfileCometTimelineFeedRefetchQuery",
         | 
| 31 | 
            +
                "variables": JSON.stringify({ 
         | 
| 32 | 
            +
                    "id": String(id) 
         | 
| 33 | 
            +
                }),
         | 
| 34 | 
            +
                "doc_id": 5092283120862795
         | 
| 35 | 
            +
            }
         | 
| 36 | 
            +
            try {
         | 
| 37 | 
            +
                    defaultFuncs
         | 
| 38 | 
            +
                        .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
         | 
| 39 | 
            +
                        .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         | 
| 40 | 
            +
                        .then(function (resData) {
         | 
| 41 | 
            +
                        if (resData.error) throw resData;
         | 
| 42 | 
            +
                            switch (full) {
         | 
| 43 | 
            +
                                case true:
         | 
| 44 | 
            +
                                    callback(null, resData[0].data.node.timeline_list_feed_units.edges[0].node);
         | 
| 45 | 
            +
                                    break;
         | 
| 46 | 
            +
                                case false:
         | 
| 47 | 
            +
                                    callback(null, resData[0].data.node.timeline_list_feed_units.edges[0].node.comet_sections.context_layout.story.comet_sections.actor_photo.story.actors[0]);
         | 
| 48 | 
            +
                                    break;
         | 
| 49 | 
            +
                                default: 
         | 
| 50 | 
            +
                            throw {error: "getUserInfoV3: full must be a boolean"};
         | 
| 51 | 
            +
                            }
         | 
| 52 | 
            +
                        })
         | 
| 53 | 
            +
                        .catch(function (err) {
         | 
| 54 | 
            +
                            log.error("getUserInfo", "Lỗi: getUserInfo Có Thể Do Bạn Spam Quá Nhiều !,Hãy Thử Lại !");
         | 
| 55 | 
            +
                            return callback(err);
         | 
| 56 | 
            +
                        });
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
                catch (e) {
         | 
| 59 | 
            +
                    return callback(null, e);
         | 
| 60 | 
            +
                }
         | 
| 61 | 
            +
                return returnPromise;
         | 
| 62 | 
            +
                };
         | 
| 63 | 
            +
            };
         |