@cexy/hoonfca 1.0.7 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -0
- package/README.md +100 -632
- package/examples/login-with-cookies.js +102 -0
- package/examples/verify.js +70 -0
- package/index.js +2 -8
- package/package.json +83 -61
- package/src/{api/action → apis}/addExternalModule.js +24 -25
- package/src/apis/addUserToGroup.js +108 -0
- package/src/apis/changeAdminStatus.js +148 -0
- package/src/apis/changeArchivedStatus.js +61 -0
- package/src/apis/changeAvatar.js +103 -0
- package/src/apis/changeBio.js +69 -0
- package/src/apis/changeBlockedStatus.js +54 -0
- package/src/apis/changeGroupImage.js +136 -0
- package/src/apis/changeThreadColor.js +116 -0
- package/src/apis/changeThreadEmoji.js +53 -0
- package/src/apis/comment.js +207 -0
- package/src/apis/createAITheme.js +129 -0
- package/src/apis/createNewGroup.js +79 -0
- package/src/apis/createPoll.js +73 -0
- package/src/apis/deleteMessage.js +44 -0
- package/src/apis/deleteThread.js +52 -0
- package/src/apis/e2ee.js +17 -0
- package/src/apis/editMessage.js +70 -0
- package/src/apis/emoji.js +124 -0
- package/src/apis/fetchThemeData.js +82 -0
- package/src/apis/follow.js +81 -0
- package/src/apis/forwardMessage.js +52 -0
- package/src/apis/friend.js +243 -0
- package/src/apis/gcmember.js +122 -0
- package/src/apis/gcname.js +123 -0
- package/src/apis/gcrule.js +119 -0
- package/src/apis/getAccess.js +111 -0
- package/src/apis/getBotInfo.js +88 -0
- package/src/apis/getBotInitialData.js +43 -0
- package/src/apis/getFriendsList.js +79 -0
- package/src/apis/getMessage.js +423 -0
- package/src/apis/getTheme.js +95 -0
- package/src/apis/getThemeInfo.js +116 -0
- package/src/apis/getThreadHistory.js +239 -0
- package/src/apis/getThreadInfo.js +267 -0
- package/src/apis/getThreadList.js +232 -0
- package/src/apis/getThreadPictures.js +58 -0
- package/src/apis/getUserID.js +117 -0
- package/src/apis/getUserInfo.js +513 -0
- package/src/{api/users → apis}/getUserInfoV2.js +146 -134
- package/src/apis/handleMessageRequest.js +50 -0
- package/src/apis/httpGet.js +63 -0
- package/src/apis/httpPost.js +89 -0
- package/src/apis/httpPostFormData.js +69 -0
- package/src/apis/listenMqtt.js +1236 -0
- package/src/apis/listenSpeed.js +179 -0
- package/src/apis/logout.js +87 -0
- package/src/apis/markAsDelivered.js +47 -0
- package/src/{api/messaging → apis}/markAsRead.js +99 -88
- package/src/apis/markAsReadAll.js +40 -0
- package/src/apis/markAsSeen.js +70 -0
- package/src/apis/mqttDeltaValue.js +278 -0
- package/src/apis/muteThread.js +45 -0
- package/src/apis/nickname.js +132 -0
- package/src/apis/notes.js +163 -0
- package/src/apis/pinMessage.js +150 -0
- package/src/apis/produceMetaTheme.js +180 -0
- package/src/apis/realtime.js +182 -0
- package/src/apis/removeUserFromGroup.js +117 -0
- package/src/apis/resolvePhotoUrl.js +58 -0
- package/src/apis/searchForThread.js +154 -0
- package/src/apis/sendMessage.js +354 -0
- package/src/apis/sendMessageMqtt.js +249 -0
- package/src/apis/sendTypingIndicator.js +91 -0
- package/src/apis/setMessageReaction.js +27 -0
- package/src/apis/setMessageReactionMqtt.js +61 -0
- package/src/apis/setThreadTheme.js +260 -0
- package/src/apis/setThreadThemeMqtt.js +94 -0
- package/src/apis/share.js +107 -0
- package/src/apis/shareContact.js +66 -0
- package/src/apis/stickers.js +257 -0
- package/src/apis/story.js +181 -0
- package/src/apis/theme.js +233 -0
- package/src/apis/unfriend.js +47 -0
- package/src/apis/unsendMessage.js +17 -0
- package/src/engine/client.js +92 -0
- package/src/engine/models/buildAPI.js +152 -0
- package/src/engine/models/loginHelper.js +519 -0
- package/src/engine/models/setOptions.js +88 -0
- package/src/security/e2ee.js +109 -0
- package/src/types/index.d.ts +498 -0
- package/src/utils/antiSuspension.js +506 -0
- package/src/utils/auth-helpers.js +149 -0
- package/src/utils/autoReLogin.js +336 -0
- package/src/utils/axios.js +436 -0
- package/src/utils/cache.js +54 -0
- package/src/utils/clients.js +282 -0
- package/src/utils/constants.js +410 -23
- package/src/utils/formatters/data/formatAttachment.js +370 -0
- package/src/utils/formatters/data/formatDelta.js +109 -0
- package/src/utils/formatters/index.js +159 -0
- package/src/utils/formatters/value/formatCookie.js +91 -0
- package/src/utils/formatters/value/formatDate.js +36 -0
- package/src/utils/formatters/value/formatID.js +16 -0
- package/src/utils/formatters.js +1373 -0
- package/src/utils/headers.js +214 -99
- package/src/utils/index.js +153 -0
- package/src/utils/monitoring.js +333 -0
- package/src/utils/rateLimiter.js +319 -0
- package/src/utils/tokenRefresh.js +657 -0
- package/src/utils/user-agents.js +238 -0
- package/src/utils/validation.js +157 -0
- package/CHANGELOG.md +0 -181
- package/DOCS.md +0 -2636
- package/LICENSE-MIT +0 -21
- package/func/checkUpdate.js +0 -233
- package/func/logger.js +0 -48
- package/index.d.ts +0 -746
- package/module/config.js +0 -67
- package/module/login.js +0 -154
- package/module/loginHelper.js +0 -1034
- package/module/options.js +0 -54
- package/src/api/action/changeAvatar.js +0 -137
- package/src/api/action/changeBio.js +0 -75
- package/src/api/action/enableAutoSaveAppState.js +0 -73
- package/src/api/action/getCurrentUserID.js +0 -7
- package/src/api/action/handleFriendRequest.js +0 -57
- package/src/api/action/logout.js +0 -76
- package/src/api/action/refreshFb_dtsg.js +0 -48
- package/src/api/action/setPostReaction.js +0 -106
- package/src/api/action/unfriend.js +0 -54
- package/src/api/http/httpGet.js +0 -46
- package/src/api/http/httpPost.js +0 -52
- package/src/api/http/postFormData.js +0 -47
- package/src/api/messaging/addUserToGroup.js +0 -68
- package/src/api/messaging/changeAdminStatus.js +0 -122
- package/src/api/messaging/changeArchivedStatus.js +0 -55
- package/src/api/messaging/changeBlockedStatus.js +0 -48
- package/src/api/messaging/changeGroupImage.js +0 -90
- package/src/api/messaging/changeNickname.js +0 -70
- package/src/api/messaging/changeThreadColor.js +0 -79
- package/src/api/messaging/changeThreadEmoji.js +0 -106
- package/src/api/messaging/createNewGroup.js +0 -88
- package/src/api/messaging/createPoll.js +0 -43
- package/src/api/messaging/createThemeAI.js +0 -98
- package/src/api/messaging/deleteMessage.js +0 -56
- package/src/api/messaging/deleteThread.js +0 -56
- package/src/api/messaging/editMessage.js +0 -68
- package/src/api/messaging/forwardAttachment.js +0 -51
- package/src/api/messaging/getEmojiUrl.js +0 -29
- package/src/api/messaging/getFriendsList.js +0 -82
- package/src/api/messaging/getMessage.js +0 -829
- package/src/api/messaging/getThemePictures.js +0 -62
- package/src/api/messaging/handleMessageRequest.js +0 -65
- package/src/api/messaging/markAsDelivered.js +0 -57
- package/src/api/messaging/markAsReadAll.js +0 -49
- package/src/api/messaging/markAsSeen.js +0 -61
- package/src/api/messaging/muteThread.js +0 -50
- package/src/api/messaging/removeUserFromGroup.js +0 -106
- package/src/api/messaging/resolvePhotoUrl.js +0 -43
- package/src/api/messaging/scheduler.js +0 -264
- package/src/api/messaging/searchForThread.js +0 -52
- package/src/api/messaging/sendMessage.js +0 -272
- package/src/api/messaging/sendTypingIndicator.js +0 -67
- package/src/api/messaging/setMessageReaction.js +0 -76
- package/src/api/messaging/setTitle.js +0 -119
- package/src/api/messaging/shareContact.js +0 -49
- package/src/api/messaging/threadColors.js +0 -128
- package/src/api/messaging/unsendMessage.js +0 -81
- package/src/api/messaging/uploadAttachment.js +0 -94
- package/src/api/socket/core/connectMqtt.js +0 -255
- package/src/api/socket/core/emitAuth.js +0 -106
- package/src/api/socket/core/getSeqID.js +0 -40
- package/src/api/socket/core/getTaskResponseData.js +0 -22
- package/src/api/socket/core/markDelivery.js +0 -12
- package/src/api/socket/core/parseDelta.js +0 -391
- package/src/api/socket/detail/buildStream.js +0 -208
- package/src/api/socket/detail/constants.js +0 -24
- package/src/api/socket/listenMqtt.js +0 -364
- package/src/api/socket/middleware/index.js +0 -216
- package/src/api/threads/getThreadHistory.js +0 -664
- package/src/api/threads/getThreadInfo.js +0 -438
- package/src/api/threads/getThreadList.js +0 -293
- package/src/api/threads/getThreadPictures.js +0 -78
- package/src/api/users/getUserID.js +0 -65
- package/src/api/users/getUserInfo.js +0 -327
- package/src/core/sendReqMqtt.js +0 -96
- package/src/database/models/index.js +0 -87
- package/src/database/models/thread.js +0 -45
- package/src/database/models/user.js +0 -46
- package/src/database/threadData.js +0 -98
- package/src/database/userData.js +0 -89
- package/src/utils/client.js +0 -320
- package/src/utils/format.js +0 -1115
- package/src/utils/request.js +0 -305
package/README.md
CHANGED
|
@@ -1,632 +1,100 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- Node.js >= 12.0.0
|
|
102
|
-
- Active Facebook account
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## 🚀 Quick Start
|
|
107
|
-
|
|
108
|
-
### 1️⃣ Login and Simple Echo Bot
|
|
109
|
-
|
|
110
|
-
```javascript
|
|
111
|
-
const login = require("@dongdev/fca-unofficial");
|
|
112
|
-
|
|
113
|
-
login({ appState: [] }, (err, api) => {
|
|
114
|
-
if (err) return console.error(err);
|
|
115
|
-
|
|
116
|
-
api.listenMqtt((err, event) => {
|
|
117
|
-
if (err) return console.error(err);
|
|
118
|
-
|
|
119
|
-
// Echo back the received message
|
|
120
|
-
api.sendMessage(event.body, event.threadID);
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### 2️⃣ Send Text Message
|
|
126
|
-
|
|
127
|
-
```javascript
|
|
128
|
-
const login = require("@dongdev/fca-unofficial");
|
|
129
|
-
|
|
130
|
-
login({ appState: [] }, (err, api) => {
|
|
131
|
-
if (err) {
|
|
132
|
-
console.error("Login Error:", err);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const yourID = "000000000000000"; // Replace with actual Facebook ID
|
|
137
|
-
const msg = "Hey! 👋";
|
|
138
|
-
|
|
139
|
-
api.sendMessage(msg, yourID, err => {
|
|
140
|
-
if (err) console.error("Message Sending Error:", err);
|
|
141
|
-
else console.log("✅ Message sent successfully!");
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
> **💡 Tip:** To find your Facebook ID, look inside the cookies under the name `c_user`
|
|
147
|
-
|
|
148
|
-
### 3️⃣ Send File/Image
|
|
149
|
-
|
|
150
|
-
```javascript
|
|
151
|
-
const login = require("@dongdev/fca-unofficial");
|
|
152
|
-
const fs = require("fs");
|
|
153
|
-
|
|
154
|
-
login({ appState: [] }, (err, api) => {
|
|
155
|
-
if (err) {
|
|
156
|
-
console.error("Login Error:", err);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const yourID = "000000000000000";
|
|
161
|
-
const imagePath = __dirname + "/image.jpg";
|
|
162
|
-
|
|
163
|
-
// Check if file exists
|
|
164
|
-
if (!fs.existsSync(imagePath)) {
|
|
165
|
-
console.error("❌ Error: Image file not found!");
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
const msg = {
|
|
170
|
-
body: "Check out this image! 📷",
|
|
171
|
-
attachment: fs.createReadStream(imagePath)
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
api.sendMessage(msg, yourID, err => {
|
|
175
|
-
if (err) console.error("Message Sending Error:", err);
|
|
176
|
-
else console.log("✅ Image sent successfully!");
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## 📝 Message Types
|
|
184
|
-
|
|
185
|
-
| Type | Usage | Example |
|
|
186
|
-
|------|-------|---------|
|
|
187
|
-
| **Regular text** | `{ body: "message text" }` | `{ body: "Hello!" }` |
|
|
188
|
-
| **Sticker** | `{ sticker: "sticker_id" }` | `{ sticker: "369239263222822" }` |
|
|
189
|
-
| **File/Image** | `{ attachment: fs.createReadStream(path) }` | `{ attachment: fs.createReadStream("image.jpg") }` |
|
|
190
|
-
| **URL** | `{ url: "https://example.com" }` | `{ url: "https://github.com" }` |
|
|
191
|
-
| **Large emoji** | `{ emoji: "👍", emojiSize: "large" }` | `{ emoji: "👍", emojiSize: "large" }` |
|
|
192
|
-
|
|
193
|
-
> **📌 Note:** A message can only be a regular message (which can be empty) and optionally **one of the following**: a sticker, an attachment, or a URL.
|
|
194
|
-
|
|
195
|
-
**Emoji sizes:** `small` | `medium` | `large`
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 💾 AppState Management
|
|
200
|
-
|
|
201
|
-
### Save AppState
|
|
202
|
-
|
|
203
|
-
Save your login session to avoid re-authentication:
|
|
204
|
-
|
|
205
|
-
```javascript
|
|
206
|
-
const fs = require("fs");
|
|
207
|
-
const login = require("@dongdev/fca-unofficial");
|
|
208
|
-
|
|
209
|
-
const credentials = { appState: [] };
|
|
210
|
-
|
|
211
|
-
login(credentials, (err, api) => {
|
|
212
|
-
if (err) {
|
|
213
|
-
console.error("Login Error:", err);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
try {
|
|
218
|
-
const appState = JSON.stringify(api.getAppState(), null, 2);
|
|
219
|
-
fs.writeFileSync("appstate.json", appState);
|
|
220
|
-
console.log("✅ AppState saved successfully!");
|
|
221
|
-
} catch (error) {
|
|
222
|
-
console.error("❌ Error saving AppState:", error);
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### Use Saved AppState
|
|
228
|
-
|
|
229
|
-
Load your saved AppState for faster login:
|
|
230
|
-
|
|
231
|
-
```javascript
|
|
232
|
-
const fs = require("fs");
|
|
233
|
-
const login = require("@dongdev/fca-unofficial");
|
|
234
|
-
|
|
235
|
-
login(
|
|
236
|
-
{ appState: JSON.parse(fs.readFileSync("appstate.json", "utf8")) },
|
|
237
|
-
(err, api) => {
|
|
238
|
-
if (err) {
|
|
239
|
-
console.error("Login Error:", err);
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
console.log("✅ Logged in successfully!");
|
|
244
|
-
// Your code here
|
|
245
|
-
}
|
|
246
|
-
);
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
**Alternative:** Use [c3c-fbstate](https://github.com/c3cbot/c3c-fbstate) to get `fbstate.json`
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## 👂 Listening for Messages
|
|
254
|
-
|
|
255
|
-
### Echo Bot with Stop Command
|
|
256
|
-
|
|
257
|
-
```javascript
|
|
258
|
-
const fs = require("fs");
|
|
259
|
-
const login = require("@dongdev/fca-unofficial");
|
|
260
|
-
|
|
261
|
-
login(
|
|
262
|
-
{ appState: JSON.parse(fs.readFileSync("appstate.json", "utf8")) },
|
|
263
|
-
(err, api) => {
|
|
264
|
-
if (err) {
|
|
265
|
-
console.error("Login Error:", err);
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// Enable listening to events (join/leave, title change, etc.)
|
|
270
|
-
api.setOptions({ listenEvents: true });
|
|
271
|
-
|
|
272
|
-
const stopListening = api.listenMqtt((err, event) => {
|
|
273
|
-
if (err) {
|
|
274
|
-
console.error("Listen Error:", err);
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// Mark as read
|
|
279
|
-
api.markAsRead(event.threadID, err => {
|
|
280
|
-
if (err) console.error("Mark as read error:", err);
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
// Handle different event types
|
|
284
|
-
switch (event.type) {
|
|
285
|
-
case "message":
|
|
286
|
-
if (event.body && event.body.trim().toLowerCase() === "/stop") {
|
|
287
|
-
api.sendMessage("Goodbye… 👋", event.threadID);
|
|
288
|
-
stopListening();
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
api.sendMessage(`🤖 BOT: ${event.body}`, event.threadID);
|
|
292
|
-
break;
|
|
293
|
-
|
|
294
|
-
case "event":
|
|
295
|
-
console.log("📢 Event Received:", event);
|
|
296
|
-
break;
|
|
297
|
-
}
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
);
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### Listen Options
|
|
304
|
-
|
|
305
|
-
Configure listening behavior:
|
|
306
|
-
|
|
307
|
-
```javascript
|
|
308
|
-
api.setOptions({
|
|
309
|
-
listenEvents: true, // Receive events (join/leave, rename, etc.)
|
|
310
|
-
selfListen: true, // Receive messages from yourself
|
|
311
|
-
logLevel: "silent" // Disable logs (silent/error/warn/info/verbose)
|
|
312
|
-
});
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
**Default values:**
|
|
316
|
-
- `listenEvents`: `false` - won't receive events like joining/leaving chat, title changes
|
|
317
|
-
- `selfListen`: `false` - will ignore messages sent by the current account
|
|
318
|
-
- `logLevel`: `"info"` - default logging level
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## 🎯 API Quick Reference
|
|
323
|
-
|
|
324
|
-
### 📨 Messaging Methods
|
|
325
|
-
|
|
326
|
-
```javascript
|
|
327
|
-
// Send message
|
|
328
|
-
api.sendMessage(message, threadID, callback);
|
|
329
|
-
|
|
330
|
-
// Send typing indicator
|
|
331
|
-
api.sendTypingIndicator(threadID, callback);
|
|
332
|
-
|
|
333
|
-
// Get message
|
|
334
|
-
api.getMessage(threadID, limit, callback);
|
|
335
|
-
|
|
336
|
-
// Edit message
|
|
337
|
-
api.editMessage(message, messageID, callback);
|
|
338
|
-
|
|
339
|
-
// Delete message
|
|
340
|
-
api.deleteMessage(messageID, callback);
|
|
341
|
-
|
|
342
|
-
// Unsend message
|
|
343
|
-
api.unsendMessage(messageID, callback);
|
|
344
|
-
|
|
345
|
-
// Set message reaction
|
|
346
|
-
api.setMessageReaction(reaction, messageID, callback);
|
|
347
|
-
|
|
348
|
-
// Forward attachment
|
|
349
|
-
api.forwardAttachment(attachmentID, threadID, callback);
|
|
350
|
-
|
|
351
|
-
// Upload attachment
|
|
352
|
-
api.uploadAttachment(attachment, callback);
|
|
353
|
-
|
|
354
|
-
// Create poll
|
|
355
|
-
api.createPoll(question, options, threadID, callback);
|
|
356
|
-
|
|
357
|
-
// Create theme AI
|
|
358
|
-
api.createThemeAI(threadID, callback);
|
|
359
|
-
|
|
360
|
-
// Get theme pictures
|
|
361
|
-
api.getThemePictures(threadID, callback);
|
|
362
|
-
|
|
363
|
-
// Get emoji URL
|
|
364
|
-
api.getEmojiUrl(emoji, size, callback);
|
|
365
|
-
|
|
366
|
-
// Resolve photo URL
|
|
367
|
-
api.resolvePhotoUrl(photoID, callback);
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
### 📬 Read Receipt & Delivery
|
|
371
|
-
|
|
372
|
-
```javascript
|
|
373
|
-
// Mark as read
|
|
374
|
-
api.markAsRead(threadID, callback);
|
|
375
|
-
|
|
376
|
-
// Mark as read all
|
|
377
|
-
api.markAsReadAll(callback);
|
|
378
|
-
|
|
379
|
-
// Mark as delivered
|
|
380
|
-
api.markAsDelivered(threadID, callback);
|
|
381
|
-
|
|
382
|
-
// Mark as seen
|
|
383
|
-
api.markAsSeen(threadID, callback);
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### 👥 Thread Management
|
|
387
|
-
|
|
388
|
-
```javascript
|
|
389
|
-
// Get thread info
|
|
390
|
-
api.getThreadInfo(threadID, callback);
|
|
391
|
-
|
|
392
|
-
// Get thread list
|
|
393
|
-
api.getThreadList(limit, timestamp, callback);
|
|
394
|
-
|
|
395
|
-
// Get thread history
|
|
396
|
-
api.getThreadHistory(threadID, amount, timestamp, callback);
|
|
397
|
-
|
|
398
|
-
// Get thread pictures
|
|
399
|
-
api.getThreadPictures(threadID, limit, callback);
|
|
400
|
-
|
|
401
|
-
// Search for thread
|
|
402
|
-
api.searchForThread(name, callback);
|
|
403
|
-
|
|
404
|
-
// Delete thread
|
|
405
|
-
api.deleteThread(threadID, callback);
|
|
406
|
-
```
|
|
407
|
-
|
|
408
|
-
### 🎨 Thread Customization
|
|
409
|
-
|
|
410
|
-
```javascript
|
|
411
|
-
// Change thread color
|
|
412
|
-
api.changeThreadColor(color, threadID, callback);
|
|
413
|
-
|
|
414
|
-
// Change thread emoji
|
|
415
|
-
api.changeThreadEmoji(emoji, threadID, callback);
|
|
416
|
-
|
|
417
|
-
// Change group image
|
|
418
|
-
api.changeGroupImage(image, threadID, callback);
|
|
419
|
-
|
|
420
|
-
// Set title
|
|
421
|
-
api.setTitle(title, threadID, callback);
|
|
422
|
-
|
|
423
|
-
// Change nickname
|
|
424
|
-
api.changeNickname(nickname, userID, threadID, callback);
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
### 👤 User Management
|
|
428
|
-
|
|
429
|
-
```javascript
|
|
430
|
-
// Get user info
|
|
431
|
-
api.getUserInfo(userID, callback);
|
|
432
|
-
|
|
433
|
-
// Get user info V2
|
|
434
|
-
api.getUserInfoV2(userID, callback);
|
|
435
|
-
|
|
436
|
-
// Get user ID
|
|
437
|
-
api.getUserID(username, callback);
|
|
438
|
-
|
|
439
|
-
// Get friends list
|
|
440
|
-
api.getFriendsList(callback);
|
|
441
|
-
|
|
442
|
-
// Get current user ID
|
|
443
|
-
api.getCurrentUserID(callback);
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### 👥 Group Management
|
|
447
|
-
|
|
448
|
-
```javascript
|
|
449
|
-
// Create new group
|
|
450
|
-
api.createNewGroup(participantIDs, groupTitle, callback);
|
|
451
|
-
|
|
452
|
-
// Add user to group
|
|
453
|
-
api.addUserToGroup(userID, threadID, callback);
|
|
454
|
-
|
|
455
|
-
// Remove user from group
|
|
456
|
-
api.removeUserFromGroup(userID, threadID, callback);
|
|
457
|
-
|
|
458
|
-
// Change admin status
|
|
459
|
-
api.changeAdminStatus(userID, threadID, admin, callback);
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
### ⚙️ Thread Settings
|
|
463
|
-
|
|
464
|
-
```javascript
|
|
465
|
-
// Mute thread
|
|
466
|
-
api.muteThread(threadID, muteSeconds, callback);
|
|
467
|
-
|
|
468
|
-
// Change archived status
|
|
469
|
-
api.changeArchivedStatus(threadID, archived, callback);
|
|
470
|
-
|
|
471
|
-
// Change blocked status
|
|
472
|
-
api.changeBlockedStatus(userID, block, callback);
|
|
473
|
-
|
|
474
|
-
// Handle message request
|
|
475
|
-
api.handleMessageRequest(threadID, accept, callback);
|
|
476
|
-
```
|
|
477
|
-
|
|
478
|
-
### 🔗 Sharing & Contacts
|
|
479
|
-
|
|
480
|
-
```javascript
|
|
481
|
-
// Share contact
|
|
482
|
-
api.shareContact(contactID, threadID, callback);
|
|
483
|
-
```
|
|
484
|
-
|
|
485
|
-
### 🎭 User Actions
|
|
486
|
-
|
|
487
|
-
```javascript
|
|
488
|
-
// Change avatar
|
|
489
|
-
api.changeAvatar(image, callback);
|
|
490
|
-
|
|
491
|
-
// Change bio
|
|
492
|
-
api.changeBio(bio, callback);
|
|
493
|
-
|
|
494
|
-
// Handle friend request
|
|
495
|
-
api.handleFriendRequest(userID, accept, callback);
|
|
496
|
-
|
|
497
|
-
// Unfriend
|
|
498
|
-
api.unfriend(userID, callback);
|
|
499
|
-
|
|
500
|
-
// Set post reaction
|
|
501
|
-
api.setPostReaction(postID, reaction, callback);
|
|
502
|
-
|
|
503
|
-
// Refresh fb_dtsg
|
|
504
|
-
api.refreshFb_dtsg(callback);
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
### 🔐 Authentication
|
|
508
|
-
|
|
509
|
-
```javascript
|
|
510
|
-
// Logout
|
|
511
|
-
api.logout(callback);
|
|
512
|
-
|
|
513
|
-
// Get app state
|
|
514
|
-
api.getAppState();
|
|
515
|
-
|
|
516
|
-
// Set options
|
|
517
|
-
api.setOptions(options);
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
### 📡 Listening
|
|
521
|
-
|
|
522
|
-
```javascript
|
|
523
|
-
// Listen to MQTT events
|
|
524
|
-
api.listenMqtt(callback);
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
### Event Types
|
|
528
|
-
|
|
529
|
-
- `message` - New message received
|
|
530
|
-
- `event` - Thread events (join, leave, title change, etc.)
|
|
531
|
-
- `typ` - Typing indicator
|
|
532
|
-
- `read_receipt` - Read receipt
|
|
533
|
-
- `presence` - User presence (online/offline)
|
|
534
|
-
- `read` - Message read status
|
|
535
|
-
- `delivery_receipt` - Message delivery receipt
|
|
536
|
-
|
|
537
|
-
---
|
|
538
|
-
|
|
539
|
-
## 📚 Documentation
|
|
540
|
-
|
|
541
|
-
For detailed API documentation, see [DOCS.md](./DOCS.md)
|
|
542
|
-
|
|
543
|
-
**Includes:**
|
|
544
|
-
- 📖 All available API methods
|
|
545
|
-
- 🔧 Parameters and options
|
|
546
|
-
- 📨 Event types and structures
|
|
547
|
-
- ⚠️ Error handling
|
|
548
|
-
- 💡 Advanced usage examples
|
|
549
|
-
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
## 🛠️ Projects Using This API
|
|
553
|
-
|
|
554
|
-
Here are some awesome projects built with `@dongdev/fca-unofficial`:
|
|
555
|
-
|
|
556
|
-
| Project | Description |
|
|
557
|
-
|---------|-------------|
|
|
558
|
-
| **[c3c](https://github.com/lequanglam/c3c)** | Customizable bot with plugins, supports Facebook & Discord |
|
|
559
|
-
| **[Miraiv2](https://github.com/miraiPr0ject/miraiv2)** | Simple Facebook Messenger Bot |
|
|
560
|
-
| **[Messer](https://github.com/mjkaufer/Messer)** | Command-line messaging for Facebook Messenger |
|
|
561
|
-
| **[messen](https://github.com/tomquirk/messen)** | Rapidly build Facebook Messenger apps in Node.js |
|
|
562
|
-
| **[Concierge](https://github.com/concierge/Concierge)** | Highly modular chat bot with built-in package manager |
|
|
563
|
-
| **[Marc Zuckerbot](https://github.com/bsansouci/marc-zuckerbot)** | Facebook chat bot |
|
|
564
|
-
| **[Botyo](https://github.com/ivkos/botyo)** | Modular bot for group chat rooms |
|
|
565
|
-
| **[matrix-puppet-facebook](https://github.com/matrix-hacks/matrix-puppet-facebook)** | Facebook bridge for Matrix |
|
|
566
|
-
| **[Miscord](https://github.com/Bjornskjald/miscord)** | Easy-to-use Facebook bridge for Discord |
|
|
567
|
-
| **[chat-bridge](https://github.com/rexx0520/chat-bridge)** | Messenger, Telegram and IRC chat bridge |
|
|
568
|
-
| **[Botium](https://github.com/codeforequity-at/botium-core)** | The Selenium for Chatbots |
|
|
569
|
-
| **[Messenger-CLI](https://github.com/AstroCB/Messenger-CLI)** | Command-line interface for Facebook Messenger |
|
|
570
|
-
| **[BotCore](https://github.com/AstroCB/BotCore)** | Tools for writing and managing Facebook Messenger bots |
|
|
571
|
-
|
|
572
|
-
[See more projects...](https://github.com/Donix-VN/fca-unofficial#projects-using-this-api)
|
|
573
|
-
|
|
574
|
-
---
|
|
575
|
-
|
|
576
|
-
## 🤝 Contributing
|
|
577
|
-
|
|
578
|
-
Contributions are welcome! We love your input 💙
|
|
579
|
-
|
|
580
|
-
**How to contribute:**
|
|
581
|
-
|
|
582
|
-
1. 🍴 Fork the repository
|
|
583
|
-
2. 🌿 Create a new branch (`git checkout -b feature/AmazingFeature`)
|
|
584
|
-
3. 💾 Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
585
|
-
4. 📤 Push to the branch (`git push origin feature/AmazingFeature`)
|
|
586
|
-
5. 🔄 Open a Pull Request
|
|
587
|
-
|
|
588
|
-
**Guidelines:**
|
|
589
|
-
- Follow the existing code style
|
|
590
|
-
- Add tests for new features
|
|
591
|
-
- Update documentation as needed
|
|
592
|
-
- Be respectful and constructive
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
## 📄 License
|
|
597
|
-
|
|
598
|
-
This project is licensed under the **MIT License** - see the [LICENSE-MIT](./LICENSE-MIT) file for details.
|
|
599
|
-
|
|
600
|
-
---
|
|
601
|
-
|
|
602
|
-
## 👨💻 Author & Support
|
|
603
|
-
|
|
604
|
-
<div align="center">
|
|
605
|
-
|
|
606
|
-
**Made with ❤️ by DongDev**
|
|
607
|
-
|
|
608
|
-
[](https://www.facebook.com/mdong.dev)
|
|
609
|
-
[](https://github.com/Donix-VN)
|
|
610
|
-
|
|
611
|
-
</div>
|
|
612
|
-
|
|
613
|
-
### 🔗 Links
|
|
614
|
-
|
|
615
|
-
- 📦 [NPM Package](https://www.npmjs.com/package/@dongdev/fca-unofficial)
|
|
616
|
-
- 🐙 [GitHub Repository](https://github.com/Donix-VN/fca-unofficial)
|
|
617
|
-
- 🐛 [Issue Tracker](https://github.com/Donix-VN/fca-unofficial/issues)
|
|
618
|
-
- 📖 [Documentation](./DOCS.md)
|
|
619
|
-
|
|
620
|
-
### ⭐ Support
|
|
621
|
-
|
|
622
|
-
If this project is helpful, please give it a ⭐ on GitHub!
|
|
623
|
-
|
|
624
|
-
---
|
|
625
|
-
|
|
626
|
-
<div align="center">
|
|
627
|
-
|
|
628
|
-
**⚠️ Disclaimer:** This is an unofficial API and is not officially supported by Facebook. Use responsibly and comply with [Facebook Terms of Service](https://www.facebook.com/terms.php).
|
|
629
|
-
|
|
630
|
-
Made with ❤️ for the developer community
|
|
631
|
-
|
|
632
|
-
</div>
|
|
1
|
+
# 🚀 Hoon FCA
|
|
2
|
+
|
|
3
|
+
> Advanced Facebook Chat API for Node.js with Cookie Login, MQTT, Auto Reconnect, Token Refresh and modern Messenger features.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ✨ Features
|
|
8
|
+
|
|
9
|
+
- 🍪 Cookie / AppState Login
|
|
10
|
+
- ⚡ MQTT Real-Time Messaging
|
|
11
|
+
- 🔄 Auto Reconnect
|
|
12
|
+
- 🔐 Auto Re-Login
|
|
13
|
+
- ♻️ Token Refresh
|
|
14
|
+
- 💬 Send & Receive Messages
|
|
15
|
+
- ❤️ Message Reactions
|
|
16
|
+
- 👥 Thread & Group Management
|
|
17
|
+
- 🎨 Themes & Stickers
|
|
18
|
+
- 📊 Health Monitoring
|
|
19
|
+
- 🚀 Fast & Lightweight
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 📦 Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install @cexy/hoonfca
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 🚀 Quick Start
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
const fs = require("fs");
|
|
35
|
+
const { login } = require("@cexy/hoonfca");
|
|
36
|
+
|
|
37
|
+
const appState = JSON.parse(
|
|
38
|
+
fs.readFileSync("appstate.json", "utf8")
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
login(
|
|
42
|
+
{ appState },
|
|
43
|
+
{
|
|
44
|
+
online: true,
|
|
45
|
+
listenEvents: true,
|
|
46
|
+
autoReconnect: true
|
|
47
|
+
},
|
|
48
|
+
(err, api) => {
|
|
49
|
+
if (err) return console.error(err);
|
|
50
|
+
|
|
51
|
+
console.log("Logged in:", api.getCurrentUserID());
|
|
52
|
+
|
|
53
|
+
api.listenMqtt((err, event) => {
|
|
54
|
+
if (err || event.type !== "message") return;
|
|
55
|
+
|
|
56
|
+
if (event.body === "/ping") {
|
|
57
|
+
api.sendMessage("🏓 Pong!", event.threadID);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 📋 Requirements
|
|
67
|
+
|
|
68
|
+
- Node.js **20+**
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 🔗 Links
|
|
73
|
+
|
|
74
|
+
- **GitHub:** https://github.com/hoon6t9/hinata-fca
|
|
75
|
+
- **NPM:** https://www.npmjs.com/package/@cexy/hoonfca
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## ❤️ Credits
|
|
80
|
+
|
|
81
|
+
Developed & Maintained by **Hoon**
|
|
82
|
+
|
|
83
|
+
Inspired by:
|
|
84
|
+
|
|
85
|
+
- ws3-fca
|
|
86
|
+
- @dongdev/fca-unofficial
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 📄 License
|
|
91
|
+
|
|
92
|
+
MIT License
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
<div align="center">
|
|
97
|
+
|
|
98
|
+
Made with ❤️ by **Hoon**
|
|
99
|
+
|
|
100
|
+
</div>
|