@cexy/hoonfca 1.0.0 → 1.0.2
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.
- package/.travis.yml +6 -0
- package/LICENSE-MIT +21 -0
- package/index.d.ts +620 -0
- package/index.js +745 -433
- package/package.json +45 -6
- package/src/addExternalModule.js +14 -16
- package/src/addUserToGroup.js +45 -30
- package/src/changeAdminStatus.js +39 -42
- package/src/changeApprovalMode.js +79 -0
- package/src/changeArchivedStatus.js +19 -15
- package/src/changeBio.js +18 -16
- package/src/changeBlockedStatus.js +14 -12
- package/src/changeBlockedStatusMqtt.js +38 -17
- package/src/changeGroupImage.js +100 -77
- package/src/changeNickname.js +12 -11
- package/src/changeThreadColor.js +25 -16
- package/src/changeThreadEmoji.js +11 -10
- package/src/createNewGroup.js +21 -14
- package/src/createPoll.js +87 -21
- package/src/deleteMessage.js +18 -17
- package/src/deleteThread.js +18 -17
- package/src/editMessage.js +28 -31
- package/src/forwardAttachment.js +22 -19
- package/src/forwardMessage.js +63 -0
- package/src/getCurrentUserID.js +4 -2
- package/src/getEmojiUrl.js +20 -9
- package/src/getFriendsList.js +21 -18
- package/src/getGroupsList.js +83 -0
- package/src/getMarketplace.js +84 -0
- package/src/getNotifications.js +86 -0
- package/src/getPagesList.js +83 -0
- package/src/getStories.js +88 -0
- package/src/getThreadHistory.js +277 -126
- package/src/getThreadInfo.js +143 -115
- package/src/getThreadList.js +216 -143
- package/src/getThreadPictures.js +26 -32
- package/src/getUserID.js +13 -14
- package/src/getUserInfo.js +107 -68
- package/src/handleFriendRequest.js +16 -15
- package/src/handleMessageRequest.js +15 -15
- package/src/httpGet.js +36 -31
- package/src/httpPost.js +36 -31
- package/src/listenMqtt.js +705 -370
- package/src/logout.js +26 -28
- package/src/markAsDelivered.js +22 -17
- package/src/markAsRead.js +63 -49
- package/src/markAsReadAll.js +17 -13
- package/src/markAsSeen.js +23 -19
- package/src/muteThread.js +17 -14
- package/src/pinMessage.js +23 -22
- package/src/removeUserFromGroup.js +42 -22
- package/src/resolvePhotoUrl.js +15 -17
- package/src/searchForThread.js +18 -20
- package/src/searchUsers.js +89 -0
- package/src/sendComment.js +161 -0
- package/src/sendMessage.js +65 -52
- package/src/sendTypingIndicator.js +173 -48
- package/src/setBio.js +86 -0
- package/src/setMessageReaction.js +76 -16
- package/src/setPostReaction.js +29 -61
- package/src/setTheme.js +313 -0
- package/src/setTitle.js +27 -37
- package/src/shareContact.js +34 -82
- package/src/shareLink.js +56 -99
- package/src/threadColors.js +35 -97
- package/src/unfriend.js +15 -20
- package/src/unsendMessage.js +71 -18
- package/utils.js +1000 -472
- package/README.md +0 -83
- package/replit.nix +0 -3
- package/src/changeAvatar.js +0 -89
- package/src/changeCover.js +0 -92
- package/src/changeName.js +0 -106
- package/src/changeUsername.js +0 -80
- package/src/createCommentPost.js +0 -196
- package/src/createPost.js +0 -285
- package/src/data/getThreadInfo.json +0 -1
- package/src/follow.js +0 -71
- package/src/getAccess.js +0 -130
- package/src/getAvatarUser.js +0 -88
- package/src/getBotInitialData.js +0 -59
- package/src/getCtx.js +0 -5
- package/src/getMessage.js +0 -827
- package/src/getOptions.js +0 -5
- package/src/getRegion.js +0 -7
- package/src/getThreadHistoryDeprecated.js +0 -95
- package/src/getThreadInfoDeprecated.js +0 -77
- package/src/getThreadListDeprecated.js +0 -86
- package/src/httpPostFormData.js +0 -58
- package/src/listenNotification.js +0 -96
- package/src/refreshFb_dtsg.js +0 -75
- package/src/searchStickers.js +0 -59
- package/src/sendMessageMqtt.js +0 -326
- package/src/setMessageReactionMqtt.js +0 -74
- package/src/setProfileGuard.js +0 -66
- package/src/setStoryReaction.js +0 -97
- package/src/stopListenMqtt.js +0 -47
- package/src/uploadAttachment.js +0 -98
package/src/getOptions.js
DELETED
package/src/getRegion.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
|
|
5
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
return function getThreadHistory(threadID, amount, timestamp, callback) {
|
|
7
|
-
let resolveFunc = () => {};
|
|
8
|
-
let rejectFunc = () => {};
|
|
9
|
-
|
|
10
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
11
|
-
resolveFunc = resolve;
|
|
12
|
-
rejectFunc = reject;
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
// কলব্যাক না থাকলে প্রমিজ হ্যান্ডলার সেট করা হচ্ছে
|
|
16
|
-
if (!callback) {
|
|
17
|
-
callback = (err, friendList) => {
|
|
18
|
-
if (err) {
|
|
19
|
-
return rejectFunc(err);
|
|
20
|
-
}
|
|
21
|
-
resolveFunc(friendList);
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const form = {
|
|
26
|
-
client: "mercury"
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// ইউজার নাকি পেজ/গ্রুপ থ্রেড তা যাচাই করার জন্য ইউজার ইনফো ফেচ করা হচ্ছে
|
|
30
|
-
api.getUserInfo(threadID, (err, res) => {
|
|
31
|
-
if (err) {
|
|
32
|
-
return callback(err);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const key = Object.keys(res).length > 0 ? "user_ids" : "thread_fbids";
|
|
36
|
-
form[`messages[${key}][${threadID}][offset]`] = 0;
|
|
37
|
-
form[`messages[${key}][${threadID}][timestamp]`] = timestamp;
|
|
38
|
-
form[`messages[${key}][${threadID}][limit]`] = amount;
|
|
39
|
-
|
|
40
|
-
if (ctx.globalOptions.pageID) {
|
|
41
|
-
form.request_user_id = ctx.globalOptions.pageID;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
defaultFuncs
|
|
45
|
-
.post(
|
|
46
|
-
"https://www.facebook.com/ajax/mercury/thread_info.php",
|
|
47
|
-
ctx.jar,
|
|
48
|
-
form
|
|
49
|
-
)
|
|
50
|
-
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
51
|
-
.then(resData => {
|
|
52
|
-
if (resData.error) {
|
|
53
|
-
throw resData;
|
|
54
|
-
} else if (!resData.payload) {
|
|
55
|
-
throw { error: "Could not retrieve thread history." };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// কোনো মেসেজ হিস্ট্রি না থাকলে খালি অ্যারে দিয়ে ক্র্যাশ আটকানো হচ্ছে
|
|
59
|
-
if (!resData.payload.actions) {
|
|
60
|
-
resData.payload.actions = [];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const userIDs = {};
|
|
64
|
-
resData.payload.actions.forEach(v => {
|
|
65
|
-
userIDs[v.author.split(":").pop()] = "";
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// মেসেজদাতাদের নাম বের করার জন্য সবার ইউজার ইনফো ফেচ করা হচ্ছে
|
|
69
|
-
api.getUserInfo(Object.keys(userIDs), (err, data) => {
|
|
70
|
-
if (err) return callback(err);
|
|
71
|
-
|
|
72
|
-
resData.payload.actions.forEach(v => {
|
|
73
|
-
const senderID = v.author.split(":").pop();
|
|
74
|
-
const sender = data[senderID];
|
|
75
|
-
|
|
76
|
-
v.sender_name = sender ? sender.name : "Facebook User";
|
|
77
|
-
v.sender_fbid = v.author;
|
|
78
|
-
delete v.author;
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
callback(
|
|
82
|
-
null,
|
|
83
|
-
resData.payload.actions.map(utils.formatHistoryMessage)
|
|
84
|
-
);
|
|
85
|
-
});
|
|
86
|
-
})
|
|
87
|
-
.catch(err => {
|
|
88
|
-
utils.error("getThreadHistory", err);
|
|
89
|
-
return callback(err);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return returnPromise;
|
|
94
|
-
};
|
|
95
|
-
};
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
|
|
5
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
return function getThreadInfo(threadID, callback) {
|
|
7
|
-
let resolveFunc = () => {};
|
|
8
|
-
let rejectFunc = () => {};
|
|
9
|
-
|
|
10
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
11
|
-
resolveFunc = resolve;
|
|
12
|
-
rejectFunc = reject;
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
if (!callback) {
|
|
16
|
-
callback = (err, friendList) => {
|
|
17
|
-
if (err) {
|
|
18
|
-
return rejectFunc(err);
|
|
19
|
-
}
|
|
20
|
-
resolveFunc(friendList);
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const form = {
|
|
25
|
-
client: "mercury"
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// ইউজার নাকি পেজ/গ্রুপ থ্রেড তা যাচাই করার জন্য ইউজার ইনফো ফেচ করা হচ্ছে
|
|
29
|
-
api.getUserInfo(threadID, (err, userRes) => {
|
|
30
|
-
if (err) {
|
|
31
|
-
return callback(err);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const key = Object.keys(userRes).length > 0 ? "user_ids" : "thread_fbids";
|
|
35
|
-
form[`threads[${key}][0]`] = threadID;
|
|
36
|
-
|
|
37
|
-
// টাইপো ঠিক করা হলো: pageId -> pageID
|
|
38
|
-
if (ctx.globalOptions.pageID) {
|
|
39
|
-
form.request_user_id = ctx.globalOptions.pageID;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
defaultFuncs
|
|
43
|
-
.post(
|
|
44
|
-
"https://www.facebook.com/ajax/mercury/thread_info.php",
|
|
45
|
-
ctx.jar,
|
|
46
|
-
form
|
|
47
|
-
)
|
|
48
|
-
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
49
|
-
.then(resData => {
|
|
50
|
-
if (resData.error) {
|
|
51
|
-
throw resData;
|
|
52
|
-
} else if (!resData.payload) {
|
|
53
|
-
throw { error: "Could not retrieve thread Info." };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const threadData = resData.payload.threads?.[0];
|
|
57
|
-
const userData = userRes[threadID];
|
|
58
|
-
|
|
59
|
-
if (threadData == null) {
|
|
60
|
-
throw { error: "ThreadData is null" };
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// থ্রেডের নাম ও ছবি ইউজার ডাটা অনুযায়ী আপডেট করা হচ্ছে
|
|
64
|
-
threadData.name = userData?.name ?? threadData.name;
|
|
65
|
-
threadData.image_src = userData?.thumbSrc ?? threadData.image_src;
|
|
66
|
-
|
|
67
|
-
callback(null, utils.formatThread(threadData));
|
|
68
|
-
})
|
|
69
|
-
.catch(err => {
|
|
70
|
-
utils.error("getThreadInfo", err);
|
|
71
|
-
return callback(err);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
return returnPromise;
|
|
76
|
-
};
|
|
77
|
-
};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
|
|
5
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
return function getThreadList(start, end, type, callback) {
|
|
7
|
-
// প্রমিজ সাপোর্ট অ্যাড করার জন্য হ্যান্ডলার তৈরি
|
|
8
|
-
let resolveFunc = () => {};
|
|
9
|
-
let rejectFunc = () => {};
|
|
10
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
11
|
-
resolveFunc = resolve;
|
|
12
|
-
rejectFunc = reject;
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
// আর্গুমেন্ট শিফটিং এবং কলব্যাক ডিটেকশন
|
|
16
|
-
if (typeof type === "function") {
|
|
17
|
-
callback = type;
|
|
18
|
-
type = "inbox";
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (!callback && typeof end === "function") {
|
|
22
|
-
callback = end;
|
|
23
|
-
end = start + 20;
|
|
24
|
-
type = "inbox";
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (!callback) {
|
|
28
|
-
callback = (err, data) => {
|
|
29
|
-
if (err) return rejectFunc(err);
|
|
30
|
-
resolveFunc(data);
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// টাইপ ও রেঞ্জ ভ্যালিডেশন
|
|
35
|
-
if (typeof start !== "number" || typeof end !== "number") {
|
|
36
|
-
return callback({ error: "getThreadList: start and end must be numbers." });
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
type = type || "inbox";
|
|
40
|
-
if (type === "archived") {
|
|
41
|
-
type = "action:archived";
|
|
42
|
-
} else if (type !== "inbox" && type !== "pending" && type !== "other" && type !== "action:archived") {
|
|
43
|
-
return callback({
|
|
44
|
-
error: "type can only be one of the following: inbox, pending, archived, other",
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (end <= start) {
|
|
49
|
-
end = start + 20;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const form = {
|
|
53
|
-
client: "mercury"
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
form[`${type}[offset]`] = start;
|
|
57
|
-
form[`${type}[limit]`] = end - start;
|
|
58
|
-
|
|
59
|
-
if (ctx.globalOptions.pageID) {
|
|
60
|
-
form.request_user_id = ctx.globalOptions.pageID;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
defaultFuncs
|
|
64
|
-
.post(
|
|
65
|
-
"https://www.facebook.com/ajax/mercury/threadlist_info.php",
|
|
66
|
-
ctx.jar,
|
|
67
|
-
form
|
|
68
|
-
)
|
|
69
|
-
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
70
|
-
.then(resData => {
|
|
71
|
-
if (resData.error) {
|
|
72
|
-
throw resData;
|
|
73
|
-
}
|
|
74
|
-
return callback(
|
|
75
|
-
null,
|
|
76
|
-
(resData.payload?.threads || []).map(utils.formatThread)
|
|
77
|
-
);
|
|
78
|
-
})
|
|
79
|
-
.catch(err => {
|
|
80
|
-
utils.error("getThreadList", err);
|
|
81
|
-
return callback(err);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
return returnPromise;
|
|
85
|
-
};
|
|
86
|
-
};
|
package/src/httpPostFormData.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
|
|
5
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
return function httpPostFormData(url, form, customHeader, callback, notAPI) {
|
|
7
|
-
let resolveFunc = () => {};
|
|
8
|
-
let rejectFunc = () => {};
|
|
9
|
-
|
|
10
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
11
|
-
resolveFunc = resolve;
|
|
12
|
-
rejectFunc = reject;
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
// আর্গুমেন্ট শিফটিং লজিক অপ্টিমাইজেশন
|
|
16
|
-
const formType = utils.getType(form);
|
|
17
|
-
if (formType === "Function" || formType === "AsyncFunction") {
|
|
18
|
-
callback = form;
|
|
19
|
-
form = {};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const headerType = utils.getType(customHeader);
|
|
23
|
-
if (headerType === "Function" || headerType === "AsyncFunction") {
|
|
24
|
-
callback = customHeader;
|
|
25
|
-
customHeader = {};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
customHeader = customHeader || {};
|
|
29
|
-
|
|
30
|
-
if (utils.getType(callback) === "Boolean") {
|
|
31
|
-
notAPI = callback;
|
|
32
|
-
callback = null;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (!callback) {
|
|
36
|
-
callback = (err, data) => {
|
|
37
|
-
if (err) return rejectFunc(err);
|
|
38
|
-
resolveFunc(data);
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// রিকোয়েস্ট মেথড ডিসিশন (API নাকি সাধারণ POST Form Data রিকোয়েস্ট)
|
|
43
|
-
const requestPromise = notAPI
|
|
44
|
-
? utils.postFormData(url, ctx.jar, form, ctx.globalOptions, ctx, customHeader)
|
|
45
|
-
: defaultFuncs.postFormData(url, ctx.jar, form, null, customHeader);
|
|
46
|
-
|
|
47
|
-
requestPromise
|
|
48
|
-
.then(resData => {
|
|
49
|
-
callback(null, resData.body.toString());
|
|
50
|
-
})
|
|
51
|
-
.catch(err => {
|
|
52
|
-
utils.error("httpPostFormData", err);
|
|
53
|
-
return callback(err);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
return returnPromise;
|
|
57
|
-
};
|
|
58
|
-
};
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
const EventEmitter = require("node:events");
|
|
5
|
-
|
|
6
|
-
// নোটিফিকেশন ডাটা ফরম্যাট করার হেল্পার ফাংশন
|
|
7
|
-
function format(res, globalCallback) {
|
|
8
|
-
const checkMinutes = (date_1, date_2) => {
|
|
9
|
-
const ms_1 = date_1.getTime();
|
|
10
|
-
const ms_2 = date_2.getTime();
|
|
11
|
-
return Math.ceil((ms_2 - ms_1) / (60 * 1000));
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const edges = res?.notifications_page?.edges || [];
|
|
15
|
-
|
|
16
|
-
for (const index of edges) {
|
|
17
|
-
if (index.node?.row_type !== "NOTIFICATION") continue;
|
|
18
|
-
|
|
19
|
-
const notifData = index.node.notif;
|
|
20
|
-
if (!notifData) continue;
|
|
21
|
-
|
|
22
|
-
const timestamp = notifData.creation_time?.timestamp;
|
|
23
|
-
|
|
24
|
-
// ১ মিনিটের মধ্যে আসা নোটিফিকেশনগুলো ফিল্টার করা হচ্ছে
|
|
25
|
-
if (timestamp && checkMinutes(new Date(timestamp * 1000), new Date()) <= 1) {
|
|
26
|
-
globalCallback(null, {
|
|
27
|
-
// বাগ ফিক্স: res.node এর পরিবর্তে index.node (বা notifData) ব্যবহার করা হলো যেন ক্র্যাশ না করে
|
|
28
|
-
id: notifData.id,
|
|
29
|
-
noti_id: notifData.notif_id,
|
|
30
|
-
body: notifData.body?.text || "",
|
|
31
|
-
url: notifData.url,
|
|
32
|
-
timestamp: timestamp * 1000
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
39
|
-
let globalCallback, interval;
|
|
40
|
-
|
|
41
|
-
function MessageRepeat() {
|
|
42
|
-
interval = setInterval(() => {
|
|
43
|
-
return defaultFuncs
|
|
44
|
-
.post("https://www.facebook.com/api/graphql/", ctx.jar, {
|
|
45
|
-
fb_api_req_friendly_name: "CometNotificationsRootQuery",
|
|
46
|
-
doc_id: 6663491207045267,
|
|
47
|
-
variables: JSON.stringify({
|
|
48
|
-
count: 5,
|
|
49
|
-
environment: "MAIN_SURFACE",
|
|
50
|
-
filter_tokens: ["Cg8CZnQPA2FsbAE="],
|
|
51
|
-
scale: 1
|
|
52
|
-
}),
|
|
53
|
-
server_timestamps: true
|
|
54
|
-
})
|
|
55
|
-
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
56
|
-
.then(res => {
|
|
57
|
-
if (res.error || res.errors) {
|
|
58
|
-
throw res;
|
|
59
|
-
}
|
|
60
|
-
return format(res.data?.viewer, globalCallback);
|
|
61
|
-
})
|
|
62
|
-
.catch(err => {
|
|
63
|
-
utils.error("listenNotification", err);
|
|
64
|
-
clearInterval(interval);
|
|
65
|
-
interval = undefined;
|
|
66
|
-
return globalCallback(err);
|
|
67
|
-
});
|
|
68
|
-
}, 60 * 1000);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return function notification(callback) {
|
|
72
|
-
class MessageEmitter extends EventEmitter {
|
|
73
|
-
stop() {
|
|
74
|
-
globalCallback = () => {};
|
|
75
|
-
|
|
76
|
-
if (interval) {
|
|
77
|
-
clearInterval(interval);
|
|
78
|
-
interval = undefined;
|
|
79
|
-
}
|
|
80
|
-
Message.emit("stop", new Date());
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const Message = new MessageEmitter();
|
|
85
|
-
|
|
86
|
-
if (typeof callback === "function") {
|
|
87
|
-
globalCallback = callback;
|
|
88
|
-
} else {
|
|
89
|
-
globalCallback = (error, message) =>
|
|
90
|
-
error ? Message.emit("error", error) : Message.emit("message", message);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
MessageRepeat();
|
|
94
|
-
return Message;
|
|
95
|
-
};
|
|
96
|
-
};
|
package/src/refreshFb_dtsg.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const utils = require("../utils");
|
|
4
|
-
const log = require("npmlog");
|
|
5
|
-
|
|
6
|
-
module.exports = function (defaultFuncs, api, ctx) {
|
|
7
|
-
/**
|
|
8
|
-
* Refreshes the fb_dtsg and jazoest values.
|
|
9
|
-
*/
|
|
10
|
-
return function refreshFb_dtsg(obj, callback) {
|
|
11
|
-
let resolveFunc = () => {};
|
|
12
|
-
let rejectFunc = () => {};
|
|
13
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
14
|
-
resolveFunc = resolve;
|
|
15
|
-
rejectFunc = reject;
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
// আর্গুমেন্ট শিফটিং লজিক
|
|
19
|
-
if (utils.getType(obj) === "Function" || utils.getType(obj) === "AsyncFunction") {
|
|
20
|
-
callback = obj;
|
|
21
|
-
obj = {};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
obj = obj || {};
|
|
25
|
-
|
|
26
|
-
if (utils.getType(obj) !== "Object") {
|
|
27
|
-
throw new utils.CustomError("The first parameter must be an object or a callback function");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (!callback) {
|
|
31
|
-
callback = (err, data) => {
|
|
32
|
-
if (err) return rejectFunc(err);
|
|
33
|
-
resolveFunc(data);
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// টোকেন রিফ্রেশ লজিক
|
|
38
|
-
if (Object.keys(obj).length === 0) {
|
|
39
|
-
utils
|
|
40
|
-
.get('https://m.facebook.com/', ctx.jar, null, ctx.globalOptions, { noRef: true })
|
|
41
|
-
.then(resData => {
|
|
42
|
-
const html = resData.body;
|
|
43
|
-
const fb_dtsg = utils.getFrom(html, 'name="fb_dtsg" value="', '"');
|
|
44
|
-
const jazoest = utils.getFrom(html, 'name="jazoest" value="', '"');
|
|
45
|
-
|
|
46
|
-
if (!fb_dtsg) {
|
|
47
|
-
throw new utils.CustomError("Could not find fb_dtsg in HTML after requesting https://m.facebook.com/");
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
ctx.fb_dtsg = fb_dtsg;
|
|
51
|
-
ctx.jazoest = jazoest;
|
|
52
|
-
|
|
53
|
-
callback(null, {
|
|
54
|
-
data: { fb_dtsg, jazoest },
|
|
55
|
-
message: "refreshed fb_dtsg and jazoest"
|
|
56
|
-
});
|
|
57
|
-
})
|
|
58
|
-
.catch(err => {
|
|
59
|
-
log.error("refreshFb_dtsg", err);
|
|
60
|
-
return callback(err);
|
|
61
|
-
});
|
|
62
|
-
} else {
|
|
63
|
-
// ম্যানুয়ালি টোকেন সেট করার লজিক
|
|
64
|
-
Object.keys(obj).forEach(key => {
|
|
65
|
-
ctx[key] = obj[key];
|
|
66
|
-
});
|
|
67
|
-
callback(null, {
|
|
68
|
-
data: obj,
|
|
69
|
-
message: `refreshed ${Object.keys(obj).join(", ")}`
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return returnPromise;
|
|
74
|
-
};
|
|
75
|
-
};
|
package/src/searchStickers.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const utils = require('../utils.js');
|
|
4
|
-
// @NethWs3Dev
|
|
5
|
-
|
|
6
|
-
module.exports = function (http, api, ctx) {
|
|
7
|
-
// ডাটা ফরম্যাট করার হেল্পার ফাংশন
|
|
8
|
-
const formatData = (res) => ({
|
|
9
|
-
id: res?.node?.id || null,
|
|
10
|
-
image: res?.node?.image || {},
|
|
11
|
-
package: res?.node?.pack ? {
|
|
12
|
-
name: res.node.pack.name,
|
|
13
|
-
id: res.node.pack.id
|
|
14
|
-
} : {},
|
|
15
|
-
label: res?.node?.label || ""
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
return function searchStickers(query = '', callback) {
|
|
19
|
-
let resolveFunc = () => {};
|
|
20
|
-
let rejectFunc = () => {};
|
|
21
|
-
const returnPromise = new Promise((resolve, reject) => {
|
|
22
|
-
resolveFunc = resolve;
|
|
23
|
-
rejectFunc = reject;
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
if (!callback) {
|
|
27
|
-
callback = (err, data) => {
|
|
28
|
-
if (err) return rejectFunc(err);
|
|
29
|
-
resolveFunc(data);
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const form = {
|
|
34
|
-
fb_api_req_friendly_name: 'StickersFlyoutTagSelectorQuery',
|
|
35
|
-
variables: JSON.stringify({
|
|
36
|
-
stickerWidth: 64,
|
|
37
|
-
stickerHeight: 64,
|
|
38
|
-
stickerInterface: 'messages',
|
|
39
|
-
query
|
|
40
|
-
}),
|
|
41
|
-
doc_id: '4642836929159953'
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
http
|
|
45
|
-
.post('https://www.facebook.com/api/graphql/', ctx.jar, form)
|
|
46
|
-
.then(utils.parseAndCheckLogin(ctx, http))
|
|
47
|
-
.then(res => {
|
|
48
|
-
// ডাটা স্ট্রাকচার সেফটি চেক
|
|
49
|
-
const edges = res?.data?.sticker_search?.sticker_results?.edges || [];
|
|
50
|
-
return callback(null, edges.map(formatData));
|
|
51
|
-
})
|
|
52
|
-
.catch(err => {
|
|
53
|
-
utils.error('searchStickers', err);
|
|
54
|
-
return callback(err);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return returnPromise;
|
|
58
|
-
};
|
|
59
|
-
};
|