alicezetion 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.cache/replit/__replit_disk_meta.json +1 -1
  2. package/alice/addExternalModule.js +19 -0
  3. package/alice/{add.js → addUserToGroup.js} +16 -2
  4. package/alice/{admin.js → changeAdminStatus.js} +17 -3
  5. package/alice/{archive.js → changeArchivedStatus.js} +16 -2
  6. package/alice/changeBio.js +77 -0
  7. package/alice/changeBlockedStatus.js +47 -0
  8. package/alice/{gcimage.js → changeGroupImage.js} +16 -2
  9. package/alice/{nickname.js → changeNickname.js} +17 -2
  10. package/alice/changeThreadColor.js +71 -0
  11. package/alice/{emoji.js → changeThreadEmoji.js} +16 -2
  12. package/alice/createNewGroup.js +86 -0
  13. package/alice/{poll.js → createPoll.js} +18 -2
  14. package/alice/{deletemsg.js → deleteMessage.js} +15 -2
  15. package/alice/{deletegc.js → deleteThread.js} +15 -2
  16. package/alice/{forward.js → forwardAttachment.js} +16 -3
  17. package/alice/{id.js → getCurrentUserID.js} +1 -1
  18. package/alice/{friend.js → getFriendsList.js} +17 -3
  19. package/alice/{history.js → getThreadHistory.js} +19 -6
  20. package/alice/{gchistorydeprecated.js → getThreadHistoryDeprecated.js} +18 -1
  21. package/alice/{gcinfo.js → getThreadInfo.js} +49 -13
  22. package/alice/{gcinfodeprecated.js → getThreadInfoDeprecated.js} +17 -2
  23. package/alice/{gclist.js → getThreadList.js} +27 -9
  24. package/alice/{gclistdeprecated.js → getThreadListDeprecated.js} +1 -1
  25. package/alice/{gcimg.js → getThreadPictures.js} +15 -2
  26. package/alice/{userid.js → getUserID.js} +16 -2
  27. package/alice/{userinfo.js → getUserInfo.js} +17 -2
  28. package/alice/handleFriendRequest.js +61 -0
  29. package/alice/{msgrequest.js → handleMessageRequest.js} +16 -2
  30. package/alice/httpGet.js +52 -0
  31. package/alice/httpPost.js +52 -0
  32. package/alice/listenMqtt.js +363 -134
  33. package/alice/logout.js +18 -2
  34. package/alice/{delivered.js → markAsDelivered.js} +19 -2
  35. package/alice/markAsRead.js +80 -0
  36. package/alice/{seen.js → markAsReadAll.js} +16 -2
  37. package/alice/markAsSeen.js +59 -0
  38. package/alice/{mute.js → muteThread.js} +16 -2
  39. package/alice/{kick.js → removeUserFromGroup.js} +16 -2
  40. package/alice/{resolveimgurl.js → resolvePhotoUrl.js} +16 -2
  41. package/alice/{gcsearch.js → searchForThread.js} +16 -2
  42. package/alice/{chat.js → sendMessage.js} +78 -34
  43. package/alice/sendTypingIndicator.js +103 -0
  44. package/alice/{react.js → setMessageReaction.js} +39 -4
  45. package/alice/setPostReaction.js +76 -0
  46. package/alice/{title.js → setTitle.js} +16 -3
  47. package/alice/threadColors.js +57 -0
  48. package/alice/unfriend.js +52 -0
  49. package/alice/{unsend.js → unsendMessage.js} +16 -2
  50. package/index.js +324 -143
  51. package/package.json +19 -10
  52. package/utils.js +137 -61
  53. package/README.md +0 -40
  54. package/alice/block.js +0 -72
  55. package/alice/color.js +0 -53
  56. package/alice/gcolor.js +0 -22
  57. package/alice/listen.js +0 -553
  58. package/alice/read.js +0 -52
  59. package/alice/typeindicator.js +0 -77
  60. /package/alice/{emojiurl.js → getEmojiUrl.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var cheerio = require("cheerio");
3
+ //var cheerio = require("cheerio");
4
4
  var utils = require("../utils");
5
5
  var log = require("npmlog");
6
6
 
@@ -39,10 +39,22 @@ function formatData(obj) {
39
39
  });
40
40
  }
41
41
 
42
- module.exports = function(defaultFuncs, bot, ctx) {
42
+ module.exports = function(defaultFuncs, api, ctx) {
43
43
  return function getFriendsList(callback) {
44
+ var resolveFunc = function(){};
45
+ var rejectFunc = function(){};
46
+ var returnPromise = new Promise(function (resolve, reject) {
47
+ resolveFunc = resolve;
48
+ rejectFunc = reject;
49
+ });
50
+
44
51
  if (!callback) {
45
- throw { error: "getFriendsList: need callback" };
52
+ callback = function (err, friendList) {
53
+ if (err) {
54
+ return rejectFunc(err);
55
+ }
56
+ resolveFunc(friendList);
57
+ };
46
58
  }
47
59
 
48
60
  defaultFuncs
@@ -66,5 +78,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
66
78
  log.error("getFriendsList", err);
67
79
  return callback(err);
68
80
  });
81
+
82
+ return returnPromise;
69
83
  };
70
84
  };
@@ -103,7 +103,6 @@ function formatAttachmentsGraphQLResponse(attachment) {
103
103
  duration: attachment.playable_duration_in_ms,
104
104
  videoType: attachment.video_type.toLowerCase()
105
105
  };
106
- break;
107
106
  case "MessageFile":
108
107
  return {
109
108
  type: "file",
@@ -364,14 +363,14 @@ function formatMessagesGraphQLResponse(data) {
364
363
  // Give priority to stickers. They're seen as normal messages but we've
365
364
  // been considering them as attachments.
366
365
  var maybeStickerAttachment;
367
- if (d.sticker && d.sticker.pack) {
366
+ if (d.sticker) {
368
367
  maybeStickerAttachment = [
369
368
  {
370
369
  type: "sticker",
371
370
  ID: d.sticker.id,
372
371
  url: d.sticker.url,
373
372
 
374
- packID: d.sticker.pack ? d.sticker.pack.id : null,
373
+ packID: d.sticker.pack.id,
375
374
  spriteUrl: d.sticker.sprite_image,
376
375
  spriteUrl2x: d.sticker.sprite_image_2x,
377
376
  width: d.sticker.width,
@@ -578,15 +577,27 @@ function formatMessagesGraphQLResponse(data) {
578
577
  return messages;
579
578
  }
580
579
 
581
- module.exports = function(defaultFuncs, bot, ctx) {
580
+ module.exports = function(defaultFuncs, api, ctx) {
582
581
  return function getThreadHistoryGraphQL(
583
582
  threadID,
584
583
  amount,
585
584
  timestamp,
586
585
  callback
587
586
  ) {
587
+ var resolveFunc = function(){};
588
+ var rejectFunc = function(){};
589
+ var returnPromise = new Promise(function (resolve, reject) {
590
+ resolveFunc = resolve;
591
+ rejectFunc = reject;
592
+ });
593
+
588
594
  if (!callback) {
589
- throw { error: "getThreadHistoryGraphQL: need callback" };
595
+ callback = function (err, data) {
596
+ if (err) {
597
+ return rejectFunc(err);
598
+ }
599
+ resolveFunc(data);
600
+ };
590
601
  }
591
602
 
592
603
  // `queries` has to be a string. I couldn't tell from the dev console. This
@@ -619,7 +630,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
619
630
  // failure one.
620
631
  // @TODO What do we do in this case?
621
632
  if (resData[resData.length - 1].error_results !== 0) {
622
- throw new Error("well darn there was an error_result");
633
+ throw new Error("There was an error_result.");
623
634
  }
624
635
 
625
636
  callback(null, formatMessagesGraphQLResponse(resData[0]));
@@ -628,5 +639,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
628
639
  log.error("getThreadHistoryGraphQL", err);
629
640
  return callback(err);
630
641
  });
642
+
643
+ return returnPromise;
631
644
  };
632
645
  };
@@ -3,8 +3,24 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, bot, ctx) {
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
7
  return function getThreadHistory(threadID, amount, timestamp, 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, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
21
+ };
22
+ }
23
+
8
24
  if (!callback) {
9
25
  throw { error: "getThreadHistory: need callback" };
10
26
  }
@@ -72,5 +88,6 @@ module.exports = function(defaultFuncs, bot, ctx) {
72
88
  return callback(err);
73
89
  });
74
90
  });
91
+ return returnPromise;
75
92
  };
76
93
  };
@@ -31,7 +31,12 @@ function formatEventReminders(reminder) {
31
31
  }
32
32
 
33
33
  function formatThreadGraphQLResponse(data) {
34
- var messageThread = data.o0.data.message_thread;
34
+ try{
35
+ var messageThread = data.o0.data.message_thread;
36
+ } catch (err){
37
+ console.error("GetThreadInfoGraphQL", "Can't get this thread info!");
38
+ return {err: err};
39
+ }
35
40
  var threadID = messageThread.thread_key.thread_fbid
36
41
  ? messageThread.thread_key.thread_fbid
37
42
  : messageThread.thread_key.other_user_id;
@@ -57,9 +62,19 @@ function formatThreadGraphQLResponse(data) {
57
62
  return {
58
63
  threadID: threadID,
59
64
  threadName: messageThread.name,
60
- participantIDs: messageThread.all_participants.nodes.map(function(d) {
61
- return d.messaging_actor.id;
62
- }),
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
+ })),
63
78
  unreadCount: messageThread.unread_count,
64
79
  messageCount: messageThread.messages_count,
65
80
  timestamp: messageThread.updated_time_precise,
@@ -92,9 +107,15 @@ function formatThreadGraphQLResponse(data) {
92
107
  )
93
108
  : {},
94
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
+ })),
95
117
 
96
118
  // @Undocumented
97
- topEmojis: messageThread.top_emojis,
98
119
  reactionsMuteMode: messageThread.reactions_mute_mode.toLowerCase(),
99
120
  mentionsMuteMode: messageThread.mentions_mute_mode.toLowerCase(),
100
121
  isPinProtected: messageThread.is_pin_protected,
@@ -122,10 +143,22 @@ function formatThreadGraphQLResponse(data) {
122
143
  };
123
144
  }
124
145
 
125
- module.exports = function(defaultFuncs, bot, ctx) {
146
+ module.exports = function(defaultFuncs, api, ctx) {
126
147
  return function getThreadInfoGraphQL(threadID, callback) {
127
- if (!callback) {
128
- throw { error: "getThreadInfoGraphQL: need callback" };
148
+ var resolveFunc = function(){};
149
+ var rejectFunc = function(){};
150
+ var returnPromise = new Promise(function (resolve, reject) {
151
+ resolveFunc = resolve;
152
+ rejectFunc = reject;
153
+ });
154
+
155
+ if (utils.getType(callback) != "Function" && utils.getType(callback) != "AsyncFunction") {
156
+ callback = function (err, data) {
157
+ if (err) {
158
+ return rejectFunc(err);
159
+ }
160
+ resolveFunc(data);
161
+ };
129
162
  }
130
163
 
131
164
  // `queries` has to be a string. I couldn't tell from the dev console. This
@@ -133,17 +166,18 @@ module.exports = function(defaultFuncs, bot, ctx) {
133
166
  var form = {
134
167
  queries: JSON.stringify({
135
168
  o0: {
136
- // This doc_id is valid as of February 1st, 2018.
137
- doc_id: "1498317363570230",
169
+ // This doc_id is valid as of July 20th, 2020
170
+ doc_id: "3449967031715030",
138
171
  query_params: {
139
172
  id: threadID,
140
173
  message_limit: 0,
141
- load_messages: 0,
174
+ load_messages: false,
142
175
  load_read_receipts: false,
143
176
  before: null
144
177
  }
145
178
  }
146
- })
179
+ }),
180
+ batch_name: "MessengerGraphQLThreadFetcher"
147
181
  };
148
182
 
149
183
  defaultFuncs
@@ -157,7 +191,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
157
191
  // failure one.
158
192
  // @TODO What do we do in this case?
159
193
  if (resData[resData.length - 1].error_results !== 0) {
160
- throw new Error("well darn there was an error_result");
194
+ console.error("GetThreadInfo", "Well darn there was an error_result");
161
195
  }
162
196
 
163
197
  callback(null, formatThreadGraphQLResponse(resData[0]));
@@ -166,5 +200,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
166
200
  log.error("getThreadInfoGraphQL", err);
167
201
  return callback(err);
168
202
  });
203
+
204
+ return returnPromise;
169
205
  };
170
206
  };
@@ -3,9 +3,23 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, bot, ctx) {
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
7
  return function getThreadInfo(threadID, callback) {
8
- if (!callback) callback = function() {};
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, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
21
+ };
22
+ }
9
23
 
10
24
  var form = {
11
25
  client: "mercury"
@@ -61,5 +75,6 @@ module.exports = function(defaultFuncs, bot, ctx) {
61
75
  return callback(err);
62
76
  });
63
77
  });
78
+ return returnPromise;
64
79
  };
65
80
  };
@@ -9,8 +9,8 @@ function createProfileUrl(url, username, id) {
9
9
  }
10
10
 
11
11
  function formatParticipants(participants) {
12
- return participants.nodes.map((p)=>{
13
- p = p.messaging_actor;
12
+ return participants.edges.map((p)=>{
13
+ p = p.node.messaging_actor;
14
14
  switch (p["__typename"]) {
15
15
  case "User":
16
16
  return {
@@ -66,7 +66,7 @@ function formatParticipants(participants) {
66
66
  isMessageBlockedByViewer: p.is_message_blocked_by_viewer, // true/false
67
67
  };
68
68
  default:
69
- log.warn("getThreadList", "Found participant with unsupported typename. Please open an issue at https://github.com/Schmavery/facebook-chat-api/issues\n" + JSON.stringify(p, null, 2));
69
+ log.warn("getThreadList", "Found participant with unsupported typename. Please open an issue at https://github.com/Schmavery/fca-unofficial/issues\n" + JSON.stringify(p, null, 2));
70
70
  return {
71
71
  accountType: p["__typename"],
72
72
  userID: utils.formatID(p.id.toString()),
@@ -87,7 +87,8 @@ function formatColor(color) {
87
87
  function getThreadName(t) {
88
88
  if (t.name || t.thread_key.thread_fbid) return t.name;
89
89
 
90
- for (let p of t.all_participants.nodes) {
90
+ for (let po of t.all_participants.edges) {
91
+ let p = po.node;
91
92
  if (p.messaging_actor.id === t.thread_key.other_user_id) return p.messaging_actor.name;
92
93
  }
93
94
  }
@@ -141,6 +142,7 @@ function formatThreadList(data) {
141
142
  ? (t.last_read_receipt.nodes[0]?t.last_read_receipt.nodes[0].timestamp_precise:null)
142
143
  : null, // timestamp in miliseconds
143
144
  cannotReplyReason: t.cannot_reply_reason, // TODO: inspect possible values
145
+ approvalMode: Boolean(t.approval_mode),
144
146
 
145
147
  // @Legacy
146
148
  participantIDs: formatParticipants(t.all_participants).map(participant => participant.userID),
@@ -149,7 +151,7 @@ function formatThreadList(data) {
149
151
  });
150
152
  }
151
153
 
152
- module.exports = function(defaultFuncs, bot, ctx) {
154
+ module.exports = function(defaultFuncs, api, ctx) {
153
155
  return function getThreadList(limit, timestamp, tags, callback) {
154
156
  if (!callback && (utils.getType(tags) === "Function" || utils.getType(tags) === "AsyncFunction")) {
155
157
  callback = tags;
@@ -168,16 +170,29 @@ module.exports = function(defaultFuncs, bot, ctx) {
168
170
  if (utils.getType(tags) !== "Array") {
169
171
  throw {error: "getThreadList: tags must be an array"};
170
172
  }
173
+
174
+ var resolveFunc = function(){};
175
+ var rejectFunc = function(){};
176
+ var returnPromise = new Promise(function (resolve, reject) {
177
+ resolveFunc = resolve;
178
+ rejectFunc = reject;
179
+ });
180
+
171
181
  if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
172
- throw {error: "getThreadList: need callback"};
182
+ callback = function (err, data) {
183
+ if (err) {
184
+ return rejectFunc(err);
185
+ }
186
+ resolveFunc(data);
187
+ };
173
188
  }
174
189
 
175
190
  const form = {
176
191
  "av": ctx.globalOptions.pageID,
177
192
  "queries": JSON.stringify({
178
193
  "o0": {
179
- // This doc_id was valid on 2018-04-04.
180
- "doc_id": "1349387578499440",
194
+ // This doc_id was valid on 2020-07-20
195
+ "doc_id": "3336396659757871",
181
196
  "query_params": {
182
197
  "limit": limit+(timestamp?1:0),
183
198
  "before": timestamp,
@@ -186,7 +201,8 @@ module.exports = function(defaultFuncs, bot, ctx) {
186
201
  "includeSeqID": false
187
202
  }
188
203
  }
189
- })
204
+ }),
205
+ "batch_name": "MessengerGraphQLThreadlistFetcher"
190
206
  };
191
207
 
192
208
  defaultFuncs
@@ -216,5 +232,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
216
232
  log.error("getThreadList", err);
217
233
  return callback(err);
218
234
  });
235
+
236
+ return returnPromise;
219
237
  };
220
238
  };
@@ -3,7 +3,7 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, bot, ctx) {
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
7
  return function getThreadList(start, end, type, callback) {
8
8
  if (utils.getType(callback) === "Undefined") {
9
9
  if (utils.getType(end) !== "Number") {
@@ -3,10 +3,22 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, bot, ctx) {
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
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
+
8
15
  if (!callback) {
9
- throw { error: "getThreadPictures: need callback" };
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
21
+ };
10
22
  }
11
23
 
12
24
  var form = {
@@ -62,5 +74,6 @@ module.exports = function(defaultFuncs, bot, ctx) {
62
74
  log.error("Error in getThreadPictures", err);
63
75
  callback(err);
64
76
  });
77
+ return returnPromise;
65
78
  };
66
79
  };
@@ -17,10 +17,22 @@ function formatData(data) {
17
17
  };
18
18
  }
19
19
 
20
- module.exports = function(defaultFuncs, bot, ctx) {
20
+ module.exports = function(defaultFuncs, api, ctx) {
21
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
+
22
29
  if (!callback) {
23
- throw { error: "getUserID: need callback" };
30
+ callback = function (err, friendList) {
31
+ if (err) {
32
+ return rejectFunc(err);
33
+ }
34
+ resolveFunc(friendList);
35
+ };
24
36
  }
25
37
 
26
38
  var form = {
@@ -48,5 +60,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
48
60
  log.error("getUserID", err);
49
61
  return callback(err);
50
62
  });
63
+
64
+ return returnPromise;
51
65
  };
52
66
  };
@@ -7,6 +7,7 @@ function formatData(data) {
7
7
  var retObj = {};
8
8
 
9
9
  for (var prop in data) {
10
+ // eslint-disable-next-line no-prototype-builtins
10
11
  if (data.hasOwnProperty(prop)) {
11
12
  var innerObj = data[prop];
12
13
  retObj[prop] = {
@@ -26,10 +27,22 @@ function formatData(data) {
26
27
  return retObj;
27
28
  }
28
29
 
29
- module.exports = function(defaultFuncs, bot, ctx) {
30
+ module.exports = function(defaultFuncs, api, ctx) {
30
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
+
31
39
  if (!callback) {
32
- throw { error: "getUserInfo: need callback" };
40
+ callback = function (err, friendList) {
41
+ if (err) {
42
+ return rejectFunc(err);
43
+ }
44
+ resolveFunc(friendList);
45
+ };
33
46
  }
34
47
 
35
48
  if (utils.getType(id) !== "Array") {
@@ -53,5 +66,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
53
66
  log.error("getUserInfo", err);
54
67
  return callback(err);
55
68
  });
69
+
70
+ return returnPromise;
56
71
  };
57
72
  };
@@ -0,0 +1,61 @@
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 handleFriendRequest(userID, accept, callback) {
8
+ if (utils.getType(accept) !== "Boolean") {
9
+ throw {
10
+ error: "Please pass a boolean as a second argument."
11
+ };
12
+ }
13
+
14
+ var resolveFunc = function(){};
15
+ var rejectFunc = function(){};
16
+ var returnPromise = new Promise(function (resolve, reject) {
17
+ resolveFunc = resolve;
18
+ rejectFunc = reject;
19
+ });
20
+
21
+ if (!callback) {
22
+ callback = function (err, friendList) {
23
+ if (err) {
24
+ return rejectFunc(err);
25
+ }
26
+ resolveFunc(friendList);
27
+ };
28
+ }
29
+
30
+ var form = {
31
+ viewer_id: ctx.userID,
32
+ "frefs[0]": "jwl",
33
+ floc: "friend_center_requests",
34
+ ref: "/reqs.php",
35
+ action: (accept ? "confirm" : "reject")
36
+ };
37
+
38
+ defaultFuncs
39
+ .post(
40
+ "https://www.facebook.com/requests/friends/ajax/",
41
+ ctx.jar,
42
+ form
43
+ )
44
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
45
+ .then(function(resData) {
46
+ if (resData.payload.err) {
47
+ throw {
48
+ err: resData.payload.err
49
+ };
50
+ }
51
+
52
+ return callback();
53
+ })
54
+ .catch(function(err) {
55
+ log.error("handleFriendRequest", err);
56
+ return callback(err);
57
+ });
58
+
59
+ return returnPromise;
60
+ };
61
+ };
@@ -3,7 +3,7 @@
3
3
  var utils = require("../utils");
4
4
  var log = require("npmlog");
5
5
 
6
- module.exports = function(defaultFuncs, bot, ctx) {
6
+ module.exports = function(defaultFuncs, api, ctx) {
7
7
  return function handleMessageRequest(threadID, accept, callback) {
8
8
  if (utils.getType(accept) !== "Boolean") {
9
9
  throw {
@@ -11,8 +11,20 @@ module.exports = function(defaultFuncs, bot, ctx) {
11
11
  };
12
12
  }
13
13
 
14
+ var resolveFunc = function(){};
15
+ var rejectFunc = function(){};
16
+ var returnPromise = new Promise(function (resolve, reject) {
17
+ resolveFunc = resolve;
18
+ rejectFunc = reject;
19
+ });
20
+
14
21
  if (!callback) {
15
- callback = function() {};
22
+ callback = function (err, friendList) {
23
+ if (err) {
24
+ return rejectFunc(err);
25
+ }
26
+ resolveFunc(friendList);
27
+ };
16
28
  }
17
29
 
18
30
  var form = {
@@ -47,5 +59,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
47
59
  log.error("handleMessageRequest", err);
48
60
  return callback(err);
49
61
  });
62
+
63
+ return returnPromise;
50
64
  };
51
65
  };
@@ -0,0 +1,52 @@
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 httpGet(url, form, callback, notAPI) {
8
+ var resolveFunc = function(){};
9
+ var rejectFunc = function(){};
10
+
11
+ var returnPromise = new Promise(function (resolve, reject) {
12
+ resolveFunc = resolve;
13
+ rejectFunc = reject;
14
+ });
15
+
16
+ if (!callback && (utils.getType(form) == "Function" || utils.getType(form) == "AsyncFunction")) {
17
+ callback = form;
18
+ form = {};
19
+ }
20
+
21
+ form = form || {};
22
+
23
+ callback = callback || function(err, data) {
24
+ if (err) return rejectFunc(err);
25
+ resolveFunc(data);
26
+ };
27
+
28
+ if (notAPI) {
29
+ utils
30
+ .get(url, ctx.jar, form, ctx.globalOptions)
31
+ .then(function(resData) {
32
+ callback(null, resData.body.toString());
33
+ })
34
+ .catch(function(err) {
35
+ log.error("httpGet", err);
36
+ return callback(err);
37
+ });
38
+ } else {
39
+ defaultFuncs
40
+ .get(url, ctx.jar, form)
41
+ .then(function(resData) {
42
+ callback(null, resData.body.toString());
43
+ })
44
+ .catch(function(err) {
45
+ log.error("httpGet", err);
46
+ return callback(err);
47
+ });
48
+ }
49
+
50
+ return returnPromise;
51
+ };
52
+ };