bb-fca 2.0.0

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 (253) hide show
  1. package/LICENSE-MIT +21 -0
  2. package/README.md +0 -0
  3. package/dist/core/client.js +50 -0
  4. package/dist/core/client.js.map +1 -0
  5. package/dist/core/models/buildAPI.js +103 -0
  6. package/dist/core/models/buildAPI.js.map +1 -0
  7. package/dist/core/models/loginHelper.js +209 -0
  8. package/dist/core/models/loginHelper.js.map +1 -0
  9. package/dist/core/models/setOptions.js +47 -0
  10. package/dist/core/models/setOptions.js.map +1 -0
  11. package/dist/deltas/apis/create.js +30 -0
  12. package/dist/deltas/apis/create.js.map +1 -0
  13. package/dist/deltas/apis/extra/addExternalModule.js +23 -0
  14. package/dist/deltas/apis/extra/addExternalModule.js.map +1 -0
  15. package/dist/deltas/apis/extra/getAccess.js +110 -0
  16. package/dist/deltas/apis/extra/getAccess.js.map +1 -0
  17. package/dist/deltas/apis/http/httpGet.js +57 -0
  18. package/dist/deltas/apis/http/httpGet.js.map +1 -0
  19. package/dist/deltas/apis/http/httpPost.js +57 -0
  20. package/dist/deltas/apis/http/httpPost.js.map +1 -0
  21. package/dist/deltas/apis/http/httpPostFormData.js +61 -0
  22. package/dist/deltas/apis/http/httpPostFormData.js.map +1 -0
  23. package/dist/deltas/apis/login/GetBotInfo.js +83 -0
  24. package/dist/deltas/apis/login/GetBotInfo.js.map +1 -0
  25. package/dist/deltas/apis/login/getBotInitialData.js +46 -0
  26. package/dist/deltas/apis/login/getBotInitialData.js.map +1 -0
  27. package/dist/deltas/apis/login/logout.js +54 -0
  28. package/dist/deltas/apis/login/logout.js.map +1 -0
  29. package/dist/deltas/apis/messaging/editMessage.js +64 -0
  30. package/dist/deltas/apis/messaging/editMessage.js.map +1 -0
  31. package/dist/deltas/apis/messaging/emoji.js +120 -0
  32. package/dist/deltas/apis/messaging/emoji.js.map +1 -0
  33. package/dist/deltas/apis/messaging/gcmember.js +164 -0
  34. package/dist/deltas/apis/messaging/gcmember.js.map +1 -0
  35. package/dist/deltas/apis/messaging/gcname.js +119 -0
  36. package/dist/deltas/apis/messaging/gcname.js.map +1 -0
  37. package/dist/deltas/apis/messaging/gcrule.js +144 -0
  38. package/dist/deltas/apis/messaging/gcrule.js.map +1 -0
  39. package/dist/deltas/apis/messaging/markAsDelivered.js +44 -0
  40. package/dist/deltas/apis/messaging/markAsDelivered.js.map +1 -0
  41. package/dist/deltas/apis/messaging/markAsRead.js +84 -0
  42. package/dist/deltas/apis/messaging/markAsRead.js.map +1 -0
  43. package/dist/deltas/apis/messaging/markAsReadAll.js +34 -0
  44. package/dist/deltas/apis/messaging/markAsReadAll.js.map +1 -0
  45. package/dist/deltas/apis/messaging/markAsSeen.js +64 -0
  46. package/dist/deltas/apis/messaging/markAsSeen.js.map +1 -0
  47. package/dist/deltas/apis/messaging/nickname.js +129 -0
  48. package/dist/deltas/apis/messaging/nickname.js.map +1 -0
  49. package/dist/deltas/apis/messaging/notes.js +156 -0
  50. package/dist/deltas/apis/messaging/notes.js.map +1 -0
  51. package/dist/deltas/apis/messaging/resolvePhotoUrl.js +55 -0
  52. package/dist/deltas/apis/messaging/resolvePhotoUrl.js.map +1 -0
  53. package/dist/deltas/apis/messaging/sendMessage.js +239 -0
  54. package/dist/deltas/apis/messaging/sendMessage.js.map +1 -0
  55. package/dist/deltas/apis/messaging/sendTypingIndicator.js +41 -0
  56. package/dist/deltas/apis/messaging/sendTypingIndicator.js.map +1 -0
  57. package/dist/deltas/apis/messaging/setMessageReaction.js +30 -0
  58. package/dist/deltas/apis/messaging/setMessageReaction.js.map +1 -0
  59. package/dist/deltas/apis/messaging/shareContact.js +59 -0
  60. package/dist/deltas/apis/messaging/shareContact.js.map +1 -0
  61. package/dist/deltas/apis/messaging/stickers.js +246 -0
  62. package/dist/deltas/apis/messaging/stickers.js.map +1 -0
  63. package/dist/deltas/apis/messaging/theme.js +227 -0
  64. package/dist/deltas/apis/messaging/theme.js.map +1 -0
  65. package/dist/deltas/apis/messaging/unsendMessage.js +19 -0
  66. package/dist/deltas/apis/messaging/unsendMessage.js.map +1 -0
  67. package/dist/deltas/apis/mqtt/deltas/value.js +193 -0
  68. package/dist/deltas/apis/mqtt/deltas/value.js.map +1 -0
  69. package/dist/deltas/apis/mqtt/listenMqtt.js +306 -0
  70. package/dist/deltas/apis/mqtt/listenMqtt.js.map +1 -0
  71. package/dist/deltas/apis/mqtt/listenSpeed.js +166 -0
  72. package/dist/deltas/apis/mqtt/listenSpeed.js.map +1 -0
  73. package/dist/deltas/apis/mqtt/pinMessage.js +166 -0
  74. package/dist/deltas/apis/mqtt/pinMessage.js.map +1 -0
  75. package/dist/deltas/apis/mqtt/realtime.js +160 -0
  76. package/dist/deltas/apis/mqtt/realtime.js.map +1 -0
  77. package/dist/deltas/apis/mqtt/sendMessageMqtt.js +184 -0
  78. package/dist/deltas/apis/mqtt/sendMessageMqtt.js.map +1 -0
  79. package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js +57 -0
  80. package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js.map +1 -0
  81. package/dist/deltas/apis/posting/comment.js +195 -0
  82. package/dist/deltas/apis/posting/comment.js.map +1 -0
  83. package/dist/deltas/apis/posting/follow.js +82 -0
  84. package/dist/deltas/apis/posting/follow.js.map +1 -0
  85. package/dist/deltas/apis/posting/friend.js +253 -0
  86. package/dist/deltas/apis/posting/friend.js.map +1 -0
  87. package/dist/deltas/apis/posting/post.js +551 -0
  88. package/dist/deltas/apis/posting/post.js.map +1 -0
  89. package/dist/deltas/apis/posting/share.js +59 -0
  90. package/dist/deltas/apis/posting/share.js.map +1 -0
  91. package/dist/deltas/apis/posting/story.js +176 -0
  92. package/dist/deltas/apis/posting/story.js.map +1 -0
  93. package/dist/deltas/apis/threads/getThreadHistory.js +233 -0
  94. package/dist/deltas/apis/threads/getThreadHistory.js.map +1 -0
  95. package/dist/deltas/apis/threads/getThreadInfo.js +197 -0
  96. package/dist/deltas/apis/threads/getThreadInfo.js.map +1 -0
  97. package/dist/deltas/apis/threads/getThreadList.js +201 -0
  98. package/dist/deltas/apis/threads/getThreadList.js.map +1 -0
  99. package/dist/deltas/apis/users/getUserInfo.js +254 -0
  100. package/dist/deltas/apis/users/getUserInfo.js.map +1 -0
  101. package/dist/index.d.ts +696 -0
  102. package/dist/types/core/client.d.ts +2 -0
  103. package/dist/types/core/models/buildAPI.d.ts +13 -0
  104. package/dist/types/core/models/loginHelper.d.ts +15 -0
  105. package/dist/types/core/models/setOptions.d.ts +2 -0
  106. package/dist/types/deltas/apis/create.d.ts +23 -0
  107. package/dist/types/deltas/apis/extra/addExternalModule.d.ts +1 -0
  108. package/dist/types/deltas/apis/extra/getAccess.d.ts +1 -0
  109. package/dist/types/deltas/apis/http/httpGet.d.ts +1 -0
  110. package/dist/types/deltas/apis/http/httpPost.d.ts +1 -0
  111. package/dist/types/deltas/apis/http/httpPostFormData.d.ts +1 -0
  112. package/dist/types/deltas/apis/login/GetBotInfo.d.ts +32 -0
  113. package/dist/types/deltas/apis/login/getBotInitialData.d.ts +1 -0
  114. package/dist/types/deltas/apis/login/logout.d.ts +7 -0
  115. package/dist/types/deltas/apis/messaging/editMessage.d.ts +7 -0
  116. package/dist/types/deltas/apis/messaging/emoji.d.ts +1 -0
  117. package/dist/types/deltas/apis/messaging/gcmember.d.ts +1 -0
  118. package/dist/types/deltas/apis/messaging/gcname.d.ts +1 -0
  119. package/dist/types/deltas/apis/messaging/gcrule.d.ts +1 -0
  120. package/dist/types/deltas/apis/messaging/markAsDelivered.d.ts +7 -0
  121. package/dist/types/deltas/apis/messaging/markAsRead.d.ts +6 -0
  122. package/dist/types/deltas/apis/messaging/markAsReadAll.d.ts +7 -0
  123. package/dist/types/deltas/apis/messaging/markAsSeen.d.ts +6 -0
  124. package/dist/types/deltas/apis/messaging/nickname.d.ts +1 -0
  125. package/dist/types/deltas/apis/messaging/notes.d.ts +14 -0
  126. package/dist/types/deltas/apis/messaging/resolvePhotoUrl.d.ts +9 -0
  127. package/dist/types/deltas/apis/messaging/sendMessage.d.ts +1 -0
  128. package/dist/types/deltas/apis/messaging/sendTypingIndicator.d.ts +6 -0
  129. package/dist/types/deltas/apis/messaging/setMessageReaction.d.ts +1 -0
  130. package/dist/types/deltas/apis/messaging/shareContact.d.ts +8 -0
  131. package/dist/types/deltas/apis/messaging/stickers.d.ts +48 -0
  132. package/dist/types/deltas/apis/messaging/theme.d.ts +1 -0
  133. package/dist/types/deltas/apis/messaging/unsendMessage.d.ts +1 -0
  134. package/dist/types/deltas/apis/mqtt/deltas/value.d.ts +2 -0
  135. package/dist/types/deltas/apis/mqtt/listenMqtt.d.ts +20 -0
  136. package/dist/types/deltas/apis/mqtt/listenSpeed.d.ts +21 -0
  137. package/dist/types/deltas/apis/mqtt/pinMessage.d.ts +1 -0
  138. package/dist/types/deltas/apis/mqtt/realtime.d.ts +1 -0
  139. package/dist/types/deltas/apis/mqtt/sendMessageMqtt.d.ts +1 -0
  140. package/dist/types/deltas/apis/mqtt/setMessageReactionMqtt.d.ts +1 -0
  141. package/dist/types/deltas/apis/posting/comment.d.ts +9 -0
  142. package/dist/types/deltas/apis/posting/follow.d.ts +14 -0
  143. package/dist/types/deltas/apis/posting/friend.d.ts +61 -0
  144. package/dist/types/deltas/apis/posting/post.d.ts +20 -0
  145. package/dist/types/deltas/apis/posting/share.d.ts +1 -0
  146. package/dist/types/deltas/apis/posting/story.d.ts +39 -0
  147. package/dist/types/deltas/apis/threads/getThreadHistory.d.ts +7 -0
  148. package/dist/types/deltas/apis/threads/getThreadInfo.d.ts +7 -0
  149. package/dist/types/deltas/apis/threads/getThreadList.d.ts +7 -0
  150. package/dist/types/deltas/apis/users/getUserInfo.d.ts +1 -0
  151. package/dist/types/utils/axios.d.ts +7 -0
  152. package/dist/types/utils/clients.d.ts +4 -0
  153. package/dist/types/utils/constants.d.ts +24 -0
  154. package/dist/types/utils/formatters/data/formatAttachment.d.ts +2 -0
  155. package/dist/types/utils/formatters/data/formatDelta.d.ts +4 -0
  156. package/dist/types/utils/formatters/index.d.ts +17 -0
  157. package/dist/types/utils/formatters/value/formatCookie.d.ts +8 -0
  158. package/dist/types/utils/formatters/value/formatDate.d.ts +6 -0
  159. package/dist/types/utils/formatters/value/formatID.d.ts +7 -0
  160. package/dist/types/utils/headers.d.ts +2 -0
  161. package/dist/types/utils/index.d.ts +75 -0
  162. package/dist/types/utils/user-agents.d.ts +9 -0
  163. package/dist/utils/axios.js +148 -0
  164. package/dist/utils/axios.js.map +1 -0
  165. package/dist/utils/clients.js +120 -0
  166. package/dist/utils/clients.js.map +1 -0
  167. package/dist/utils/constants.js +249 -0
  168. package/dist/utils/constants.js.map +1 -0
  169. package/dist/utils/formatters/data/formatAttachment.js +61 -0
  170. package/dist/utils/formatters/data/formatAttachment.js.map +1 -0
  171. package/dist/utils/formatters/data/formatDelta.js +67 -0
  172. package/dist/utils/formatters/data/formatDelta.js.map +1 -0
  173. package/dist/utils/formatters/index.js +132 -0
  174. package/dist/utils/formatters/index.js.map +1 -0
  175. package/dist/utils/formatters/value/formatCookie.js +13 -0
  176. package/dist/utils/formatters/value/formatCookie.js.map +1 -0
  177. package/dist/utils/formatters/value/formatDate.js +33 -0
  178. package/dist/utils/formatters/value/formatDate.js.map +1 -0
  179. package/dist/utils/formatters/value/formatID.js +17 -0
  180. package/dist/utils/formatters/value/formatID.js.map +1 -0
  181. package/dist/utils/headers.js +61 -0
  182. package/dist/utils/headers.js.map +1 -0
  183. package/dist/utils/index.js +105 -0
  184. package/dist/utils/index.js.map +1 -0
  185. package/dist/utils/user-agents.js +41 -0
  186. package/dist/utils/user-agents.js.map +1 -0
  187. package/examples/post.example.js +149 -0
  188. package/module/index.js +5 -0
  189. package/package.json +56 -0
  190. package/src/core/client.ts +66 -0
  191. package/src/core/models/buildAPI.ts +131 -0
  192. package/src/core/models/loginHelper.ts +226 -0
  193. package/src/core/models/setOptions.ts +48 -0
  194. package/src/deltas/apis/create.ts +28 -0
  195. package/src/deltas/apis/extra/addExternalModule.ts +23 -0
  196. package/src/deltas/apis/extra/getAccess.ts +141 -0
  197. package/src/deltas/apis/http/httpGet.ts +61 -0
  198. package/src/deltas/apis/http/httpPost.ts +61 -0
  199. package/src/deltas/apis/http/httpPostFormData.ts +67 -0
  200. package/src/deltas/apis/login/GetBotInfo.ts +88 -0
  201. package/src/deltas/apis/login/getBotInitialData.ts +42 -0
  202. package/src/deltas/apis/login/logout.ts +62 -0
  203. package/src/deltas/apis/messaging/editMessage.ts +69 -0
  204. package/src/deltas/apis/messaging/emoji.ts +135 -0
  205. package/src/deltas/apis/messaging/gcmember.ts +175 -0
  206. package/src/deltas/apis/messaging/gcname.ts +136 -0
  207. package/src/deltas/apis/messaging/gcrule.ts +152 -0
  208. package/src/deltas/apis/messaging/markAsDelivered.ts +47 -0
  209. package/src/deltas/apis/messaging/markAsRead.ts +94 -0
  210. package/src/deltas/apis/messaging/markAsReadAll.ts +38 -0
  211. package/src/deltas/apis/messaging/markAsSeen.ts +69 -0
  212. package/src/deltas/apis/messaging/nickname.ts +153 -0
  213. package/src/deltas/apis/messaging/notes.ts +165 -0
  214. package/src/deltas/apis/messaging/resolvePhotoUrl.ts +56 -0
  215. package/src/deltas/apis/messaging/sendMessage.ts +286 -0
  216. package/src/deltas/apis/messaging/sendTypingIndicator.ts +48 -0
  217. package/src/deltas/apis/messaging/setMessageReaction.ts +25 -0
  218. package/src/deltas/apis/messaging/shareContact.ts +63 -0
  219. package/src/deltas/apis/messaging/stickers.ts +255 -0
  220. package/src/deltas/apis/messaging/theme.ts +280 -0
  221. package/src/deltas/apis/messaging/unsendMessage.ts +15 -0
  222. package/src/deltas/apis/mqtt/deltas/value.ts +224 -0
  223. package/src/deltas/apis/mqtt/listenMqtt.ts +332 -0
  224. package/src/deltas/apis/mqtt/listenSpeed.ts +179 -0
  225. package/src/deltas/apis/mqtt/pinMessage.ts +135 -0
  226. package/src/deltas/apis/mqtt/realtime.ts +169 -0
  227. package/src/deltas/apis/mqtt/sendMessageMqtt.ts +206 -0
  228. package/src/deltas/apis/mqtt/setMessageReactionMqtt.ts +61 -0
  229. package/src/deltas/apis/posting/comment.ts +205 -0
  230. package/src/deltas/apis/posting/follow.ts +79 -0
  231. package/src/deltas/apis/posting/friend.ts +241 -0
  232. package/src/deltas/apis/posting/post.ts +599 -0
  233. package/src/deltas/apis/posting/share.ts +60 -0
  234. package/src/deltas/apis/posting/story.ts +207 -0
  235. package/src/deltas/apis/threads/getThreadHistory.ts +237 -0
  236. package/src/deltas/apis/threads/getThreadInfo.ts +210 -0
  237. package/src/deltas/apis/threads/getThreadList.ts +224 -0
  238. package/src/deltas/apis/users/getUserInfo.ts +244 -0
  239. package/src/types/index.d.ts +696 -0
  240. package/src/utils/axios.ts +178 -0
  241. package/src/utils/clients.ts +125 -0
  242. package/src/utils/constants.ts +281 -0
  243. package/src/utils/formatters/data/formatAttachment.ts +58 -0
  244. package/src/utils/formatters/data/formatDelta.ts +45 -0
  245. package/src/utils/formatters/index.ts +82 -0
  246. package/src/utils/formatters/value/formatCookie.ts +13 -0
  247. package/src/utils/formatters/value/formatDate.ts +34 -0
  248. package/src/utils/formatters/value/formatID.ts +14 -0
  249. package/src/utils/formatters.old.ts +1049 -0
  250. package/src/utils/headers.ts +65 -0
  251. package/src/utils/index.ts +65 -0
  252. package/src/utils/user-agents.ts +49 -0
  253. package/tsconfig.json +37 -0
@@ -0,0 +1,135 @@
1
+ import utils = require('../../../utils');
2
+
3
+ export default function(defaultFuncs: any, api: any, ctx: any) {
4
+ /**
5
+ * Made by Choru Official
6
+ * Mqtt
7
+ * Sets the custom emoji for a specific Facebook thread via MQTT.
8
+ *
9
+ * @param {string} emoji The emoji character to set as the custom emoji (e.g., "👍", "❤️").
10
+ * @param {string} threadID The ID of the thread where the emoji will be set.
11
+ * @param {Function} [callback] Optional callback function to be invoked upon completion.
12
+ * @param {string} [initiatorID] The ID of the user who initiated the emoji change (e.g., from event.senderID).
13
+ * @returns {Promise<object>} A promise that resolves with a structured event object on success or rejects on error.
14
+ */
15
+ return function emoji(emoji, threadID, callback, initiatorID) {
16
+ let _callback;
17
+ let _initiatorID;
18
+
19
+ let _resolvePromise;
20
+ let _rejectPromise;
21
+ const returnPromise = new Promise<any>((resolve, reject) => {
22
+ _resolvePromise = resolve;
23
+ _rejectPromise = reject;
24
+ });
25
+
26
+ if (
27
+ utils.getType(callback) === 'Function' ||
28
+ utils.getType(callback) === 'AsyncFunction'
29
+ ) {
30
+ _callback = callback;
31
+ _initiatorID = initiatorID;
32
+ } else if (
33
+ utils.getType(threadID) === 'Function' ||
34
+ utils.getType(threadID) === 'AsyncFunction'
35
+ ) {
36
+ _callback = threadID;
37
+ threadID = null;
38
+ _initiatorID = callback;
39
+ } else if (utils.getType(callback) === 'string') {
40
+ _initiatorID = callback;
41
+ _callback = undefined;
42
+ } else {
43
+ _callback = undefined;
44
+ _initiatorID = undefined;
45
+ }
46
+
47
+ if (!_callback) {
48
+ _callback = function(__err, __data) {
49
+ if (__err) _rejectPromise(__err);
50
+ else _resolvePromise(__data);
51
+ };
52
+ } else {
53
+ const originalCallback = _callback;
54
+ _callback = function(__err, __data) {
55
+ if (__err) {
56
+ originalCallback(__err);
57
+ _rejectPromise(__err);
58
+ } else {
59
+ originalCallback(null, __data);
60
+ _resolvePromise(__data);
61
+ }
62
+ };
63
+ }
64
+
65
+ _initiatorID = _initiatorID || ctx.userID;
66
+
67
+ threadID = threadID || ctx.threadID;
68
+
69
+ if (!threadID) {
70
+ return _callback(new Error('threadID is required to set an emoji.'));
71
+ }
72
+ if (!emoji) {
73
+ return _callback(new Error('An emoji character is required.'));
74
+ }
75
+
76
+ if (!ctx.mqttClient) {
77
+ return _callback(new Error('Not connected to MQTT'));
78
+ }
79
+
80
+ ctx.wsReqNumber += 1;
81
+ ctx.wsTaskNumber += 1;
82
+
83
+ const queryPayload = {
84
+ thread_key: threadID.toString(),
85
+ custom_emoji: emoji,
86
+ avatar_sticker_instruction_key_id: null,
87
+ sync_group: 1,
88
+ };
89
+
90
+ const query = {
91
+ failure_count: null,
92
+ label: '100003',
93
+ payload: JSON.stringify(queryPayload),
94
+ queue_name: 'thread_quick_reaction',
95
+ task_id: ctx.wsTaskNumber,
96
+ };
97
+
98
+ const context: any = {
99
+ app_id: ctx.appID,
100
+ payload: {
101
+ epoch_id: parseInt(utils.generateOfflineThreadingID()),
102
+ tasks: [query],
103
+ version_id: '24631415369801570',
104
+ },
105
+ request_id: ctx.wsReqNumber,
106
+ type: 3,
107
+ };
108
+ context.payload = JSON.stringify(context.payload);
109
+
110
+ ctx.mqttClient.publish(
111
+ '/ls_req',
112
+ JSON.stringify(context),
113
+ { qos: 1, retain: false },
114
+ (err) => {
115
+ if (err) {
116
+ return _callback(
117
+ new Error(`MQTT publish failed for emoji: ${err.message || err}`),
118
+ );
119
+ }
120
+
121
+ const emojiChangeEvent = {
122
+ type: 'thread_emoji_update',
123
+ threadID: threadID,
124
+ newEmoji: emoji,
125
+ senderID: _initiatorID,
126
+ BotID: ctx.userID,
127
+ timestamp: Date.now(),
128
+ };
129
+ _callback(null, emojiChangeEvent);
130
+ },
131
+ );
132
+
133
+ return returnPromise;
134
+ };
135
+ }
@@ -0,0 +1,175 @@
1
+ import utils = require('../../../utils');
2
+
3
+ export default function(defaultFuncs: any, api: any, ctx: any) {
4
+ /**
5
+ * Made by ChoruOfficial
6
+ * Mqtt
7
+ * Adds or removes members from a group chat with pre-checking.
8
+ *
9
+ * @param {"add" | "remove"} action The action to perform.
10
+ * @param {string|string[]} userIDs The user ID or array of user IDs.
11
+ * @param {string} threadID The ID of the group chat.
12
+ * @param {Function} [callback] Optional callback function.
13
+ * @returns {Promise<object>} A promise that resolves with information about the action.
14
+ */
15
+ return async function gcmember(action, userIDs, threadID, callback) {
16
+ let _callback;
17
+ if (typeof threadID === 'function') {
18
+ _callback = threadID;
19
+ threadID = null;
20
+ } else if (typeof callback === 'function') {
21
+ _callback = callback;
22
+ }
23
+
24
+ let resolvePromise, rejectPromise;
25
+ const returnPromise = new Promise<any>((resolve, reject) => {
26
+ resolvePromise = resolve;
27
+ rejectPromise = reject;
28
+ });
29
+
30
+ if (typeof _callback != 'function') {
31
+ _callback = (err, data) => {
32
+ // Note: We will now rarely use the 'err' parameter for validation errors
33
+ if (err) return rejectPromise(err);
34
+ resolvePromise(data);
35
+ };
36
+ }
37
+
38
+ try {
39
+ const validActions = ['add', 'remove'];
40
+ action = action ? action.toLowerCase() : '';
41
+
42
+ // --- ERROR CHECKS NOW RETURN AN OBJECT INSTEAD OF THROWING ---
43
+ if (!validActions.includes(action)) {
44
+ return _callback(null, {
45
+ type: 'error_gc',
46
+ error: `Invalid action. Must be one of: ${validActions.join(', ')}`,
47
+ });
48
+ }
49
+ if (!userIDs || userIDs.length === 0) {
50
+ return _callback(null, {
51
+ type: 'error_gc',
52
+ error: 'userIDs is required.',
53
+ });
54
+ }
55
+ if (!threadID) {
56
+ return _callback(null, {
57
+ type: 'error_gc',
58
+ error: 'threadID is required.',
59
+ });
60
+ }
61
+ if (!ctx.mqttClient) {
62
+ return _callback(null, {
63
+ type: 'error_gc',
64
+ error: 'Not connected to MQTT',
65
+ });
66
+ }
67
+
68
+ const threadInfo = await api.getThreadInfo(threadID);
69
+ if (!threadInfo) {
70
+ return _callback(null, {
71
+ type: 'error_gc',
72
+ error: 'Could not retrieve thread information.',
73
+ });
74
+ }
75
+ if (threadInfo.isGroup === false) {
76
+ return _callback(null, {
77
+ type: 'error_gc',
78
+ error: 'This feature is only for group chats, not private messages.',
79
+ });
80
+ }
81
+
82
+ const currentMembers = threadInfo.participantIDs;
83
+ const usersToModify = Array.isArray(userIDs) ? userIDs : [userIDs];
84
+ let queryPayload, query;
85
+ let finalUsers = usersToModify;
86
+
87
+ ctx.wsReqNumber = (ctx.wsReqNumber || 0) + 1;
88
+ ctx.wsTaskNumber = (ctx.wsTaskNumber || 0) + 1;
89
+
90
+ if (action === 'add') {
91
+ const usersToAdd = usersToModify.filter(
92
+ (id) => !currentMembers.includes(id),
93
+ );
94
+ if (usersToAdd.length === 0) {
95
+ return _callback(null, {
96
+ type: 'error_gc',
97
+ error: 'All specified users are already in the group.',
98
+ });
99
+ }
100
+ finalUsers = usersToAdd;
101
+ queryPayload = {
102
+ thread_key: parseInt(threadID),
103
+ contact_ids: finalUsers.map((id) => parseInt(id)),
104
+ sync_group: 1,
105
+ };
106
+ query = {
107
+ label: '23',
108
+ payload: JSON.stringify(queryPayload),
109
+ queue_name: threadID,
110
+ task_id: ctx.wsTaskNumber,
111
+ };
112
+ } else {
113
+ // action is 'remove'
114
+ const userToRemove = usersToModify[0];
115
+ if (!currentMembers.includes(userToRemove)) {
116
+ return _callback(null, {
117
+ type: 'error_gc',
118
+ error: `User with ID ${userToRemove} is not in this group chat.`,
119
+ });
120
+ }
121
+ finalUsers = [userToRemove];
122
+ queryPayload = {
123
+ thread_id: threadID,
124
+ contact_id: userToRemove,
125
+ sync_group: 1,
126
+ };
127
+ query = {
128
+ label: '140',
129
+ payload: JSON.stringify(queryPayload),
130
+ queue_name: 'remove_participant_v2',
131
+ task_id: ctx.wsTaskNumber,
132
+ };
133
+ }
134
+
135
+ const context: any = {
136
+ app_id: ctx.appID,
137
+ payload: {
138
+ epoch_id: parseInt(utils.generateOfflineThreadingID()),
139
+ tasks: [query],
140
+ version_id: '24631415369801570',
141
+ },
142
+ request_id: ctx.wsReqNumber,
143
+ type: 3,
144
+ };
145
+ context.payload = JSON.stringify(context.payload);
146
+
147
+ ctx.mqttClient.publish(
148
+ '/ls_req',
149
+ JSON.stringify(context),
150
+ { qos: 1, retain: false },
151
+ (err) => {
152
+ if (err) return _callback(err); // For network errors, we still reject
153
+
154
+ const gcmemberInfo = {
155
+ type: 'gc_member_update',
156
+ threadID: threadID,
157
+ userIDs: finalUsers,
158
+ action: action,
159
+ senderID: ctx.userID,
160
+ BotID: ctx.userID,
161
+ timestamp: Date.now(),
162
+ };
163
+ return _callback(null, gcmemberInfo);
164
+ },
165
+ );
166
+ } catch (err) {
167
+ return _callback(null, {
168
+ type: 'error_gc',
169
+ error: err.message || 'An unknown error occurred.',
170
+ });
171
+ }
172
+
173
+ return returnPromise;
174
+ };
175
+ }
@@ -0,0 +1,136 @@
1
+ import utils = require('../../../utils');
2
+
3
+ export default function(defaultFuncs: any, api: any, ctx: any) {
4
+ /**
5
+ * Made by Choru Official
6
+ * Mqtt
7
+ * Sets the name of a group chat thread via MQTT.
8
+ *
9
+ * @param {string} newName The new name for the group chat.
10
+ * @param {string} threadID The ID of the group chat thread.
11
+ * @param {Function} [callback] Optional callback function to be invoked upon completion.
12
+ * @param {string} [initiatorID] The ID of the user who initiated the group name change (e.g., from event.senderID).
13
+ * @returns {Promise<object>} A promise that resolves with a structured event object on success or rejects on error.
14
+ */
15
+ return function gcname(newName, threadID, callback, initiatorID) {
16
+ let _callback;
17
+ let _initiatorID;
18
+
19
+ let _resolvePromise;
20
+ let _rejectPromise;
21
+ const returnPromise = new Promise<any>((resolve, reject) => {
22
+ _resolvePromise = resolve;
23
+ _rejectPromise = reject;
24
+ });
25
+
26
+ if (
27
+ utils.getType(callback) === 'Function' ||
28
+ utils.getType(callback) === 'AsyncFunction'
29
+ ) {
30
+ _callback = callback;
31
+ _initiatorID = initiatorID;
32
+ } else if (
33
+ utils.getType(threadID) === 'Function' ||
34
+ utils.getType(threadID) === 'AsyncFunction'
35
+ ) {
36
+ _callback = threadID;
37
+ threadID = null;
38
+ _initiatorID = callback;
39
+ } else if (utils.getType(callback) === 'string') {
40
+ _initiatorID = callback;
41
+ _callback = undefined;
42
+ } else {
43
+ _callback = undefined;
44
+ _initiatorID = undefined;
45
+ }
46
+
47
+ if (!_callback) {
48
+ _callback = function(__err, __data) {
49
+ if (__err) _rejectPromise(__err);
50
+ else _resolvePromise(__data);
51
+ };
52
+ } else {
53
+ const originalCallback = _callback;
54
+ _callback = function(__err, __data) {
55
+ if (__err) {
56
+ originalCallback(__err);
57
+ _rejectPromise(__err);
58
+ } else {
59
+ originalCallback(null, __data);
60
+ _resolvePromise(__data);
61
+ }
62
+ };
63
+ }
64
+
65
+ _initiatorID = _initiatorID || ctx.userID;
66
+
67
+ threadID = threadID || ctx.threadID;
68
+
69
+ if (!threadID) {
70
+ return _callback(
71
+ new Error('threadID is required to change the group chat name.'),
72
+ );
73
+ }
74
+ if (typeof newName !== 'string') {
75
+ return _callback(new Error('newName must be a string.'));
76
+ }
77
+
78
+ if (!ctx.mqttClient) {
79
+ return _callback(new Error('Not connected to MQTT'));
80
+ }
81
+
82
+ ctx.wsReqNumber += 1;
83
+ ctx.wsTaskNumber += 1;
84
+
85
+ const queryPayload = {
86
+ thread_key: threadID.toString(),
87
+ thread_name: newName,
88
+ sync_group: 1,
89
+ };
90
+
91
+ const query = {
92
+ failure_count: null,
93
+ label: '32',
94
+ payload: JSON.stringify(queryPayload),
95
+ queue_name: threadID.toString(),
96
+ task_id: ctx.wsTaskNumber,
97
+ };
98
+
99
+ const context: any = {
100
+ app_id: ctx.appID,
101
+ payload: {
102
+ epoch_id: parseInt(utils.generateOfflineThreadingID()),
103
+ tasks: [query],
104
+ version_id: '24631415369801570',
105
+ },
106
+ request_id: ctx.wsReqNumber,
107
+ type: 3,
108
+ };
109
+ context.payload = JSON.stringify(context.payload);
110
+
111
+ ctx.mqttClient.publish(
112
+ '/ls_req',
113
+ JSON.stringify(context),
114
+ { qos: 1, retain: false },
115
+ (err) => {
116
+ if (err) {
117
+ return _callback(
118
+ new Error(`MQTT publish failed for gcname: ${err.message || err}`),
119
+ );
120
+ }
121
+
122
+ const gcnameChangeEvent = {
123
+ type: 'thread_name_update',
124
+ threadID: threadID,
125
+ newName: newName,
126
+ senderID: _initiatorID,
127
+ BotID: ctx.userID,
128
+ timestamp: Date.now(),
129
+ };
130
+ _callback(null, gcnameChangeEvent);
131
+ },
132
+ );
133
+
134
+ return returnPromise;
135
+ };
136
+ }
@@ -0,0 +1,152 @@
1
+ import utils = require('../../../utils');
2
+
3
+ export default function(defaultFuncs: any, api: any, ctx: any) {
4
+ /**
5
+ * Made by ChoruOfficial
6
+ * Mqtt
7
+ * Adds or removes an admin from a group chat with pre-checking.
8
+ *
9
+ * @param {"admin" | "unadmin"} action The action to perform.
10
+ * @param {string} userID The ID of the user to promote or demote.
11
+ * @param {string} threadID The ID of the group chat.
12
+ * @param {Function} [callback] Optional callback function.
13
+ * @returns {Promise<object>} A promise that resolves with information about the action.
14
+ */
15
+ return async function gcrule(action, userID, threadID, callback) {
16
+ let _callback;
17
+ if (typeof threadID === 'function') {
18
+ _callback = threadID;
19
+ threadID = null;
20
+ } else if (typeof callback === 'function') {
21
+ _callback = callback;
22
+ }
23
+
24
+ let resolvePromise, rejectPromise;
25
+ const returnPromise = new Promise<any>((resolve, reject) => {
26
+ resolvePromise = resolve;
27
+ rejectPromise = reject;
28
+ });
29
+
30
+ if (typeof _callback != 'function') {
31
+ _callback = (err, data) => {
32
+ if (err) return rejectPromise(err);
33
+ resolvePromise(data);
34
+ };
35
+ }
36
+
37
+ try {
38
+ const validActions = ['admin', 'unadmin'];
39
+ action = action ? action.toLowerCase() : '';
40
+
41
+ if (!validActions.includes(action)) {
42
+ return _callback(null, {
43
+ type: 'error_gc_rule',
44
+ error: `Invalid action. Must be one of: ${validActions.join(', ')}`,
45
+ });
46
+ }
47
+ if (!userID)
48
+ return _callback(null, {
49
+ type: 'error_gc_rule',
50
+ error: 'userID is required.',
51
+ });
52
+ if (!threadID)
53
+ return _callback(null, {
54
+ type: 'error_gc_rule',
55
+ error: 'threadID is required.',
56
+ });
57
+ if (!ctx.mqttClient)
58
+ return _callback(null, {
59
+ type: 'error_gc_rule',
60
+ error: 'Not connected to MQTT',
61
+ });
62
+
63
+ const threadInfo = await api.getThreadInfo(threadID);
64
+ if (!threadInfo) {
65
+ return _callback(null, {
66
+ type: 'error_gc_rule',
67
+ error: 'Could not retrieve thread information.',
68
+ });
69
+ }
70
+ if (threadInfo.isGroup === false) {
71
+ return _callback(null, {
72
+ type: 'error_gc_rule',
73
+ error: 'This feature is only for group chats.',
74
+ });
75
+ }
76
+
77
+ const adminIDs = threadInfo.adminIDs || [];
78
+ const isCurrentlyAdmin = adminIDs.some((admin) => admin.id === userID);
79
+
80
+ if (action === 'admin') {
81
+ if (isCurrentlyAdmin) {
82
+ return _callback(null, {
83
+ type: 'error_gc_rule',
84
+ error: `User is already an admin.`,
85
+ });
86
+ }
87
+ } else {
88
+ // action is 'unadmin'
89
+ if (!isCurrentlyAdmin) {
90
+ return _callback(null, {
91
+ type: 'error_gc_rule',
92
+ error: `User is not an admin.`,
93
+ });
94
+ }
95
+ }
96
+
97
+ const isAdminStatus = action === 'admin' ? 1 : 0;
98
+ ctx.wsReqNumber = (ctx.wsReqNumber || 0) + 1;
99
+ ctx.wsTaskNumber = (ctx.wsTaskNumber || 0) + 1;
100
+
101
+ const queryPayload = {
102
+ thread_key: parseInt(threadID),
103
+ contact_id: parseInt(userID),
104
+ is_admin: isAdminStatus,
105
+ };
106
+ const query = {
107
+ failure_count: null,
108
+ label: '25',
109
+ payload: JSON.stringify(queryPayload),
110
+ queue_name: 'admin_status',
111
+ task_id: ctx.wsTaskNumber,
112
+ };
113
+ const context: any = {
114
+ app_id: ctx.appID,
115
+ payload: {
116
+ epoch_id: parseInt(utils.generateOfflineThreadingID()),
117
+ tasks: [query],
118
+ version_id: '24631415369801570',
119
+ },
120
+ request_id: ctx.wsReqNumber,
121
+ type: 3,
122
+ };
123
+ context.payload = JSON.stringify(context.payload);
124
+
125
+ ctx.mqttClient.publish(
126
+ '/ls_req',
127
+ JSON.stringify(context),
128
+ { qos: 1, retain: false },
129
+ (err) => {
130
+ if (err) return _callback(err);
131
+ const gcruleInfo = {
132
+ type: 'gc_rule_update',
133
+ threadID: threadID,
134
+ userID: userID,
135
+ action: action,
136
+ senderID: ctx.userID,
137
+ BotID: ctx.userID,
138
+ timestamp: Date.now(),
139
+ };
140
+ return _callback(null, gcruleInfo);
141
+ },
142
+ );
143
+ } catch (err) {
144
+ return _callback(null, {
145
+ type: 'error_gc_rule',
146
+ error: err.message || 'An unknown error occurred.',
147
+ });
148
+ }
149
+
150
+ return returnPromise;
151
+ };
152
+ }
@@ -0,0 +1,47 @@
1
+ // @ChoruOfficial
2
+ "use strict";
3
+
4
+ import utils = require("../../../utils");
5
+ /**
6
+ * @param {Object} defaultFuncs
7
+ * @param {Object} api
8
+ * @param {Object} ctx
9
+ * @returns {function(threadID: string, messageID: string): Promise<void>}
10
+ */
11
+ export default function(defaultFuncs: any, api: any, ctx: any) {
12
+ /**
13
+ * Marks a message as delivered.
14
+ * @param {string} threadID - The ID of the thread.
15
+ * @param {string} messageID - The ID of the message to mark as delivered.
16
+ * @returns {Promise<void>} A promise that resolves on success or rejects on error.
17
+ */
18
+ return async function markAsDelivered(threadID, messageID) {
19
+ if (!threadID || !messageID) {
20
+ const err = "Error: messageID or threadID is not defined";
21
+ utils.error("markAsDelivered", err);
22
+ throw new Error(err);
23
+ }
24
+
25
+ const form = {};
26
+ form["message_ids[0]"] = messageID;
27
+ form["thread_ids[" + threadID + "][0]"] = messageID;
28
+
29
+ try {
30
+ const resData = await defaultFuncs
31
+ .post(
32
+ "https://www.facebook.com/ajax/mercury/delivery_receipts.php",
33
+ ctx.jar,
34
+ form,
35
+ )
36
+ .then(utils.saveCookies(ctx.jar))
37
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
38
+
39
+ if (resData.error) {
40
+ throw resData;
41
+ }
42
+ } catch (err) {
43
+ utils.error("markAsDelivered", err);
44
+ throw err;
45
+ }
46
+ };
47
+ };