alicezetion 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/.cache/replit/__replit_disk_meta.json +1 -1
  2. package/.cache/replit/nix/env.json +1 -1
  3. package/alice/addExternalModule.js +19 -0
  4. package/alice/{add.js → addUserToGroup.js} +16 -2
  5. package/alice/{admin.js → changeAdminStatus.js} +17 -3
  6. package/alice/{archive.js → changeArchivedStatus.js} +16 -2
  7. package/alice/changeBio.js +77 -0
  8. package/alice/changeBlockedStatus.js +47 -0
  9. package/alice/{gcimage.js → changeGroupImage.js} +16 -2
  10. package/alice/{nickname.js → changeNickname.js} +17 -2
  11. package/alice/changeThreadColor.js +71 -0
  12. package/alice/{emoji.js → changeThreadEmoji.js} +16 -2
  13. package/alice/createNewGroup.js +86 -0
  14. package/alice/{poll.js → createPoll.js} +18 -2
  15. package/alice/{deletemsg.js → deleteMessage.js} +15 -2
  16. package/alice/{deletegc.js → deleteThread.js} +15 -2
  17. package/alice/{forward.js → forwardAttachment.js} +16 -3
  18. package/alice/{id.js → getCurrentUserID.js} +1 -1
  19. package/alice/{friend.js → getFriendsList.js} +17 -3
  20. package/alice/{history.js → getThreadHistory.js} +19 -6
  21. package/alice/{gchistorydeprecated.js → getThreadHistoryDeprecated.js} +18 -1
  22. package/alice/{gcinfo.js → getThreadInfo.js} +49 -13
  23. package/alice/{gcinfodeprecated.js → getThreadInfoDeprecated.js} +17 -2
  24. package/alice/{gclist.js → getThreadList.js} +27 -9
  25. package/alice/{gclistdeprecated.js → getThreadListDeprecated.js} +1 -1
  26. package/alice/{gcimg.js → getThreadPictures.js} +15 -2
  27. package/alice/{userid.js → getUserID.js} +16 -2
  28. package/alice/{userinfo.js → getUserInfo.js} +18 -3
  29. package/alice/handleFriendRequest.js +61 -0
  30. package/alice/{msgrequest.js → handleMessageRequest.js} +16 -2
  31. package/alice/httpGet.js +52 -0
  32. package/alice/httpPost.js +52 -0
  33. package/alice/listenMqtt.js +363 -134
  34. package/alice/logout.js +18 -2
  35. package/alice/{delivered.js → markAsDelivered.js} +19 -2
  36. package/alice/markAsRead.js +80 -0
  37. package/alice/{seen.js → markAsReadAll.js} +16 -2
  38. package/alice/markAsSeen.js +59 -0
  39. package/alice/{mute.js → muteThread.js} +16 -2
  40. package/alice/{kick.js → removeUserFromGroup.js} +16 -2
  41. package/alice/{resolveimgurl.js → resolvePhotoUrl.js} +16 -2
  42. package/alice/{gcsearch.js → searchForThread.js} +16 -2
  43. package/alice/{chat.js → sendMessage.js} +78 -34
  44. package/alice/sendTypingIndicator.js +103 -0
  45. package/alice/{react.js → setMessageReaction.js} +39 -4
  46. package/alice/setPostReaction.js +76 -0
  47. package/alice/{title.js → setTitle.js} +16 -3
  48. package/alice/threadColors.js +57 -0
  49. package/alice/unfriend.js +52 -0
  50. package/alice/{unsend.js → unsendMessage.js} +16 -2
  51. package/index.js +324 -143
  52. package/package.json +27 -18
  53. package/utils.js +137 -61
  54. package/.cache/replit/modules.stamp +0 -0
  55. package/README.md +0 -40
  56. package/alice/block.js +0 -72
  57. package/alice/color.js +0 -53
  58. package/alice/gcolor.js +0 -22
  59. package/alice/listen.js +0 -553
  60. package/alice/read.js +0 -52
  61. package/alice/typeindicator.js +0 -77
  62. /package/alice/{emojiurl.js → getEmojiUrl.js} +0 -0
package/alice/logout.js CHANGED
@@ -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 logout(callback) {
8
- 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
  pmid: "0"
@@ -55,5 +69,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
55
69
  log.error("logout", err);
56
70
  return callback(err);
57
71
  });
72
+
73
+ return returnPromise;
58
74
  };
59
75
  };
@@ -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 markAsDelivered(threadID, messageID, 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
- callback = function () { };
16
+ callback = function (err, friendList) {
17
+ if (err) {
18
+ return rejectFunc(err);
19
+ }
20
+ resolveFunc(friendList);
21
+ };
10
22
  }
11
23
 
12
24
  if (!threadID || !messageID) {
@@ -35,7 +47,12 @@ module.exports = function (defaultFuncs, bot, ctx) {
35
47
  })
36
48
  .catch(function (err) {
37
49
  log.error("markAsDelivered", err);
50
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
51
+ ctx.loggedIn = false;
52
+ }
38
53
  return callback(err);
39
54
  });
55
+
56
+ return returnPromise;
40
57
  };
41
58
  };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return async function markAsRead(threadID, read, callback) {
8
+ if (utils.getType(read) === 'Function' || utils.getType(read) === 'AsyncFunction') {
9
+ callback = read;
10
+ read = true;
11
+ }
12
+ if (read == undefined) {
13
+ read = true;
14
+ }
15
+
16
+ if (!callback) {
17
+ callback = () => { };
18
+ }
19
+
20
+ var form = {};
21
+
22
+ if (typeof ctx.globalOptions.pageID !== 'undefined') {
23
+ form["source"] = "PagesManagerMessagesInterface";
24
+ form["request_user_id"] = ctx.globalOptions.pageID;
25
+ form["ids[" + threadID + "]"] = read;
26
+ form["watermarkTimestamp"] = new Date().getTime();
27
+ form["shouldSendReadReceipt"] = true;
28
+ form["commerce_last_message_type"] = "";
29
+ //form["titanOriginatedThreadId"] = utils.generateThreadingID(ctx.clientID);
30
+
31
+ let resData;
32
+ try {
33
+ resData = await (
34
+ defaultFuncs
35
+ .post(
36
+ "https://www.facebook.com/ajax/mercury/change_read_status.php",
37
+ ctx.jar,
38
+ form
39
+ )
40
+ .then(utils.saveCookies(ctx.jar))
41
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
42
+ );
43
+ } catch (e) {
44
+ callback(e);
45
+ return e;
46
+ }
47
+
48
+ if (resData.error) {
49
+ let err = resData.error;
50
+ log.error("markAsRead", err);
51
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
52
+ ctx.loggedIn = false;
53
+ }
54
+ callback(err);
55
+ return err;
56
+ }
57
+
58
+ callback();
59
+ return null;
60
+ } else {
61
+ try {
62
+ if (ctx.mqttClient) {
63
+ let err = await new Promise(r => ctx.mqttClient.publish("/mark_thread", JSON.stringify({
64
+ threadID,
65
+ mark: "read",
66
+ state: read
67
+ }), { qos: 1, retain: false }, r));
68
+ if (err) throw err;
69
+ } else {
70
+ throw {
71
+ error: "You can only use this function after you start listening."
72
+ };
73
+ }
74
+ } catch (e) {
75
+ callback(e);
76
+ return e;
77
+ }
78
+ }
79
+ };
80
+ };
@@ -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 markAsReadAll(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
- callback = function() {};
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 = {
@@ -32,5 +44,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
32
44
  log.error("markAsReadAll", err);
33
45
  return callback(err);
34
46
  });
47
+
48
+ return returnPromise;
35
49
  };
36
50
  };
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
5
+
6
+ module.exports = function (defaultFuncs, api, ctx) {
7
+ return function markAsRead(seen_timestamp, callback) {
8
+ if (utils.getType(seen_timestamp) == "Function" ||
9
+ utils.getType(seen_timestamp) == "AsyncFunction") {
10
+ callback = seen_timestamp;
11
+ seen_timestamp = Date.now();
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
+ seen_timestamp: seen_timestamp
32
+ };
33
+
34
+ defaultFuncs
35
+ .post(
36
+ "https://www.facebook.com/ajax/mercury/mark_seen.php",
37
+ ctx.jar,
38
+ form
39
+ )
40
+ .then(utils.saveCookies(ctx.jar))
41
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
42
+ .then(function (resData) {
43
+ if (resData.error) {
44
+ throw resData;
45
+ }
46
+
47
+ return callback();
48
+ })
49
+ .catch(function (err) {
50
+ log.error("markAsSeen", err);
51
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
52
+ ctx.loggedIn = false;
53
+ }
54
+ return callback(err);
55
+ });
56
+
57
+ return returnPromise;
58
+ };
59
+ };
@@ -3,11 +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
  // muteSecond: -1=permanent mute, 0=unmute, 60=one minute, 3600=one hour, etc.
8
8
  return function muteThread(threadID, muteSeconds, callback) {
9
+ var resolveFunc = function(){};
10
+ var rejectFunc = function(){};
11
+ var returnPromise = new Promise(function (resolve, reject) {
12
+ resolveFunc = resolve;
13
+ rejectFunc = reject;
14
+ });
15
+
9
16
  if (!callback) {
10
- callback = function() {};
17
+ callback = function (err, friendList) {
18
+ if (err) {
19
+ return rejectFunc(err);
20
+ }
21
+ resolveFunc(friendList);
22
+ };
11
23
  }
12
24
 
13
25
  var form = {
@@ -34,5 +46,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
34
46
  log.error("muteThread", err);
35
47
  return callback(err);
36
48
  });
49
+
50
+ return returnPromise;
37
51
  };
38
52
  };
@@ -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 removeUserFromGroup(userID, threadID, callback) {
8
8
  if (
9
9
  !callback &&
@@ -35,8 +35,20 @@ module.exports = function(defaultFuncs, bot, ctx) {
35
35
  };
36
36
  }
37
37
 
38
+ var resolveFunc = function(){};
39
+ var rejectFunc = function(){};
40
+ var returnPromise = new Promise(function (resolve, reject) {
41
+ resolveFunc = resolve;
42
+ rejectFunc = reject;
43
+ });
44
+
38
45
  if (!callback) {
39
- callback = function() {};
46
+ callback = function (err, friendList) {
47
+ if (err) {
48
+ return rejectFunc(err);
49
+ }
50
+ resolveFunc(friendList);
51
+ };
40
52
  }
41
53
 
42
54
  var form = {
@@ -61,5 +73,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
61
73
  log.error("removeUserFromGroup", err);
62
74
  return callback(err);
63
75
  });
76
+
77
+ return returnPromise;
64
78
  };
65
79
  };
@@ -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 resolvePhotoUrl(photoID, 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: "resolvePhotoUrl: 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
  defaultFuncs
@@ -27,5 +39,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
27
39
  log.error("resolvePhotoUrl", err);
28
40
  return callback(err);
29
41
  });
42
+
43
+ return returnPromise;
30
44
  };
31
45
  };
@@ -2,10 +2,22 @@
2
2
 
3
3
  var utils = require("../utils");
4
4
 
5
- module.exports = function(defaultFuncs, bot, ctx) {
5
+ module.exports = function(defaultFuncs, api, ctx) {
6
6
  return function searchForThread(name, callback) {
7
+ var resolveFunc = function(){};
8
+ var rejectFunc = function(){};
9
+ var returnPromise = new Promise(function (resolve, reject) {
10
+ resolveFunc = resolve;
11
+ rejectFunc = reject;
12
+ });
13
+
7
14
  if (!callback) {
8
- throw { error: "searchForThread: need callback" };
15
+ callback = function (err, friendList) {
16
+ if (err) {
17
+ return rejectFunc(err);
18
+ }
19
+ resolveFunc(friendList);
20
+ };
9
21
  }
10
22
 
11
23
  var tmpForm = {
@@ -35,5 +47,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
35
47
  resData.payload.mercury_payload.threads.map(utils.formatThread)
36
48
  );
37
49
  });
50
+
51
+ return returnPromise;
38
52
  };
39
53
  };
@@ -11,10 +11,11 @@ var allowedProperties = {
11
11
  emoji: true,
12
12
  emojiSize: true,
13
13
  body: true,
14
- mentions: true
14
+ mentions: true,
15
+ location: true,
15
16
  };
16
17
 
17
- module.exports = function(defaultFuncs, bot, ctx) {
18
+ module.exports = function (defaultFuncs, api, ctx) {
18
19
  function uploadAttachment(attachments, callback) {
19
20
  var uploads = [];
20
21
 
@@ -43,7 +44,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
43
44
  {}
44
45
  )
45
46
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
46
- .then(function(resData) {
47
+ .then(function (resData) {
47
48
  if (resData.error) {
48
49
  throw resData;
49
50
  }
@@ -58,10 +59,10 @@ module.exports = function(defaultFuncs, bot, ctx) {
58
59
  // resolve all promises
59
60
  bluebird
60
61
  .all(uploads)
61
- .then(function(resData) {
62
+ .then(function (resData) {
62
63
  callback(null, resData);
63
64
  })
64
- .catch(function(err) {
65
+ .catch(function (err) {
65
66
  log.error("uploadAttachment", err);
66
67
  return callback(err);
67
68
  });
@@ -81,7 +82,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
81
82
  form
82
83
  )
83
84
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
84
- .then(function(resData) {
85
+ .then(function (resData) {
85
86
  if (resData.error) {
86
87
  return callback(resData);
87
88
  }
@@ -92,7 +93,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
92
93
 
93
94
  callback(null, resData.payload.share_data.share_params);
94
95
  })
95
- .catch(function(err) {
96
+ .catch(function (err) {
96
97
  log.error("getUrl", err);
97
98
  return callback(err);
98
99
  });
@@ -138,7 +139,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
138
139
  defaultFuncs
139
140
  .post("https://www.facebook.com/messaging/send/", ctx.jar, form)
140
141
  .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
141
- .then(function(resData) {
142
+ .then(function (resData) {
142
143
  if (!resData) {
143
144
  return callback({ error: "Send message failed." });
144
145
  }
@@ -148,13 +149,13 @@ module.exports = function(defaultFuncs, bot, ctx) {
148
149
  log.warn(
149
150
  "sendMessage",
150
151
  "Got error 1545012. This might mean that you're not part of the conversation " +
151
- threadID
152
+ threadID
152
153
  );
153
154
  }
154
155
  return callback(resData);
155
156
  }
156
157
 
157
- var messageInfo = resData.payload.actions.reduce(function(p, v) {
158
+ var messageInfo = resData.payload.actions.reduce(function (p, v) {
158
159
  return (
159
160
  {
160
161
  threadID: v.thread_fbid,
@@ -166,33 +167,45 @@ module.exports = function(defaultFuncs, bot, ctx) {
166
167
 
167
168
  return callback(null, messageInfo);
168
169
  })
169
- .catch(function(err) {
170
+ .catch(function (err) {
170
171
  log.error("sendMessage", err);
172
+ if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
173
+ ctx.loggedIn = false;
174
+ }
171
175
  return callback(err);
172
176
  });
173
177
  }
174
178
 
175
- function send(form, threadID, messageAndOTID, callback) {
179
+ function send(form, threadID, messageAndOTID, callback, isGroup) {
176
180
  // We're doing a query to this to check if the given id is the id of
177
181
  // a user or of a group chat. The form will be different depending
178
182
  // on that.
179
183
  if (utils.getType(threadID) === "Array") {
180
184
  sendContent(form, threadID, false, messageAndOTID, callback);
181
185
  } else {
182
- sendContent(
183
- form,
184
- threadID,
185
- threadID.length === 15,
186
- messageAndOTID,
187
- callback
188
- );
186
+ if (utils.getType(isGroup) != "Boolean") {
187
+ api.getUserInfo(threadID, function (err, res) {
188
+ if (err) {
189
+ return callback(err);
190
+ }
191
+ sendContent(
192
+ form,
193
+ threadID,
194
+ Object.keys(res).length > 0,
195
+ messageAndOTID,
196
+ callback
197
+ );
198
+ });
199
+ } else {
200
+ sendContent(form, threadID, !isGroup, messageAndOTID, callback);
201
+ }
189
202
  }
190
203
  }
191
204
 
192
205
  function handleUrl(msg, form, callback, cb) {
193
206
  if (msg.url) {
194
207
  form["shareable_attachment[share_type]"] = "100";
195
- getUrl(msg.url, function(err, params) {
208
+ getUrl(msg.url, function (err, params) {
196
209
  if (err) {
197
210
  return callback(err);
198
211
  }
@@ -205,6 +218,20 @@ module.exports = function(defaultFuncs, bot, ctx) {
205
218
  }
206
219
  }
207
220
 
221
+ function handleLocation(msg, form, callback, cb) {
222
+ if (msg.location) {
223
+ if (msg.location.latitude == null || msg.location.longitude == null) {
224
+ return callback({ error: "location property needs both latitude and longitude" });
225
+ }
226
+
227
+ form["location_attachment[coordinates][latitude]"] = msg.location.latitude;
228
+ form["location_attachment[coordinates][longitude]"] = msg.location.longitude;
229
+ form["location_attachment[is_current_location]"] = !!msg.location.current;
230
+ }
231
+
232
+ cb();
233
+ }
234
+
208
235
  function handleSticker(msg, form, callback, cb) {
209
236
  if (msg.sticker) {
210
237
  form["sticker_id"] = msg.sticker;
@@ -248,12 +275,12 @@ module.exports = function(defaultFuncs, bot, ctx) {
248
275
  msg.attachment = [msg.attachment];
249
276
  }
250
277
 
251
- uploadAttachment(msg.attachment, function(err, files) {
278
+ uploadAttachment(msg.attachment, function (err, files) {
252
279
  if (err) {
253
280
  return callback(err);
254
281
  }
255
282
 
256
- files.forEach(function(file) {
283
+ files.forEach(function (file) {
257
284
  var key = Object.keys(file);
258
285
  var type = key[0]; // image_id, file_id, etc
259
286
  form["" + type + "s"].push(file[type]); // push the id
@@ -298,24 +325,37 @@ module.exports = function(defaultFuncs, bot, ctx) {
298
325
  cb();
299
326
  }
300
327
 
301
- return function sendMessage(msg, threadID, callback, replyToMessage) {
328
+ return function sendMessage(msg, threadID, callback, replyToMessage, isGroup) {
329
+ typeof isGroup == "undefined" ? isGroup = null : "";
302
330
  if (
303
331
  !callback &&
304
332
  (utils.getType(threadID) === "Function" ||
305
333
  utils.getType(threadID) === "AsyncFunction")
306
334
  ) {
307
- return callback({ error: "Pass a threadID as a second argument." });
335
+ return threadID({ error: "Pass a threadID as a second argument." });
308
336
  }
309
337
  if (
310
338
  !replyToMessage &&
311
339
  utils.getType(callback) === "String"
312
340
  ) {
313
341
  replyToMessage = callback;
314
- callback = function() {};
342
+ callback = function () { };
315
343
  }
316
-
344
+
345
+ var resolveFunc = function(){};
346
+ var rejectFunc = function(){};
347
+ var returnPromise = new Promise(function (resolve, reject) {
348
+ resolveFunc = resolve;
349
+ rejectFunc = reject;
350
+ });
351
+
317
352
  if (!callback) {
318
- callback = function() {};
353
+ callback = function (err, friendList) {
354
+ if (err) {
355
+ return rejectFunc(err);
356
+ }
357
+ resolveFunc(friendList);
358
+ };
319
359
  }
320
360
 
321
361
  var msgType = utils.getType(msg);
@@ -342,7 +382,7 @@ module.exports = function(defaultFuncs, bot, ctx) {
342
382
  "."
343
383
  });
344
384
  }
345
-
385
+
346
386
  if (replyToMessage && messageIDType !== 'String') {
347
387
  return callback({
348
388
  error:
@@ -400,16 +440,20 @@ module.exports = function(defaultFuncs, bot, ctx) {
400
440
  replied_to_message_id: replyToMessage
401
441
  };
402
442
 
403
- handleSticker(msg, form, callback, () =>
404
- handleAttachment(msg, form, callback, () =>
405
- handleUrl(msg, form, callback, () =>
406
- handleEmoji(msg, form, callback, () =>
407
- handleMention(msg, form, callback, () =>
408
- send(form, threadID, messageAndOTID, callback)
443
+ handleLocation(msg, form, callback, () =>
444
+ handleSticker(msg, form, callback, () =>
445
+ handleAttachment(msg, form, callback, () =>
446
+ handleUrl(msg, form, callback, () =>
447
+ handleEmoji(msg, form, callback, () =>
448
+ handleMention(msg, form, callback, () =>
449
+ send(form, threadID, messageAndOTID, callback, isGroup)
450
+ )
409
451
  )
410
452
  )
411
453
  )
412
454
  )
413
455
  );
456
+
457
+ return returnPromise;
414
458
  };
415
459
  };