@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/logout.js
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
7
|
return function logout(callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
var resolveFunc = function () {};
|
|
9
|
+
var rejectFunc = function () {};
|
|
10
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
10
11
|
resolveFunc = resolve;
|
|
11
12
|
rejectFunc = reject;
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
if (!callback) {
|
|
15
|
-
callback = (err,
|
|
16
|
-
if (err)
|
|
17
|
-
|
|
16
|
+
callback = function (err, friendList) {
|
|
17
|
+
if (err) {
|
|
18
|
+
return rejectFunc(err);
|
|
19
|
+
}
|
|
20
|
+
resolveFunc(friendList);
|
|
18
21
|
};
|
|
19
22
|
}
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
var form = {
|
|
22
25
|
pmid: "0",
|
|
23
26
|
};
|
|
24
27
|
|
|
@@ -29,32 +32,27 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
29
32
|
form,
|
|
30
33
|
)
|
|
31
34
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
32
|
-
.then(resData
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!elem) throw { error: "Logout element not found in settings." };
|
|
38
|
-
|
|
39
|
-
const markupList = resData?.jsmods?.markup || [];
|
|
40
|
-
const markupItem = markupList.find(v => v[0] === elem.markup.__m);
|
|
41
|
-
|
|
42
|
-
if (!markupItem) throw { error: "Logout markup not found." };
|
|
35
|
+
.then(function (resData) {
|
|
36
|
+
var elem = resData.jsmods.instances[0][2][0].filter(function (v) {
|
|
37
|
+
return v.value === "logout";
|
|
38
|
+
})[0];
|
|
43
39
|
|
|
44
|
-
|
|
40
|
+
var html = resData.jsmods.markup.filter(function (v) {
|
|
41
|
+
return v[0] === elem.markup.__m;
|
|
42
|
+
})[0][1].__html;
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
var form = {
|
|
47
45
|
fb_dtsg: utils.getFrom(html, '"fb_dtsg" value="', '"'),
|
|
48
46
|
ref: utils.getFrom(html, '"ref" value="', '"'),
|
|
49
47
|
h: utils.getFrom(html, '"h" value="', '"'),
|
|
50
48
|
};
|
|
51
49
|
|
|
52
50
|
return defaultFuncs
|
|
53
|
-
.post("https://www.facebook.com/logout.php", ctx.jar,
|
|
51
|
+
.post("https://www.facebook.com/logout.php", ctx.jar, form)
|
|
54
52
|
.then(utils.saveCookies(ctx.jar));
|
|
55
53
|
})
|
|
56
|
-
.then(res
|
|
57
|
-
if (!res
|
|
54
|
+
.then(function (res) {
|
|
55
|
+
if (!res.headers) {
|
|
58
56
|
throw { error: "An error occurred when logging out." };
|
|
59
57
|
}
|
|
60
58
|
|
|
@@ -62,13 +60,13 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
62
60
|
.get(res.headers.location, ctx.jar)
|
|
63
61
|
.then(utils.saveCookies(ctx.jar));
|
|
64
62
|
})
|
|
65
|
-
.then(()
|
|
63
|
+
.then(function () {
|
|
66
64
|
ctx.loggedIn = false;
|
|
67
|
-
|
|
65
|
+
log.info("logout", "Logged out successfully.");
|
|
68
66
|
callback();
|
|
69
67
|
})
|
|
70
|
-
.catch(err
|
|
71
|
-
|
|
68
|
+
.catch(function (err) {
|
|
69
|
+
log.error("logout", err);
|
|
72
70
|
return callback(err);
|
|
73
71
|
});
|
|
74
72
|
|
package/src/markAsDelivered.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
7
|
return function markAsDelivered(threadID, messageID, callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
var resolveFunc = function () {};
|
|
9
|
+
var rejectFunc = function () {};
|
|
10
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
10
11
|
resolveFunc = resolve;
|
|
11
12
|
rejectFunc = reject;
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
if (!callback) {
|
|
15
|
-
callback = (err,
|
|
16
|
-
if (err)
|
|
17
|
-
|
|
16
|
+
callback = function (err, friendList) {
|
|
17
|
+
if (err) {
|
|
18
|
+
return rejectFunc(err);
|
|
19
|
+
}
|
|
20
|
+
resolveFunc(friendList);
|
|
18
21
|
};
|
|
19
22
|
}
|
|
20
23
|
|
|
@@ -22,10 +25,10 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
22
25
|
return callback("Error: messageID or threadID is not defined");
|
|
23
26
|
}
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
var form = {};
|
|
29
|
+
|
|
30
|
+
form["message_ids[0]"] = messageID;
|
|
31
|
+
form["thread_ids[" + threadID + "][0]"] = messageID;
|
|
29
32
|
|
|
30
33
|
defaultFuncs
|
|
31
34
|
.post(
|
|
@@ -35,16 +38,18 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
35
38
|
)
|
|
36
39
|
.then(utils.saveCookies(ctx.jar))
|
|
37
40
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
38
|
-
.then(resData
|
|
39
|
-
|
|
40
|
-
if (resData?.error) {
|
|
41
|
+
.then(function (resData) {
|
|
42
|
+
if (resData.error) {
|
|
41
43
|
throw resData;
|
|
42
44
|
}
|
|
43
45
|
|
|
44
|
-
return callback(
|
|
46
|
+
return callback();
|
|
45
47
|
})
|
|
46
|
-
.catch(err
|
|
47
|
-
|
|
48
|
+
.catch(function (err) {
|
|
49
|
+
log.error("markAsDelivered", err);
|
|
50
|
+
if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
|
|
51
|
+
ctx.loggedIn = false;
|
|
52
|
+
}
|
|
48
53
|
return callback(err);
|
|
49
54
|
});
|
|
50
55
|
|
package/src/markAsRead.js
CHANGED
|
@@ -1,73 +1,87 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
7
|
return async function markAsRead(threadID, read, callback) {
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
if (
|
|
9
|
+
utils.getType(read) === "Function" ||
|
|
10
|
+
utils.getType(read) === "AsyncFunction"
|
|
11
|
+
) {
|
|
9
12
|
callback = read;
|
|
10
13
|
read = true;
|
|
11
14
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
if (read == undefined) {
|
|
16
|
+
read = true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (!callback) {
|
|
20
|
+
callback = () => {};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var form = {};
|
|
15
24
|
|
|
16
|
-
// পেজ আইডি থাকলে HTTP রিকোয়েস্ট (Legacy method)
|
|
17
25
|
if (typeof ctx.globalOptions.pageID !== "undefined") {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
+
form["source"] = "PagesManagerMessagesInterface";
|
|
27
|
+
form["request_user_id"] = ctx.globalOptions.pageID;
|
|
28
|
+
form["ids[" + threadID + "]"] = read;
|
|
29
|
+
form["watermarkTimestamp"] = new Date().getTime();
|
|
30
|
+
form["shouldSendReadReceipt"] = true;
|
|
31
|
+
form["commerce_last_message_type"] = "";
|
|
32
|
+
//form["titanOriginatedThreadId"] = utils.generateThreadingID(ctx.clientID);
|
|
26
33
|
|
|
34
|
+
let resData;
|
|
27
35
|
try {
|
|
28
|
-
|
|
29
|
-
.post(
|
|
36
|
+
resData = await defaultFuncs
|
|
37
|
+
.post(
|
|
38
|
+
"https://www.facebook.com/ajax/mercury/change_read_status.php",
|
|
39
|
+
ctx.jar,
|
|
40
|
+
form,
|
|
41
|
+
)
|
|
30
42
|
.then(utils.saveCookies(ctx.jar))
|
|
31
43
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs));
|
|
44
|
+
} catch (e) {
|
|
45
|
+
callback(e);
|
|
46
|
+
return e;
|
|
47
|
+
}
|
|
32
48
|
|
|
33
|
-
|
|
34
|
-
|
|
49
|
+
if (resData.error) {
|
|
50
|
+
let err = resData.error;
|
|
51
|
+
log.error("markAsRead", err);
|
|
52
|
+
if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
|
|
53
|
+
ctx.loggedIn = false;
|
|
35
54
|
}
|
|
36
|
-
|
|
37
|
-
callback();
|
|
38
|
-
return null;
|
|
39
|
-
} catch (err) {
|
|
40
|
-
utils.error("markAsRead", err);
|
|
41
55
|
callback(err);
|
|
42
56
|
return err;
|
|
43
57
|
}
|
|
44
|
-
}
|
|
45
|
-
// MQTT এর মাধ্যমে রিড রিকোয়েস্ট (Modern method)
|
|
46
|
-
else {
|
|
47
|
-
try {
|
|
48
|
-
if (!ctx.mqttClient) {
|
|
49
|
-
throw { error: "You can only use this function after you start listening." };
|
|
50
|
-
}
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
callback();
|
|
60
|
+
return null;
|
|
61
|
+
} else {
|
|
62
|
+
try {
|
|
63
|
+
if (ctx.mqttClient) {
|
|
64
|
+
let err = await new Promise((r) =>
|
|
65
|
+
ctx.mqttClient.publish(
|
|
66
|
+
"/mark_thread",
|
|
67
|
+
JSON.stringify({
|
|
68
|
+
threadID,
|
|
69
|
+
mark: "read",
|
|
70
|
+
state: read,
|
|
71
|
+
}),
|
|
72
|
+
{ qos: 1, retain: false },
|
|
73
|
+
r,
|
|
74
|
+
),
|
|
62
75
|
);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
76
|
+
if (err) throw err;
|
|
77
|
+
} else {
|
|
78
|
+
throw {
|
|
79
|
+
error: "You can only use this function after you start listening.",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
} catch (e) {
|
|
83
|
+
callback(e);
|
|
84
|
+
return e;
|
|
71
85
|
}
|
|
72
86
|
}
|
|
73
87
|
};
|
package/src/markAsReadAll.js
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
7
|
return function markAsReadAll(callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
var resolveFunc = function () {};
|
|
9
|
+
var rejectFunc = function () {};
|
|
10
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
10
11
|
resolveFunc = resolve;
|
|
11
12
|
rejectFunc = reject;
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
if (!callback) {
|
|
15
|
-
callback = (err,
|
|
16
|
-
if (err)
|
|
17
|
-
|
|
16
|
+
callback = function (err, friendList) {
|
|
17
|
+
if (err) {
|
|
18
|
+
return rejectFunc(err);
|
|
19
|
+
}
|
|
20
|
+
resolveFunc(friendList);
|
|
18
21
|
};
|
|
19
22
|
}
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
var form = {
|
|
22
25
|
folder: "inbox",
|
|
23
26
|
};
|
|
24
27
|
|
|
@@ -30,14 +33,15 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
30
33
|
)
|
|
31
34
|
.then(utils.saveCookies(ctx.jar))
|
|
32
35
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
33
|
-
.then(resData
|
|
34
|
-
if (resData
|
|
36
|
+
.then(function (resData) {
|
|
37
|
+
if (resData.error) {
|
|
35
38
|
throw resData;
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
|
|
41
|
+
return callback();
|
|
38
42
|
})
|
|
39
|
-
.catch(err
|
|
40
|
-
|
|
43
|
+
.catch(function (err) {
|
|
44
|
+
log.error("markAsReadAll", err);
|
|
41
45
|
return callback(err);
|
|
42
46
|
});
|
|
43
47
|
|
package/src/markAsSeen.js
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
return function
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
return function markAsRead(seen_timestamp, callback) {
|
|
8
|
+
if (
|
|
9
|
+
utils.getType(seen_timestamp) == "Function" ||
|
|
10
|
+
utils.getType(seen_timestamp) == "AsyncFunction"
|
|
11
|
+
) {
|
|
9
12
|
callback = seen_timestamp;
|
|
10
13
|
seen_timestamp = Date.now();
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
var resolveFunc = function () {};
|
|
17
|
+
var rejectFunc = function () {};
|
|
18
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
16
19
|
resolveFunc = resolve;
|
|
17
20
|
rejectFunc = reject;
|
|
18
21
|
});
|
|
19
22
|
|
|
20
23
|
if (!callback) {
|
|
21
|
-
callback = (err,
|
|
22
|
-
if (err)
|
|
23
|
-
|
|
24
|
+
callback = function (err, friendList) {
|
|
25
|
+
if (err) {
|
|
26
|
+
return rejectFunc(err);
|
|
27
|
+
}
|
|
28
|
+
resolveFunc(friendList);
|
|
24
29
|
};
|
|
25
30
|
}
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
seen_timestamp: seen_timestamp
|
|
32
|
+
var form = {
|
|
33
|
+
seen_timestamp: seen_timestamp,
|
|
29
34
|
};
|
|
30
35
|
|
|
31
36
|
defaultFuncs
|
|
@@ -36,17 +41,16 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
36
41
|
)
|
|
37
42
|
.then(utils.saveCookies(ctx.jar))
|
|
38
43
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
39
|
-
.then(resData
|
|
40
|
-
if (resData
|
|
44
|
+
.then(function (resData) {
|
|
45
|
+
if (resData.error) {
|
|
41
46
|
throw resData;
|
|
42
47
|
}
|
|
43
48
|
|
|
44
|
-
return callback(
|
|
49
|
+
return callback();
|
|
45
50
|
})
|
|
46
|
-
.catch(err
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (utils.getType(err) === "Object" && err?.error === "Not logged in.") {
|
|
51
|
+
.catch(function (err) {
|
|
52
|
+
log.error("markAsSeen", err);
|
|
53
|
+
if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
|
|
50
54
|
ctx.loggedIn = false;
|
|
51
55
|
}
|
|
52
56
|
return callback(err);
|
package/src/muteThread.js
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
|
-
//
|
|
7
|
+
// muteSecond: -1=permanent mute, 0=unmute, 60=one minute, 3600=one hour, etc.
|
|
7
8
|
return function muteThread(threadID, muteSeconds, callback) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
var resolveFunc = function () {};
|
|
10
|
+
var rejectFunc = function () {};
|
|
11
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
11
12
|
resolveFunc = resolve;
|
|
12
13
|
rejectFunc = reject;
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
if (!callback) {
|
|
16
|
-
callback = (err,
|
|
17
|
-
if (err)
|
|
18
|
-
|
|
17
|
+
callback = function (err, friendList) {
|
|
18
|
+
if (err) {
|
|
19
|
+
return rejectFunc(err);
|
|
20
|
+
}
|
|
21
|
+
resolveFunc(friendList);
|
|
19
22
|
};
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
var form = {
|
|
23
26
|
thread_fbid: threadID,
|
|
24
27
|
mute_settings: muteSeconds,
|
|
25
28
|
};
|
|
@@ -32,15 +35,15 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
32
35
|
)
|
|
33
36
|
.then(utils.saveCookies(ctx.jar))
|
|
34
37
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
35
|
-
.then(resData
|
|
36
|
-
if (resData
|
|
38
|
+
.then(function (resData) {
|
|
39
|
+
if (resData.error) {
|
|
37
40
|
throw resData;
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
return callback(
|
|
43
|
+
return callback();
|
|
41
44
|
})
|
|
42
|
-
.catch(err
|
|
43
|
-
|
|
45
|
+
.catch(function (err) {
|
|
46
|
+
log.error("muteThread", err);
|
|
44
47
|
return callback(err);
|
|
45
48
|
});
|
|
46
49
|
|
package/src/pinMessage.js
CHANGED
|
@@ -1,25 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
const { generateOfflineThreadingID } = require(
|
|
3
|
+
const { generateOfflineThreadingID, getCurrentTimestamp } = require("../utils");
|
|
4
|
+
|
|
5
|
+
function isCallable(func) {
|
|
6
|
+
try {
|
|
7
|
+
Reflect.apply(func, null, []);
|
|
8
|
+
return true;
|
|
9
|
+
} catch (error) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
4
13
|
|
|
5
14
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
15
|
return function pinMessage(pinMode, messageID, threadID, callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const err = new Error('Not connected to MQTT or not logged in.');
|
|
10
|
-
return typeof callback === 'function' ? callback(err) : console.error(err);
|
|
16
|
+
if (!ctx.mqttClient) {
|
|
17
|
+
throw new Error("Not connected to MQTT");
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
ctx.wsReqNumber += 1;
|
|
14
21
|
ctx.wsTaskNumber += 1;
|
|
15
22
|
|
|
16
|
-
const taskLabel = pinMode ?
|
|
17
|
-
const queueNamePrefix = pinMode ?
|
|
23
|
+
const taskLabel = pinMode ? "430" : "431";
|
|
24
|
+
const queueNamePrefix = pinMode ? "pin_msg_v2_" : "unpin_msg_v2_";
|
|
18
25
|
|
|
19
26
|
const taskPayload = {
|
|
20
27
|
thread_key: threadID,
|
|
21
28
|
message_id: messageID,
|
|
22
|
-
timestamp_ms:
|
|
29
|
+
timestamp_ms: getCurrentTimestamp(),
|
|
23
30
|
};
|
|
24
31
|
|
|
25
32
|
const task = {
|
|
@@ -31,30 +38,24 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
31
38
|
};
|
|
32
39
|
|
|
33
40
|
const content = {
|
|
34
|
-
app_id:
|
|
41
|
+
app_id: "2220391788200892",
|
|
35
42
|
payload: JSON.stringify({
|
|
36
43
|
data_trace_id: null,
|
|
37
44
|
epoch_id: parseInt(generateOfflineThreadingID()),
|
|
38
45
|
tasks: [task],
|
|
39
|
-
version_id:
|
|
46
|
+
version_id: "25095469420099952",
|
|
40
47
|
}),
|
|
41
48
|
request_id: ctx.wsReqNumber,
|
|
42
49
|
type: 3,
|
|
43
50
|
};
|
|
44
51
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
ctx.reqCallbacks[ctx.wsReqNumber] = callback;
|
|
52
|
+
if (isCallable(callback)) {
|
|
53
|
+
// to be implemented
|
|
48
54
|
}
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
retain: false
|
|
54
|
-
}, (err) => {
|
|
55
|
-
if (err && typeof callback === 'function') {
|
|
56
|
-
callback(err);
|
|
57
|
-
}
|
|
56
|
+
ctx.mqttClient.publish("/ls_req", JSON.stringify(content), {
|
|
57
|
+
qos: 1,
|
|
58
|
+
retain: false,
|
|
58
59
|
});
|
|
59
60
|
};
|
|
60
61
|
};
|
|
@@ -1,37 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
4
5
|
|
|
5
6
|
module.exports = function (defaultFuncs, api, ctx) {
|
|
6
7
|
return function removeUserFromGroup(userID, threadID, callback) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
if (
|
|
9
|
+
!callback &&
|
|
10
|
+
(utils.getType(threadID) === "Function" ||
|
|
11
|
+
utils.getType(threadID) === "AsyncFunction")
|
|
12
|
+
) {
|
|
13
|
+
throw { error: "please pass a threadID as a second argument." };
|
|
10
14
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
if (
|
|
16
|
+
utils.getType(threadID) !== "Number" &&
|
|
17
|
+
utils.getType(threadID) !== "String"
|
|
18
|
+
) {
|
|
19
|
+
throw {
|
|
20
|
+
error:
|
|
21
|
+
"threadID should be of type Number or String and not " +
|
|
22
|
+
utils.getType(threadID) +
|
|
23
|
+
".",
|
|
24
|
+
};
|
|
14
25
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
if (
|
|
27
|
+
utils.getType(userID) !== "Number" &&
|
|
28
|
+
utils.getType(userID) !== "String"
|
|
29
|
+
) {
|
|
30
|
+
throw {
|
|
31
|
+
error:
|
|
32
|
+
"userID should be of type Number or String and not " +
|
|
33
|
+
utils.getType(userID) +
|
|
34
|
+
".",
|
|
35
|
+
};
|
|
18
36
|
}
|
|
19
37
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
38
|
+
var resolveFunc = function () {};
|
|
39
|
+
var rejectFunc = function () {};
|
|
40
|
+
var returnPromise = new Promise(function (resolve, reject) {
|
|
23
41
|
resolveFunc = resolve;
|
|
24
42
|
rejectFunc = reject;
|
|
25
43
|
});
|
|
26
44
|
|
|
27
45
|
if (!callback) {
|
|
28
|
-
callback = (err,
|
|
29
|
-
if (err)
|
|
30
|
-
|
|
46
|
+
callback = function (err, friendList) {
|
|
47
|
+
if (err) {
|
|
48
|
+
return rejectFunc(err);
|
|
49
|
+
}
|
|
50
|
+
resolveFunc(friendList);
|
|
31
51
|
};
|
|
32
52
|
}
|
|
33
53
|
|
|
34
|
-
|
|
54
|
+
var form = {
|
|
35
55
|
uid: userID,
|
|
36
56
|
tid: threadID,
|
|
37
57
|
};
|
|
@@ -39,18 +59,18 @@ module.exports = function (defaultFuncs, api, ctx) {
|
|
|
39
59
|
defaultFuncs
|
|
40
60
|
.post("https://www.facebook.com/chat/remove_participants", ctx.jar, form)
|
|
41
61
|
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
42
|
-
.then(resData
|
|
62
|
+
.then(function (resData) {
|
|
43
63
|
if (!resData) {
|
|
44
64
|
throw { error: "Remove from group failed." };
|
|
45
65
|
}
|
|
46
|
-
if (resData
|
|
66
|
+
if (resData.error) {
|
|
47
67
|
throw resData;
|
|
48
68
|
}
|
|
49
69
|
|
|
50
|
-
return callback(
|
|
70
|
+
return callback();
|
|
51
71
|
})
|
|
52
|
-
.catch(err
|
|
53
|
-
|
|
72
|
+
.catch(function (err) {
|
|
73
|
+
log.error("removeUserFromGroup", err);
|
|
54
74
|
return callback(err);
|
|
55
75
|
});
|
|
56
76
|
|