fca-aliya-anup 0.0.1-security → 1.0.4
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 fca-aliya-anup might be problematic. Click here for more details.
- package/.vscode/settings.json +4 -0
- package/CountTime.json +1 -0
- 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.md +23 -0
- package/Language/index.json +175 -0
- package/OldSecurity.js +100 -0
- package/README.md +120 -3
- package/SECURITY.md +21 -0
- package/broadcast.js +38 -0
- package/index.js +1333 -0
- package/logger.js +65 -0
- package/package.json +89 -4
- 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 +218 -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,218 @@
|
|
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
|
+
//! Found mid-January 2023 by @Anup - shared to Public group
|
167
|
+
//* similar muliti thread codes like this can all be copy ideas
|
168
|
+
//*update this abandoned project on 02/09/2023 by @Anup(Owner)
|
169
|
+
|
170
|
+
if (utils.getType(threadID) !== "Array") threadID = [threadID];
|
171
|
+
|
172
|
+
var Form = {};
|
173
|
+
var ThreadInfo = [];
|
174
|
+
|
175
|
+
threadID.map(function (x,y) {
|
176
|
+
Form["o" + y] = {
|
177
|
+
doc_id: "3449967031715030",
|
178
|
+
query_params: {
|
179
|
+
id: x,
|
180
|
+
message_limit: 0,
|
181
|
+
load_messages: false,
|
182
|
+
load_read_receipts: false,
|
183
|
+
before: null
|
184
|
+
}
|
185
|
+
};
|
186
|
+
});
|
187
|
+
|
188
|
+
var form = {
|
189
|
+
queries: JSON.stringify(Form),
|
190
|
+
batch_name: "MessengerGraphQLThreadFetcher"
|
191
|
+
};
|
192
|
+
|
193
|
+
defaultFuncs
|
194
|
+
.post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
|
195
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
196
|
+
.then(function(resData) {
|
197
|
+
if (resData.error) {
|
198
|
+
callback(null,resData.error);
|
199
|
+
throw resData;
|
200
|
+
}
|
201
|
+
resData = resData.splice(0, resData.length - 1);
|
202
|
+
resData.sort((a, b) => { return Object.keys(a)[0].localeCompare(Object.keys(b)[0]); });
|
203
|
+
resData.map(function (x,y) {
|
204
|
+
ThreadInfo.push(formatThreadGraphQLResponse(x["o"+y].data));
|
205
|
+
});
|
206
|
+
if (Object.keys(resData).length == 1) {
|
207
|
+
callback(null, ThreadInfo[0]);
|
208
|
+
} else {
|
209
|
+
callback(null, ThreadInfo);
|
210
|
+
}
|
211
|
+
})
|
212
|
+
.catch(function(err) {
|
213
|
+
log.error("getThreadInfoGraphQL", "error: getThreadInfoGraphQL Maybe You Spam Too Much, Try Again !");
|
214
|
+
return callback(err);
|
215
|
+
});
|
216
|
+
return returnPromise;
|
217
|
+
};
|
218
|
+
};
|
@@ -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('Wrong Link, Link Needs Format As Follows: facebook.com/t3ra.b44p.Anup.h3r3',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('Wrong Link, Link Needs To Be A Facebook Link',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", "error: getUserInfo Maybe You Spam Too Much !,Try Again !");
|
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", "error: getUserInfo Maybe You Spam Too Much !,Try Again !");
|
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", "error: getUserInfo Maybe You Spam Too Much !,Try Again !");
|
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", "error: getUserInfo Maybe You Spam Too Much !,Try Again !");
|
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", "error: getUserInfo Maybe You Spam Too Much !,Try Again !");
|
55
|
+
return callback(err);
|
56
|
+
});
|
57
|
+
}
|
58
|
+
catch (e) {
|
59
|
+
return callback(null, e);
|
60
|
+
}
|
61
|
+
return returnPromise;
|
62
|
+
};
|
63
|
+
};
|