alicezetion 1.9.1 → 1.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. package/index.js +1 -1
  2. package/package.json +1 -1
  3. package/src/addExternalModule.js +19 -0
  4. package/src/addUserToGroup.js +113 -0
  5. package/src/changeAdminStatus.js +79 -0
  6. package/src/changeArchivedStatus.js +55 -0
  7. package/{leiamnash → src}/changeAvatar.js +2 -3
  8. package/src/changeBio.js +77 -0
  9. package/src/changeBlockedStatus.js +47 -0
  10. package/src/changeGroupImage.js +132 -0
  11. package/src/changeNickname.js +59 -0
  12. package/src/changeThreadColor.js +65 -0
  13. package/src/changeThreadEmoji.js +55 -0
  14. package/{leiamnash → src}/chat.js +29 -4
  15. package/src/createNewGroup.js +86 -0
  16. package/src/createPoll.js +71 -0
  17. package/src/deleteMessage.js +56 -0
  18. package/src/deleteThread.js +56 -0
  19. package/src/edit.js +66 -0
  20. package/src/forwardAttachment.js +60 -0
  21. package/src/getCurrentUserID.js +7 -0
  22. package/src/getEmojiUrl.js +29 -0
  23. package/src/getFriendsList.js +83 -0
  24. package/src/getThreadHistory.js +666 -0
  25. package/src/getThreadInfo.js +232 -0
  26. package/src/getThreadList.js +241 -0
  27. package/src/getThreadPictures.js +79 -0
  28. package/src/getUserID.js +66 -0
  29. package/src/getUserInfo.js +74 -0
  30. package/src/handleFriendRequest.js +61 -0
  31. package/src/handleMessageRequest.js +65 -0
  32. package/src/httpGet.js +57 -0
  33. package/src/httpPost.js +57 -0
  34. package/src/httpPostFormData.js +63 -0
  35. package/src/listenMqtt.js +853 -0
  36. package/src/logout.js +75 -0
  37. package/src/markAsDelivered.js +58 -0
  38. package/src/markAsRead.js +80 -0
  39. package/src/markAsReadAll.js +50 -0
  40. package/src/markAsSeen.js +59 -0
  41. package/src/muteThread.js +52 -0
  42. package/src/react.js +109 -0
  43. package/{leiamnash → src}/refreshFb_dtsg.js +1 -1
  44. package/src/removeUserFromGroup.js +79 -0
  45. package/src/resolvePhotoUrl.js +45 -0
  46. package/src/searchForThread.js +53 -0
  47. package/src/seen.js +50 -0
  48. package/src/sendMessage.js +477 -0
  49. package/src/sendTypingIndicator.js +103 -0
  50. package/src/setMessageReaction.js +121 -0
  51. package/src/setPostReaction.js +109 -0
  52. package/src/setTitle.js +86 -0
  53. package/src/threadColors.js +131 -0
  54. package/src/unfriend.js +52 -0
  55. package/src/unsendMessage.js +49 -0
  56. package/{leiamnash → src}/uploadAttachment.js +1 -2
  57. package/leiamnash/addExternalModule.js +0 -15
  58. package/leiamnash/addUserToGroup.js +0 -77
  59. package/leiamnash/changeAdminStatus.js +0 -47
  60. package/leiamnash/changeArchivedStatus.js +0 -41
  61. package/leiamnash/changeBio.js +0 -64
  62. package/leiamnash/changeBlockedStatus.js +0 -36
  63. package/leiamnash/changeGroupImage.js +0 -105
  64. package/leiamnash/changeNickname.js +0 -43
  65. package/leiamnash/changeThreadColor.js +0 -61
  66. package/leiamnash/changeThreadEmoji.js +0 -41
  67. package/leiamnash/createNewGroup.js +0 -70
  68. package/leiamnash/createPoll.js +0 -59
  69. package/leiamnash/deleteMessage.js +0 -44
  70. package/leiamnash/deleteThread.js +0 -42
  71. package/leiamnash/edit.js +0 -59
  72. package/leiamnash/forwardAttachment.js +0 -47
  73. package/leiamnash/forwardMessage.js +0 -0
  74. package/leiamnash/getCurrentUserID.js +0 -7
  75. package/leiamnash/getEmojiUrl.js +0 -27
  76. package/leiamnash/getFriendsList.js +0 -73
  77. package/leiamnash/getInfoVideo.js +0 -134
  78. package/leiamnash/getThreadHistory.js +0 -537
  79. package/leiamnash/getThreadHistoryDeprecated.js +0 -71
  80. package/leiamnash/getThreadInfo.js +0 -171
  81. package/leiamnash/getThreadInfoDeprecated.js +0 -56
  82. package/leiamnash/getThreadList.js +0 -213
  83. package/leiamnash/getThreadListDeprecated.js +0 -46
  84. package/leiamnash/getThreadPictures.js +0 -59
  85. package/leiamnash/getUserID.js +0 -61
  86. package/leiamnash/getUserInfo.js +0 -66
  87. package/leiamnash/handleFriendRequest.js +0 -46
  88. package/leiamnash/handleMessageRequest.js +0 -47
  89. package/leiamnash/httpGet.js +0 -47
  90. package/leiamnash/httpPost.js +0 -47
  91. package/leiamnash/httpPostFormData.js +0 -42
  92. package/leiamnash/listenMqtt.js +0 -853
  93. package/leiamnash/logout.js +0 -68
  94. package/leiamnash/markAsDelivered.js +0 -47
  95. package/leiamnash/markAsRead.js +0 -70
  96. package/leiamnash/markAsReadAll.js +0 -40
  97. package/leiamnash/markAsSeen.js +0 -48
  98. package/leiamnash/muteThread.js +0 -45
  99. package/leiamnash/react.js +0 -109
  100. package/leiamnash/removeUserFromGroup.js +0 -45
  101. package/leiamnash/resolvePhotoUrl.js +0 -36
  102. package/leiamnash/searchForThread.js +0 -42
  103. package/leiamnash/seen.js +0 -40
  104. package/leiamnash/sendMessage.js +0 -315
  105. package/leiamnash/sendTypingIndicator.js +0 -70
  106. package/leiamnash/setMessageReaction.js +0 -103
  107. package/leiamnash/setPostReaction.js +0 -63
  108. package/leiamnash/setTitle.js +0 -70
  109. package/leiamnash/threadColors.js +0 -41
  110. package/leiamnash/unfriend.js +0 -42
  111. package/leiamnash/unsendMessage.js +0 -39
  112. /package/{leiamnash → src}/getMessage.js +0 -0
@@ -1,315 +0,0 @@
1
- "use strict";
2
-
3
- var utils = require("../utils");
4
- var log = require("npmlog");
5
- var bluebird = require("bluebird");
6
-
7
- var allowedProperties = {
8
- attachment: true,
9
- url: true,
10
- sticker: true,
11
- emoji: true,
12
- emojiSize: true,
13
- body: true,
14
- mentions: true,
15
- location: true,
16
- };
17
-
18
- module.exports = function(defaultFuncs, api, ctx) {
19
- function uploadAttachment(attachments, callback) {
20
- var uploads = [];
21
-
22
- // create an array of promises
23
- for (var i = 0; i < attachments.length; i++) {
24
- if (!utils.isReadableStream(attachments[i])) throw { error: "Attachment should be a readable stream and not " + utils.getType(attachments[i]) + "." };
25
- var form = {
26
- upload_1024: attachments[i],
27
- voice_clip: "true"
28
- };
29
-
30
- uploads.push(
31
- defaultFuncs
32
- .postFormData("https://upload.facebook.com/ajax/mercury/upload.php", ctx.jar, form, {})
33
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
34
- .then(function(resData) {
35
- if (resData.error) throw resData;
36
- // We have to return the data unformatted unless we want to change it
37
- // back in sendMessage.
38
- return resData.payload.metadata[0];
39
- })
40
- );
41
- }
42
-
43
- // resolve all promises
44
- bluebird
45
- .all(uploads)
46
- .then(resData => callback(null, resData))
47
- .catch(function(err) {
48
- log.error("uploadAttachment", err);
49
- return callback(err);
50
- });
51
- }
52
-
53
- function getUrl(url, callback) {
54
- var form = {
55
- image_height: 960,
56
- image_width: 960,
57
- uri: url
58
- };
59
-
60
- defaultFuncs
61
- .post("https://www.facebook.com/message_share_attachment/fromURI/", ctx.jar, form)
62
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
63
- .then(function(resData) {
64
- if (resData.error) return callback(resData);
65
- if (!resData.payload) return callback({ error: "Invalid url" });
66
- callback(null, resData.payload.share_data.share_params);
67
- })
68
- .catch(function(err) {
69
- log.error("getUrl", err);
70
- return callback(err);
71
- });
72
- }
73
-
74
- function sendContent(form, threadID, isSingleUser, messageAndOTID, callback) {
75
- // There are three cases here:
76
- // 1. threadID is of type array, where we're starting a new group chat with users
77
- // specified in the array.
78
- // 2. User is sending a message to a specific user.
79
- // 3. No additional form params and the message goes to an existing group chat.
80
- if (utils.getType(threadID) === "Array") {
81
- for (var i = 0; i < threadID.length; i++) form["specific_to_list[" + i + "]"] = "fbid:" + threadID[i];
82
- form["specific_to_list[" + threadID.length + "]"] = "fbid:" + ctx.userID;
83
- form["client_thread_id"] = "root:" + messageAndOTID;
84
- log.info("sendMessage", "Sending message to multiple users: " + threadID);
85
- } else {
86
- // This means that threadID is the id of a user, and the chat
87
- // is a single person chat
88
- if (isSingleUser) {
89
- form["specific_to_list[0]"] = "fbid:" + threadID;
90
- form["specific_to_list[1]"] = "fbid:" + ctx.userID;
91
- form["other_user_fbid"] = threadID;
92
- } else form["thread_fbid"] = threadID;
93
- }
94
-
95
- if (ctx.globalOptions.pageID) {
96
- form["author"] = "fbid:" + ctx.globalOptions.pageID;
97
- form["specific_to_list[1]"] = "fbid:" + ctx.globalOptions.pageID;
98
- form["creator_info[creatorID]"] = ctx.userID;
99
- form["creator_info[creatorType]"] = "direct_admin";
100
- form["creator_info[labelType]"] = "sent_message";
101
- form["creator_info[pageID]"] = ctx.globalOptions.pageID;
102
- form["request_user_id"] = ctx.globalOptions.pageID;
103
- form["creator_info[profileURI]"] = "https://www.facebook.com/profile.php?id=" + ctx.userID;
104
- }
105
-
106
- defaultFuncs
107
- .post("https://www.facebook.com/messaging/send/", ctx.jar, form)
108
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
109
- .then(function(resData) {
110
- if (!resData) return callback({ error: "Send message failed." });
111
- if (resData.error) {
112
- if (resData.error === 1545012) log.warn("sendMessage", "Got error 1545012. This might mean that you're not part of the conversation " + threadID);
113
- return callback(resData);
114
- }
115
-
116
- var messageInfo = resData.payload.actions.reduce(function(p, v) {
117
- return ({
118
- threadID: v.thread_fbid,
119
- messageID: v.message_id,
120
- timestamp: v.timestamp
121
- } || p);
122
- }, null);
123
-
124
- return callback(null, messageInfo);
125
- })
126
- .catch(function(err) {
127
- log.error("sendMessage", err);
128
- if (utils.getType(err) == "Object" && err.error === "Not logged in.") ctx.loggedIn = false;
129
- return callback(err);
130
- });
131
- }
132
-
133
- function send(form, threadID, messageAndOTID, callback, isGroup) {
134
- // fix lỗi = cach fetch threadID
135
- // iq 5 trieu nam =))
136
- if (utils.getType(threadID) === "Array") sendContent(form, threadID, false, messageAndOTID, callback);
137
- else {
138
- var THREADFIX = "ThreadID".replace("ThreadID", threadID);
139
- if (THREADFIX.length <= 15 && THREADFIX.indexOf(1) == 0) return sendContent(form, threadID, !isGroup, messageAndOTID, callback);
140
- else if (THREADFIX.length >= 15) return sendContent(form, threadID, threadID.length === 15, messageAndOTID, callback);
141
- else return sendContent(form, threadID, threadID.length === 15, messageAndOTID, callback);
142
- }
143
- }
144
-
145
- function handleUrl(msg, form, callback, cb) {
146
- if (msg.url) {
147
- form["shareable_attachment[share_type]"] = "100";
148
- getUrl(msg.url, function(err, params) {
149
- if (err) return callback(err);
150
- form["shareable_attachment[share_params]"] = params;
151
- cb();
152
- });
153
- } else cb();
154
- }
155
-
156
- function handleLocation(msg, form, callback, cb) {
157
- if (msg.location) {
158
- if (msg.location.latitude == null || msg.location.longitude == null) return callback({ error: "location property needs both latitude and longitude" });
159
- form["location_attachment[coordinates][latitude]"] = msg.location.latitude;
160
- form["location_attachment[coordinates][longitude]"] = msg.location.longitude;
161
- form["location_attachment[is_current_location]"] = !!msg.location.current;
162
- }
163
- cb();
164
- }
165
-
166
- function handleSticker(msg, form, callback, cb) {
167
- if (msg.sticker) form["sticker_id"] = msg.sticker;
168
- cb();
169
- }
170
-
171
- function handleEmoji(msg, form, callback, cb) {
172
- if (msg.emojiSize != null && msg.emoji == null) return callback({ error: "emoji property is empty" });
173
- if (msg.emoji) {
174
- if (msg.emojiSize == null) msg.emojiSize = "medium";
175
- if (msg.emojiSize != "small" && msg.emojiSize != "medium" && msg.emojiSize != "large") return callback({ error: "emojiSize property is invalid" });
176
- if (form["body"] != null && form["body"] != "") return callback({ error: "body is not empty" });
177
- form["body"] = msg.emoji;
178
- form["tags[0]"] = "hot_emoji_size:" + msg.emojiSize;
179
- }
180
- cb();
181
- }
182
-
183
- function handleAttachment(msg, form, callback, cb) {
184
- if (msg.attachment) {
185
- form["image_ids"] = [];
186
- form["gif_ids"] = [];
187
- form["file_ids"] = [];
188
- form["video_ids"] = [];
189
- form["audio_ids"] = [];
190
-
191
- if (utils.getType(msg.attachment) !== "Array") msg.attachment = [msg.attachment];
192
-
193
- uploadAttachment(msg.attachment, function(err, files) {
194
- if (err) return callback(err);
195
- files.forEach(function(file) {
196
- var key = Object.keys(file);
197
- var type = key[0]; // image_id, file_id, etc
198
- form["" + type + "s"].push(file[type]); // push the id
199
- });
200
- cb();
201
- });
202
- } else cb();
203
- }
204
-
205
- function handleMention(msg, form, callback, cb) {
206
- if (msg.mentions) {
207
- for (let i = 0; i < msg.mentions.length; i++) {
208
- const mention = msg.mentions[i];
209
- const tag = mention.tag;
210
- if (typeof tag !== "string") return callback({ error: "Mention tags must be strings." });
211
- const offset = msg.body.indexOf(tag, mention.fromIndex || 0);
212
- if (offset < 0) log.warn("handleMention", 'Mention for "' + tag + '" not found in message string.');
213
- if (mention.id == null) log.warn("handleMention", "Mention id should be non-null.");
214
-
215
- const id = mention.id || 0;
216
- const emptyChar = '\u200E';
217
- form["body"] = emptyChar + msg.body;
218
- form["profile_xmd[" + i + "][offset]"] = offset + 1;
219
- form["profile_xmd[" + i + "][length]"] = tag.length;
220
- form["profile_xmd[" + i + "][id]"] = id;
221
- form["profile_xmd[" + i + "][type]"] = "p";
222
- }
223
- }
224
- cb();
225
- }
226
-
227
- return function sendMessage(msg, threadID, callback, replyToMessage, isGroup) {
228
- typeof isGroup == "undefined" ? isGroup = null : "";
229
- if (!callback && (utils.getType(threadID) === "Function" || utils.getType(threadID) === "AsyncFunction")) return threadID({ error: "Pass a threadID as a second argument." });
230
- if (!replyToMessage && utils.getType(callback) === "String") {
231
- replyToMessage = callback;
232
- callback = function() {};
233
- }
234
-
235
- var resolveFunc = function() {};
236
- var rejectFunc = function() {};
237
- var returnPromise = new Promise(function(resolve, reject) {
238
- resolveFunc = resolve;
239
- rejectFunc = reject;
240
- });
241
-
242
- if (!callback) {
243
- callback = function(err, data) {
244
- if (err) return rejectFunc(err);
245
- resolveFunc(data);
246
- };
247
- }
248
-
249
- var msgType = utils.getType(msg);
250
- var threadIDType = utils.getType(threadID);
251
- var messageIDType = utils.getType(replyToMessage);
252
-
253
- if (msgType !== "String" && msgType !== "Object") return callback({ error: "Message should be of type string or object and not " + msgType + "." });
254
-
255
- // Changing this to accomodate an array of users
256
- if (threadIDType !== "Array" && threadIDType !== "Number" && threadIDType !== "String") return callback({ error: "ThreadID should be of type number, string, or array and not " + threadIDType + "." });
257
-
258
- if (replyToMessage && messageIDType !== 'String') return callback({ error: "MessageID should be of type string and not " + threadIDType + "." });
259
-
260
- if (msgType === "String") msg = { body: msg };
261
- var disallowedProperties = Object.keys(msg).filter(prop => !allowedProperties[prop]);
262
- if (disallowedProperties.length > 0) return callback({ error: "Dissallowed props: `" + disallowedProperties.join(", ") + "`" });
263
-
264
- var messageAndOTID = utils.generateOfflineThreadingID();
265
-
266
- var form = {
267
- client: "mercury",
268
- action_type: "ma-type:user-generated-message",
269
- author: "fbid:" + ctx.userID,
270
- timestamp: Date.now(),
271
- timestamp_absolute: "Today",
272
- timestamp_relative: utils.generateTimestampRelative(),
273
- timestamp_time_passed: "0",
274
- is_unread: false,
275
- is_cleared: false,
276
- is_forward: false,
277
- is_filtered_content: false,
278
- is_filtered_content_bh: false,
279
- is_filtered_content_account: false,
280
- is_filtered_content_quasar: false,
281
- is_filtered_content_invalid_app: false,
282
- is_spoof_warning: false,
283
- source: "source:chat:web",
284
- "source_tags[0]": "source:chat",
285
- body: msg.body ? msg.body.toString() : "",
286
- html_body: false,
287
- ui_push_phase: "V3",
288
- status: "0",
289
- offline_threading_id: messageAndOTID,
290
- message_id: messageAndOTID,
291
- threading_id: utils.generateThreadingID(ctx.clientID),
292
- "ephemeral_ttl_mode:": "0",
293
- manual_retry_cnt: "0",
294
- has_attachment: !!(msg.attachment || msg.url || msg.sticker),
295
- signatureID: utils.getSignatureID(),
296
- replied_to_message_id: replyToMessage
297
- };
298
-
299
- handleLocation(msg, form, callback, () =>
300
- handleSticker(msg, form, callback, () =>
301
- handleAttachment(msg, form, callback, () =>
302
- handleUrl(msg, form, callback, () =>
303
- handleEmoji(msg, form, callback, () =>
304
- handleMention(msg, form, callback, () =>
305
- send(form, threadID, messageAndOTID, callback, isGroup)
306
- )
307
- )
308
- )
309
- )
310
- )
311
- );
312
-
313
- return returnPromise;
314
- };
315
- };
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- var utils = require("../utils");
4
- var log = require("npmlog");
5
-
6
- module.exports = function (defaultFuncs, api, ctx) {
7
- function makeTypingIndicator(typ, threadID, callback, isGroup) {
8
- var form = {
9
- typ: +typ,
10
- to: "",
11
- source: "mercury-chat",
12
- thread: threadID
13
- };
14
-
15
- // Check if thread is a single person chat or a group chat
16
- // More info on this is in api.sendMessage
17
- if (utils.getType(isGroup) == "Boolean") {
18
- if (!isGroup) form.to = threadID;
19
-
20
- defaultFuncs
21
- .post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form)
22
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
23
- .then(function (resData) {
24
- if (resData.error) throw resData;
25
- return callback();
26
- })
27
- .catch(function (err) {
28
- log.error("sendTypingIndicator", err);
29
- if (utils.getType(err) == "Object" && err.error === "Not logged in") ctx.loggedIn = false;
30
- return callback(err);
31
- });
32
- }
33
- else {
34
- api.getUserInfo(threadID, function (err, res) {
35
- if (err) return callback(err);
36
- // If id is single person chat
37
- if (Object.keys(res).length > 0) form.to = threadID;
38
- defaultFuncs
39
- .post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form)
40
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
41
- .then(function (resData) {
42
- if (resData.error) throw resData;
43
- return callback();
44
- })
45
- .catch(function (err) {
46
- log.error("sendTypingIndicator", err);
47
- if (utils.getType(err) == "Object" && err.error === "Not logged in.") ctx.loggedIn = false;
48
- return callback(err);
49
- });
50
- });
51
- }
52
- }
53
-
54
- return function sendTypingIndicator(threadID, callback, isGroup) {
55
- if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
56
- if (callback) log.warn("sendTypingIndicator", "callback is not a function - ignoring.");
57
- callback = () => { };
58
- }
59
-
60
- makeTypingIndicator(true, threadID, callback, isGroup);
61
-
62
- return function end(cb) {
63
- if (utils.getType(cb) !== "Function" && utils.getType(cb) !== "AsyncFunction") {
64
- if (cb) log.warn("sendTypingIndicator", "callback is not a function - ignoring.");
65
- cb = () => { };
66
- }
67
- makeTypingIndicator(false, threadID, cb, isGroup);
68
- };
69
- };
70
- };
@@ -1,103 +0,0 @@
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 setMessageReaction(reaction, messageID, callback, forceCustomReaction) {
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
- switch (reaction) {
23
- case "\uD83D\uDE0D": //:heart_eyes:
24
- case "\uD83D\uDE06": //:laughing:
25
- case "\uD83D\uDE2E": //:open_mouth:
26
- case "\uD83D\uDE22": //:cry:
27
- case "\uD83D\uDE20": //:angry:
28
- case "\uD83D\uDC4D": //:thumbsup:
29
- case "\uD83D\uDC4E": //:thumbsdown:
30
- case "\u2764": //:heart:
31
- case "\uD83D\uDC97": //:glowingheart:
32
- case "":
33
- //valid
34
- break;
35
- case ":heart_eyes:":
36
- case ":love:":
37
- reaction = "\uD83D\uDE0D";
38
- break;
39
- case ":laughing:":
40
- case ":haha:":
41
- reaction = "\uD83D\uDE06";
42
- break;
43
- case ":open_mouth:":
44
- case ":wow:":
45
- reaction = "\uD83D\uDE2E";
46
- break;
47
- case ":cry:":
48
- case ":sad:":
49
- reaction = "\uD83D\uDE22";
50
- break;
51
- case ":angry:":
52
- reaction = "\uD83D\uDE20";
53
- break;
54
- case ":thumbsup:":
55
- case ":like:":
56
- reaction = "\uD83D\uDC4D";
57
- break;
58
- case ":thumbsdown:":
59
- case ":dislike:":
60
- reaction = "\uD83D\uDC4E";
61
- break;
62
- case ":heart:":
63
- reaction = "\u2764";
64
- break;
65
- case ":glowingheart:":
66
- reaction = "\uD83D\uDC97";
67
- break;
68
- default:
69
- if (forceCustomReaction) break;
70
- return callback({ error: "Reaction is not a valid emoji." });
71
- }
72
-
73
- var variables = {
74
- data: {
75
- client_mutation_id: ctx.clientMutationId++,
76
- actor_id: ctx.userID,
77
- action: reaction == "" ? "REMOVE_REACTION" : "ADD_REACTION",
78
- message_id: messageID,
79
- reaction: reaction
80
- }
81
- };
82
-
83
- var qs = {
84
- doc_id: "1491398900900362",
85
- variables: JSON.stringify(variables),
86
- dpr: 1
87
- };
88
-
89
- defaultFuncs
90
- .postFormData("https://www.facebook.com/webgraphql/mutation/", ctx.jar, {}, qs)
91
- .then(utils.parseAndCheckLogin(ctx.jar, defaultFuncs))
92
- .then(function (resData) {
93
- if (!resData) throw { error: "setReaction returned empty object." };
94
- if (resData.error) throw resData;
95
- callback(null);
96
- })
97
- .catch(function (err) {
98
- log.error("setReaction", err);
99
- return callback(err);
100
- });
101
- return returnPromise;
102
- };
103
- };
@@ -1,63 +0,0 @@
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 setPostReaction(postID, type, 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 map = {
23
- like: 1,
24
- heart: 2,
25
- wow: 3,
26
- haha: 4,
27
- sad: 7,
28
- angry: 8
29
- };
30
- if (typeof type != "number") {
31
- type = map[type.toLocaleLowerCase()];
32
- if (!type) type = 1;
33
- }
34
- var form = {
35
- av: ctx.userID,
36
- fb_api_caller_class: "RelayModern",
37
- fb_api_req_friendly_name: "UFI2FeedbackReactMutation",
38
- //This doc_id is valid as of January 17th, 2020
39
- doc_id: "2580813318646067",
40
- variables: JSON.stringify({
41
- input: {
42
- client_mutation_id: "7",
43
- actor_id: ctx.userID,
44
- feedback_reaction: type
45
- },
46
- useDefaultActor: true
47
- })
48
- };
49
-
50
- defaultFuncs
51
- .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
52
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
53
- .then(function (resData) {
54
- if (resData.error) throw resData;
55
- return callback();
56
- })
57
- .catch(function (err) {
58
- log.error("setPostReaction", err);
59
- return callback(err);
60
- });
61
- return returnPromise;
62
- };
63
- };
@@ -1,70 +0,0 @@
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 setTitle(newTitle, threadID, callback) {
8
- if (!callback && (utils.getType(threadID) === "Function" || utils.getType(threadID) === "AsyncFunction"))
9
- throw { error: "please pass a threadID as a second argument." };
10
-
11
-
12
- var resolveFunc = function () { };
13
- var rejectFunc = function () { };
14
- var returnPromise = new Promise(function (resolve, reject) {
15
- resolveFunc = resolve;
16
- rejectFunc = reject;
17
- });
18
-
19
- if (!callback) {
20
- callback = function (err, data) {
21
- if (err) return rejectFunc(err);
22
- resolveFunc(data);
23
- };
24
- }
25
-
26
- var messageAndOTID = utils.generateOfflineThreadingID();
27
- var form = {
28
- client: "mercury",
29
- action_type: "ma-type:log-message",
30
- author: "fbid:" + ctx.userID,
31
- author_email: "",
32
- coordinates: "",
33
- timestamp: Date.now(),
34
- timestamp_absolute: "Today",
35
- timestamp_relative: utils.generateTimestampRelative(),
36
- timestamp_time_passed: "0",
37
- is_unread: false,
38
- is_cleared: false,
39
- is_forward: false,
40
- is_filtered_content: false,
41
- is_spoof_warning: false,
42
- source: "source:chat:web",
43
- "source_tags[0]": "source:chat",
44
- status: "0",
45
- offline_threading_id: messageAndOTID,
46
- message_id: messageAndOTID,
47
- threading_id: utils.generateThreadingID(ctx.clientID),
48
- manual_retry_cnt: "0",
49
- thread_fbid: threadID,
50
- thread_name: newTitle,
51
- thread_id: threadID,
52
- log_message_type: "log:thread-name"
53
- };
54
-
55
- defaultFuncs
56
- .post("https://www.facebook.com/messaging/set_thread_name/", ctx.jar, form)
57
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
58
- .then(function (resData) {
59
- if (resData.error && resData.error === 1545012) throw { error: "Cannot change chat title: Not member of chat." };
60
- if (resData.error && resData.error === 1545003) throw { error: "Cannot set title of single-user chat." };
61
- if (resData.error) throw resData;
62
- return callback();
63
- })
64
- .catch(function (err) {
65
- log.error("setTitle", err);
66
- return callback(err);
67
- });
68
- return returnPromise;
69
- };
70
- };
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = function (_defaultFuncs, _api, _ctx) {
4
- // Currently the only colors that can be passed to api.changeThreadColor(); may change if Facebook adds more
5
- return {
6
-
7
- //#region This part is for backward compatibly
8
- //trying to match the color one-by-one. kill me plz
9
- MessengerBlue: "196241301102133", //DefaultBlue
10
- Viking: "1928399724138152", //TealBlue
11
- GoldenPoppy: "174636906462322", //Yellow
12
- RadicalRed: "2129984390566328", //Red
13
- Shocking: "2058653964378557", //LavenderPurple
14
- FreeSpeechGreen: "2136751179887052", //Green
15
- Pumpkin: "175615189761153", //Orange
16
- LightCoral: "980963458735625", //CoralPink
17
- MediumSlateBlue: "234137870477637", //BrightPurple
18
- DeepSkyBlue: "2442142322678320", //AquaBlue
19
- BrilliantRose: "169463077092846", //HotPink
20
- //i've tried my best, everything else can't be mapped. (or is it?) -UIRI 2020
21
- //#endregion
22
-
23
- DefaultBlue: "196241301102133",
24
- HotPink: "169463077092846",
25
- AquaBlue: "2442142322678320",
26
- BrightPurple: "234137870477637",
27
- CoralPink: "980963458735625",
28
- Orange: "175615189761153",
29
- Green: "2136751179887052",
30
- LavenderPurple: "2058653964378557",
31
- Red: "2129984390566328",
32
- Yellow: "174636906462322",
33
- TealBlue: "1928399724138152",
34
- Aqua: "417639218648241",
35
- Mango: "930060997172551",
36
- Berry: "164535220883264",
37
- Citrus: "370940413392601",
38
- Candy: "205488546921017",
39
- //StarWars: "809305022860427" Removed.
40
- };
41
- };