Skip to content

Commit 4e816b3

Browse files
committed
refactor + fb detect unfriend (WIP)
1 parent 7be9565 commit 4e816b3

12 files changed

+146
-81
lines changed

popup/tabs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,11 @@ const tabs = [
306306
createTitle("--- Hot ---", "--- Nổi bật ---"),
307307
s.fb_revealDeletedMessages,
308308
s.fb_moreReactionStory,
309-
s.fb_detectUnfriend,
310309
s.fb_whoIsTyping,
311310
s.fb_toggleLight,
312311
s.fb_toggleNewFeed,
313312
createTitle("--- Statistic ---", "--- Thống kê ---"),
313+
s.fb_detectUnfriend,
314314
s.fb_messengerHistory,
315315
s.fb_messengerCount,
316316
s.fb_searchGroupForOther,

scripts/fb_GLOBAL.js

Lines changed: 70 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { UfsGlobal } from "./content-scripts/ufs_global.js";
22

3+
// NOTES: functions that end with _ are required access token
4+
35
// Helpers
46
export async function fetchGraphQl(str, fb_dtsg) {
5-
var fb_dtsg = "fb_dtsg=" + encodeURIComponent(fb_dtsg);
7+
fb_dtsg = "fb_dtsg=" + encodeURIComponent(fb_dtsg);
68
fb_dtsg += str.includes("variables")
79
? "&" + str
810
: "&q=" + encodeURIComponent(str);
@@ -46,11 +48,7 @@ export async function getFbdtsg() {
4648
}
4749
// User Data
4850
export function getUserAvatarFromUid(uid) {
49-
return (
50-
"https://graph.facebook.com/" +
51-
uid +
52-
"/picture?height=500&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662"
53-
);
51+
return `https://graph.facebook.com/${uid}/picture?height=500&access_token=6628568379%7Cc1e620fa708a1d5696fb991c1bde5662`;
5452
}
5553
export async function getYourUserId() {
5654
let methods = [
@@ -108,7 +106,7 @@ export async function getUserInfoFromUid(uid) {
108106
alternateName: /"alternate_name":"(.*?)"/.exec(text)?.[1],
109107
};
110108
}
111-
export async function getUserInfo(uid, access_token) {
109+
export async function getUserInfo_(uid, access_token) {
112110
let fields = [
113111
"birthday",
114112
"age_range",
@@ -125,7 +123,7 @@ export async function getUserInfo(uid, access_token) {
125123
"short_name",
126124
"picture",
127125
].join(",");
128-
var n = `https://graph.facebook.com/${uid}/?fields=${fields}&access_token=${access_token}`;
126+
let n = `https://graph.facebook.com/${uid}/?fields=${fields}&access_token=${access_token}`;
129127
const e = await fetch(n);
130128
let json = await e.json();
131129
console.log(json);
@@ -141,10 +139,10 @@ export async function getUidFromUrl(url) {
141139
let methods = [
142140
() => require("CometRouteStore").getRoute(url).rootView.props.userID,
143141
async () => {
144-
var response = await fetch(url);
142+
let response = await fetch(url);
145143
if (response.status == 200) {
146-
var text = await response.text();
147-
let uid = /(?<=\"userID\"\:\")(.\d+?)(?=\")/.exec(text);
144+
let text = await response.text();
145+
let uid = /(?<="userID":")(.\d+?)(?=")/.exec(text);
148146
if (uid?.length) {
149147
return uid[0];
150148
}
@@ -277,13 +275,13 @@ export async function getStoryInfo(bucketID, fb_dtsg) {
277275
}
278276
// Friend
279277
export async function removeFriendConfirm(friend_uid, uid, fb_dtsg) {
280-
var f = new FormData();
281-
f.append("uid", friend_uid),
282-
f.append("unref", "bd_friends_tab"),
283-
f.append("floc", "friends_tab"),
284-
f.append("__user", uid),
285-
f.append("__a", 1),
286-
f.append("fb_dtsg", fb_dtsg);
278+
let f = new FormData();
279+
f.append("uid", friend_uid);
280+
f.append("unref", "bd_friends_tab");
281+
f.append("floc", "friends_tab");
282+
f.append("__user", uid);
283+
f.append("__a", 1);
284+
f.append("fb_dtsg", fb_dtsg);
287285
await fetch(
288286
"https://www.facebook.com/ajax/ajax/profile/removefriendconfirm.php?dpr=1",
289287
{
@@ -293,21 +291,54 @@ export async function removeFriendConfirm(friend_uid, uid, fb_dtsg) {
293291
}
294292
);
295293
}
294+
export async function fetchAllFriends_(access_token, progressCallback) {
295+
let friends = [];
296+
let total = 0;
297+
let limit = 25;
298+
let after = null;
299+
300+
while (true) {
301+
try {
302+
const res = await fetch(
303+
`https://graph.facebook.com/v19.0/me?fields=friends` +
304+
`&access_token=${access_token}&pretty=0&limit=${limit}` +
305+
(after ? `&after=${after}` : "")
306+
);
307+
const json = await res.json();
308+
const { data, paging, summary } = json.friends;
309+
total = summary.total_count || total;
310+
friends = friends.concat(data);
311+
312+
progressCallback?.({
313+
data: friends,
314+
loaded: friends.length,
315+
total,
316+
});
317+
318+
if (!paging?.cursors?.after || paging.cursors.after === after) break;
319+
after = paging.cursors.after;
320+
} catch (e) {
321+
console.error(e);
322+
break;
323+
}
324+
}
325+
return friends;
326+
}
296327
export async function fetchAddedFriends(uid, fb_dtsg, cursor) {
297328
let variables = JSON.stringify({
298329
count: 8,
299330
cursor: cursor ?? null,
300331
category_key: "FRIENDS",
301332
});
302333
const t = new URLSearchParams();
303-
t.append("__user", uid),
304-
t.append("__a", 1),
305-
t.append("dpr", 1),
306-
t.append("fb_dtsg", fb_dtsg),
307-
t.append("fb_api_caller_class", "RelayModern"),
308-
t.append("fb_api_req_friendly_name", "ActivityLogStoriesQuery"),
309-
t.append("doc_id", "2761528123917382"),
310-
t.append("variables", variables);
334+
t.append("__user", uid);
335+
t.append("__a", 1);
336+
t.append("dpr", 1);
337+
t.append("fb_dtsg", fb_dtsg);
338+
t.append("fb_api_caller_class", "RelayModern");
339+
t.append("fb_api_req_friendly_name", "ActivityLogStoriesQuery");
340+
t.append("doc_id", "2761528123917382");
341+
t.append("variables", variables);
311342

312343
let res = await fetch("https://www.facebook.com/api/graphql/", {
313344
method: "POST",
@@ -394,14 +425,14 @@ export async function messagesCount(fb_dtsg) {
394425
}
395426
// Page
396427
export async function unlikePage(pageId, uid, fb_dtsg) {
397-
var f = new FormData();
398-
f.append("fbpage_id", pageId),
399-
f.append("add", false),
400-
f.append("reload", false),
401-
f.append("fan_origin", "page_timeline"),
402-
f.append("__user", uid),
403-
f.append("__a", 1),
404-
f.append("fb_dtsg", fb_dtsg);
428+
let f = new FormData();
429+
f.append("fbpage_id", pageId);
430+
f.append("add", false);
431+
f.append("reload", false);
432+
f.append("fan_origin", "page_timeline");
433+
f.append("__user", uid);
434+
f.append("__a", 1);
435+
f.append("fb_dtsg", fb_dtsg);
405436
await fetch("https://www.facebook.com/ajax/pages/fan_status.php?dpr=1", {
406437
method: "POST",
407438
credentials: "include",
@@ -487,11 +518,11 @@ export async function searchAllPageForOther(
487518
}
488519
// Group
489520
export async function leaveGroup(groupId, uid, fb_dtsg) {
490-
var f = new FormData();
491-
f.append("fb_dtsg", fb_dtsg),
492-
f.append("confirmed", 1),
493-
f.append("__user", uid),
494-
f.append("__a", 1);
521+
let f = new FormData();
522+
f.append("fb_dtsg", fb_dtsg);
523+
f.append("confirmed", 1);
524+
f.append("__user", uid);
525+
f.append("__a", 1);
495526
await fetch(
496527
"https://www.facebook.com/ajax/groups/membership/leave.php?group_id=" +
497528
groupId +

scripts/fb_bulkDownload.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export default {
88
},
99
badges: [BADGES.comingSoon],
1010
description: {
11-
en: "",
12-
vi: "",
11+
en: "Combine all bulk download features on facebook into single page",
12+
vi: "Tổng hợp tất cả chức năng tải hàng loạt facebook",
1313
},
1414

1515
popupScript: {

scripts/fb_detectUnfriend.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>Useful Script - Detect unfriend facebook</title>
8+
9+
<script src="../popup/libs/swal2.min.js"></script>
10+
<link rel="stylesheet" href="../popup/libs/swal2.dark.css">
11+
12+
<link rel="stylesheet" href="./fb_detectUnfriend.less">
13+
<script src="../popup/libs/less.js"></script>
14+
</head>
15+
16+
<body>
17+
<script type="module" src="./fb_detectUnfriend_main.js"></script>
18+
</body>
19+
20+
</html>

scripts/fb_detectUnfriend.js

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { BADGES } from "./helpers/badge.js";
2+
13
export default {
24
icon: '<i class="fa-solid fa-user-large-slash fa-lg"></i>',
35
name: {
@@ -9,40 +11,17 @@ export default {
911
vi: "Xem ai đã huỷ kết bạn với bạn trên facebook",
1012
img: "",
1113
},
12-
14+
badges: [BADGES.new],
1315
changeLogs: {
14-
date: "description",
16+
"2024-05-28": "init",
1517
},
1618

17-
blackList: [],
18-
whiteList: [],
19-
2019
popupScript: {
21-
onEnable: () => {},
22-
onDisable: () => {},
23-
24-
onClick: () => {},
25-
},
26-
27-
contentScript: {
28-
onDocumentStart: (details) => {},
29-
onDocumentIdle: (details) => {},
30-
onDocumentEnd: (details) => {},
31-
32-
onClick: () => {},
33-
},
34-
35-
pageScript: {
36-
onDocumentStart: (details) => {},
37-
onDocumentIdle: (details) => {},
38-
onDocumentEnd: (details) => {},
39-
40-
onClick: () => {},
41-
},
20+
// onEnable: () => {},
21+
// onDisable: () => {},
4222

43-
backgroundScript: {
44-
onDocumentStart: (details, context) => {},
45-
onDocumentIdle: (details, context) => {},
46-
onDocumentEnd: (details, context) => {},
23+
onClick: () => {
24+
window.open("/scripts/fb_detectUnfriend.html", "_blank");
25+
},
4726
},
4827
};

scripts/fb_detectUnfriend.less

Whitespace-only changes.

scripts/fb_detectUnfriend_main.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { UfsGlobal } from "./content-scripts/ufs_global.js";
2+
import { fetchAllAddedFriendsSince, fetchAllFriends_ } from "./fb_GLOBAL.js";
3+
import { Storage } from "./helpers/utils.js";
4+
5+
let storageKey = "fb_detectUnfriend";
6+
7+
(async () => {
8+
// let cached = await Storage.get(storageKey);
9+
10+
let token =
11+
"EAABwzLixnjYBO8kDAvMmrY41ZBZAe1jIZBoiFZBHJRIZAZCZBLZBZBXpzdZAoZABVFYPZAm3KHtFTf2dsd3maTIB54Ypj1l7xZBtwb9kcH5UWf1LO2eTZBaS5aemtPpNbN3FCoTtokzWjokzb8mxUoydfv1uEIaALWWJZAKWoqM6pO5TU9zZB3hQaxzICEUlCuMxfIpQ2AqOYX0iJzTRCnRqZCc8BbLGI3t2zPQZDZD";
12+
if (token) {
13+
let friends = await fetchAllFriends_(token, ({ data, loaded, total }) => {
14+
UfsGlobal.DOM.notify({
15+
msg: `${loaded} / ${total} - ${data.length} Friends`,
16+
});
17+
});
18+
console.log(friends);
19+
}
20+
})();
21+
22+
async function fetchAllFriends(progressCallback) {
23+
let uid = await getYourUserId();
24+
let dtsg = await getFbdtsg();
25+
const allFriends = await fetchAllAddedFriendsSince(
26+
uid,
27+
dtsg,
28+
null,
29+
progressCallback
30+
);
31+
return allFriends;
32+
}

scripts/fb_fetchAllAddedFriends.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default {
2222

2323
try {
2424
setLoadingText("Đang lấy uid, token...");
25-
let uid = await getYourUserId();
25+
let uid = "100020477807351"; // await getYourUserId();
2626
let dtsg = await getFbdtsg();
2727

2828
setLoadingText("Đang tải thông tin...");

scripts/fb_messengerCount.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export default {
55
vi: "Facebook - Đếm tin nhắn",
66
},
77
description: {
8-
en: "Counts the number of messages sent from your Facebook Messenger account.",
9-
vi: "Đếm tin nhắn từ tài khoản Facebook Messenger của bạn.",
8+
en: "Let see who are your most active friends on facebook messenger",
9+
vi: "Xem bạn đã nhắn với ai nhiều nhất trên facebook messenger",
1010
},
1111

1212
popupScript: {

scripts/fb_messengerHistory.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { BADGES } from "./helpers/badge.js";
33
export default {
44
icon: '<i class="fa-solid fa-clock-rotate-left fa-lg"></i>',
55
name: {
6-
en: "Facebook messenger history",
7-
vi: "Facebook xem tin nhắn đầu tiên",
6+
en: "Facebook - Messenger history",
7+
vi: "Facebook - Xem tin nhắn đầu tiên",
88
},
99
description: {
1010
en: "View first message in facebook messenger",

0 commit comments

Comments
 (0)