fca-shankar-bot 20.2.0 → 20.3.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 (53) hide show
  1. package/.replit +14 -1
  2. package/Extra/Balancer.js +49 -0
  3. package/Extra/ExtraAddons.js +4 -4
  4. package/Extra/ExtraGetThread.js +27 -27
  5. package/Extra/ExtraScreenShot.js +3 -3
  6. package/Extra/ExtraUptimeRobot.js +4 -4
  7. package/Extra/Src/Change_Environment.js +2 -2
  8. package/Extra/Src/Check_Update.js +3 -3
  9. package/Extra/Src/Instant_Update.js +2 -2
  10. package/Extra/Src/Premium.js +7 -7
  11. package/Extra/Src/Release_Memory.js +7 -7
  12. package/Extra/Src/Websocket.js +12 -12
  13. package/Func/ClearCache.js +2 -2
  14. package/LICENSE +21 -0
  15. package/Language/index.json +22 -16
  16. package/Main.js +515 -349
  17. package/README.md +198 -0
  18. package/SECURITY.md +17 -0
  19. package/broadcast.js +44 -0
  20. package/index.js +215 -31
  21. package/logger.js +51 -122
  22. package/package.json +17 -15
  23. package/src/Dev_Horizon_Data.js +2 -2
  24. package/src/editMessage.js +45 -38
  25. package/src/listenMqtt.js +395 -373
  26. package/src/listenMqttV1.js +11 -11
  27. package/src/sendMessage.js +2 -2
  28. package/src/sendMqttMessage.js +51 -251
  29. package/src/setMessageReaction.js +64 -66
  30. package/src/shareContact.js +50 -75
  31. package/src/unsendMessage.js +32 -126
  32. package/src/unsendMqttMessage.js +66 -0
  33. package/test/data/shareAttach.js +146 -0
  34. package/test/data/something.mov +0 -0
  35. package/test/data/test.png +0 -0
  36. package/test/data/test.txt +7 -0
  37. package/test/example-config.json +18 -0
  38. package/test/test-page.js +140 -0
  39. package/test/test.js +385 -0
  40. package/test/testv2.js +3 -0
  41. package/utils.js +50 -11
  42. package/.cache/replit/env/latest +0 -49
  43. package/.cache/replit/env/latest.json +0 -1
  44. package/.cache/replit/modules/nodejs-20.res +0 -1
  45. package/.cache/replit/modules/replit.res +0 -1
  46. package/.cache/replit/modules.stamp +0 -0
  47. package/.cache/replit/toolchain.json +0 -1
  48. package/CountTime.json +0 -1
  49. package/src/followUser.js +0 -171
  50. package/src/getFacebookInfo.js +0 -69
  51. package/src/listenMqtt.jk +0 -732
  52. package/src/postStory.js +0 -122
  53. package/src/refreshFb_dtsg.js +0 -81
@@ -1,49 +0,0 @@
1
- declare -gx REPLIT_SUBCLUSTER=interactive
2
- declare -gx USER=runner
3
- declare -gx LOCALE_ARCHIVE=/usr/lib/locale/locale-archive
4
- declare -gx HOME=/home/runner
5
- declare -gx LANG=en_US.UTF-8
6
- declare -gx REPL_OWNER_ID=36817826
7
- declare -gx GIT_EDITOR=replit-git-editor
8
- declare -gx COLORTERM=truecolor
9
- declare -gx REPLIT_LD_AUDIT=/nix/store/1blcr36jzjnqs8xcnckviaqh1gky3mhw-replit_rtld_loader-1/rtld_loader.so
10
- declare -gx NIX_PATH=/home/runner/.nix-defexpr/channels
11
- declare -gx REPL_PUBKEYS='{"crosis-ci":"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=","crosis-ci:1":"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=","crosis-ci:latest":"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=","prod":"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=","prod:1":"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=","prod:2":"8uGN+vfszlnV93/HCSHlVLG0xddMlPkir1Ni4JKT4+w=","prod:3":"9+MCOSHQSQlcodXoot8dC8NLhc862nLkx1/VMsbY2h8=","prod:4":"8uGN+vfszlnV93/HCSHlVLG0xddMlPkir1Ni4JKT4+w=","prod:5":"9+MCOSHQSQlcodXoot8dC8NLhc862nLkx1/VMsbY2h8=","prod:latest":"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=","vault-goval-token":"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E=","vault-goval-token:1":"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E=","vault-goval-token:latest":"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E="}'
12
- declare -gx REPLIT_DEV_DOMAIN=5625da24-3aef-4ece-935c-f5db5bf56c89-00-2wg7nm0phkvcw.sisko.replit.dev
13
- declare -gx REPLIT_RTLD_LOADER=1
14
- declare -gx HOSTNAME=de72bbf8fd35
15
- declare -gx REPLIT_CONTAINER=gcr.io/marine-cycle-160323/repl-base:97433c06ca04972a1619dedd971cb3a93f4a5087
16
- declare -gx REPL_ID=5625da24-3aef-4ece-935c-f5db5bf56c89
17
- declare -gx XDG_CACHE_HOME=/home/runner/workspace/.cache
18
- declare -gx NIX_PROFILES='/nix/var/nix/profiles/default /home/runner/.nix-profile'
19
- declare -gx REPLIT_BASHRC=/nix/store/5m19p9rqshi95sxcjiq121b6saz8ra31-replit-bashrc/bashrc
20
- declare -gx DISPLAY=:0
21
- declare -gx LIBGL_DRIVERS_PATH=/nix/store/1z62rda9iqnxi4ryvgmyvfaj979hgk7s-mesa-24.2.8-drivers/lib/dri
22
- declare -gx __EGL_VENDOR_LIBRARY_FILENAMES=/nix/store/1z62rda9iqnxi4ryvgmyvfaj979hgk7s-mesa-24.2.8-drivers/share/glvnd/egl_vendor.d/50_mesa.json
23
- declare -gx REPLIT_PID1_FLAG_PREEVALED_SYSPKGS=1
24
- declare -gx REPL_IMAGE=gcr.io/marine-cycle-160323/nix:bf8590a3e2f0a8b70b7ca175eeed9074dffbfca9
25
- declare -gx REPL_HOME=/home/runner/workspace
26
- declare -gx REPLIT_ENVIRONMENT=production
27
- declare -gx DOCKER_CONFIG=/home/runner/workspace/.config/docker
28
- declare -gx NIX_PS1='\[\033[01;34m\]\w\[\033[00m\]\$ '
29
- declare -gx PROMPT_DIRTRIM=2
30
- declare -gx npm_config_prefix=/home/runner/workspace/.config/npm/node_global
31
- declare -gx NIXPKGS_ALLOW_UNFREE=1
32
- declare -gx REPLIT_PID1_VERSION=0.0.0-de7d797
33
- declare -gx XDG_DATA_DIRS=/nix/store/a04r09wqgcp9kmgfgmpbqmm20b7ffx7w-replit-runtime-path/share
34
- declare -gx REPLIT_CLI=/nix/store/qpzxppndmbvaj402j2im09kajky38k03-pid1-0.0.1/bin/replit
35
- declare -gx REPLIT_RIPPKGS_INDICES=/nix/store/l5gcmdp908sji4wchfp8csflhjcgnmm3-rippkgs-indices
36
- declare -gx REPLIT_NIX_CHANNEL=legacy
37
- declare -gx REPL_LANGUAGE=nix
38
- declare -gx REPLIT_CLUSTER=sisko
39
- declare -gx XDG_CONFIG_HOME=/home/runner/workspace/.config
40
- read -r _new_path <<< "/nix/store/s62s2lf3bdqd0iiprrf3xcks35vkyhpb-npx/bin:/home/runner/workspace/.config/npm/node_global/bin:/home/runner/workspace/node_modules/.bin:/nix/store/lyx73qs96hfazl77arnwllwckq9dy012-nodejs-20.18.1-wrapped/bin:/nix/store/917mlm9pvmkd4c62rvvhp2xyd2c9hyl5-bun-1.2.16/bin:/nix/store/z8s3r4vwf4r26g2d7shnw5lva6ihim8f-pnpm-9.15.0/bin:/nix/store/jcgdksj946l5l42c2y9ks2l4g6n74h3f-yarn-1.22.22/bin:/nix/store/2s17mrby0ph00z22rkabfs9vzpzx1r70-prettier-3.3.3/bin:/nix/store/5m92sb69w0w73pqa1na2x972yzdjahb6-pid1/bin:/nix/store/a04r09wqgcp9kmgfgmpbqmm20b7ffx7w-replit-runtime-path/bin:/home/runner/.nix-profile/bin:/home/runner/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
41
- #PATH=/nix/store/s62s2lf3bdqd0iiprrf3xcks35vkyhpb-npx/bin:/home/runner/workspace/.config/npm/node_global/bin:/home/runner/workspace/node_modules/.bin:/nix/store/lyx73qs96hfazl77arnwllwckq9dy012-nodejs-20.18.1-wrapped/bin:/nix/store/917mlm9pvmkd4c62rvvhp2xyd2c9hyl5-bun-1.2.16/bin:/nix/store/z8s3r4vwf4r26g2d7shnw5lva6ihim8f-pnpm-9.15.0/bin:/nix/store/jcgdksj946l5l42c2y9ks2l4g6n74h3f-yarn-1.22.22/bin:/nix/store/2s17mrby0ph00z22rkabfs9vzpzx1r70-prettier-3.3.3/bin:/nix/store/5m92sb69w0w73pqa1na2x972yzdjahb6-pid1/bin:/nix/store/a04r09wqgcp9kmgfgmpbqmm20b7ffx7w-replit-runtime-path/bin:/home/runner/.nix-profile/bin:/home/runner/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
42
- if [ -e "/run/replit/env/last" ]; then read -r _last_path < <(\grep '^#PATH=' /run/replit/env/last | cut -f 2 -d =); fi
43
- _user_components="$(\tr : $'\n' <<< "${PATH:-}" |\grep -xv -f <(\tr : $'\n' <<< "${_last_path}") |\tr $'\n' :)"
44
- declare -gx PATH="${_user_components}${_new_path}"
45
- declare -gx REPL_OWNER=shankarproject2
46
- declare -gx REPL_SLUG=workspace
47
- declare -gx REPLIT_DOMAINS=5625da24-3aef-4ece-935c-f5db5bf56c89-00-2wg7nm0phkvcw.sisko.replit.dev
48
- declare -gx XDG_DATA_HOME=/home/runner/workspace/.local/share
49
- declare -gx GIT_ASKPASS=replit-git-askpass
@@ -1 +0,0 @@
1
- {"environment":{"COLORTERM":"truecolor","DISPLAY":":0","DOCKER_CONFIG":"/home/runner/workspace/.config/docker","GIT_ASKPASS":"replit-git-askpass","GIT_EDITOR":"replit-git-editor","HOME":"/home/runner","HOSTNAME":"de72bbf8fd35","LANG":"en_US.UTF-8","LIBGL_DRIVERS_PATH":"/nix/store/1z62rda9iqnxi4ryvgmyvfaj979hgk7s-mesa-24.2.8-drivers/lib/dri","LOCALE_ARCHIVE":"/usr/lib/locale/locale-archive","NIXPKGS_ALLOW_UNFREE":"1","NIX_PATH":"/home/runner/.nix-defexpr/channels","NIX_PROFILES":"/nix/var/nix/profiles/default /home/runner/.nix-profile","NIX_PS1":"\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ ","PATH":"/nix/store/s62s2lf3bdqd0iiprrf3xcks35vkyhpb-npx/bin:/home/runner/workspace/.config/npm/node_global/bin:/home/runner/workspace/node_modules/.bin:/nix/store/lyx73qs96hfazl77arnwllwckq9dy012-nodejs-20.18.1-wrapped/bin:/nix/store/917mlm9pvmkd4c62rvvhp2xyd2c9hyl5-bun-1.2.16/bin:/nix/store/z8s3r4vwf4r26g2d7shnw5lva6ihim8f-pnpm-9.15.0/bin:/nix/store/jcgdksj946l5l42c2y9ks2l4g6n74h3f-yarn-1.22.22/bin:/nix/store/2s17mrby0ph00z22rkabfs9vzpzx1r70-prettier-3.3.3/bin:/nix/store/5m92sb69w0w73pqa1na2x972yzdjahb6-pid1/bin:/nix/store/a04r09wqgcp9kmgfgmpbqmm20b7ffx7w-replit-runtime-path/bin:/home/runner/.nix-profile/bin:/home/runner/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PROMPT_DIRTRIM":"2","REPLIT_BASHRC":"/nix/store/5m19p9rqshi95sxcjiq121b6saz8ra31-replit-bashrc/bashrc","REPLIT_CLI":"/nix/store/qpzxppndmbvaj402j2im09kajky38k03-pid1-0.0.1/bin/replit","REPLIT_CLUSTER":"sisko","REPLIT_CONTAINER":"gcr.io/marine-cycle-160323/repl-base:97433c06ca04972a1619dedd971cb3a93f4a5087","REPLIT_DEV_DOMAIN":"5625da24-3aef-4ece-935c-f5db5bf56c89-00-2wg7nm0phkvcw.sisko.replit.dev","REPLIT_DOMAINS":"5625da24-3aef-4ece-935c-f5db5bf56c89-00-2wg7nm0phkvcw.sisko.replit.dev","REPLIT_ENVIRONMENT":"production","REPLIT_LD_AUDIT":"/nix/store/1blcr36jzjnqs8xcnckviaqh1gky3mhw-replit_rtld_loader-1/rtld_loader.so","REPLIT_NIX_CHANNEL":"legacy","REPLIT_PID1_FLAG_PREEVALED_SYSPKGS":"1","REPLIT_PID1_VERSION":"0.0.0-de7d797","REPLIT_RIPPKGS_INDICES":"/nix/store/l5gcmdp908sji4wchfp8csflhjcgnmm3-rippkgs-indices","REPLIT_RTLD_LOADER":"1","REPLIT_SUBCLUSTER":"interactive","REPL_HOME":"/home/runner/workspace","REPL_ID":"5625da24-3aef-4ece-935c-f5db5bf56c89","REPL_IMAGE":"gcr.io/marine-cycle-160323/nix:bf8590a3e2f0a8b70b7ca175eeed9074dffbfca9","REPL_LANGUAGE":"nix","REPL_OWNER":"shankarproject2","REPL_OWNER_ID":"36817826","REPL_PUBKEYS":"{\"crosis-ci\":\"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=\",\"crosis-ci:1\":\"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=\",\"crosis-ci:latest\":\"7YlpcYh82oR9NSTtSYtR5jDL4onNzCGJGq6b+9CuZII=\",\"prod\":\"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=\",\"prod:1\":\"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=\",\"prod:2\":\"8uGN+vfszlnV93/HCSHlVLG0xddMlPkir1Ni4JKT4+w=\",\"prod:3\":\"9+MCOSHQSQlcodXoot8dC8NLhc862nLkx1/VMsbY2h8=\",\"prod:4\":\"8uGN+vfszlnV93/HCSHlVLG0xddMlPkir1Ni4JKT4+w=\",\"prod:5\":\"9+MCOSHQSQlcodXoot8dC8NLhc862nLkx1/VMsbY2h8=\",\"prod:latest\":\"tGsjlu/BJvWTgvMaX7acuUb7AO1dXOrRiuk7y083RFE=\",\"vault-goval-token\":\"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E=\",\"vault-goval-token:1\":\"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E=\",\"vault-goval-token:latest\":\"D5jJoMx1Ml54HM92NLgXl+MzptwDqbSsfyFG6f52g9E=\"}","REPL_SLUG":"workspace","USER":"runner","XDG_CACHE_HOME":"/home/runner/workspace/.cache","XDG_CONFIG_HOME":"/home/runner/workspace/.config","XDG_DATA_DIRS":"/nix/store/a04r09wqgcp9kmgfgmpbqmm20b7ffx7w-replit-runtime-path/share","XDG_DATA_HOME":"/home/runner/workspace/.local/share","__EGL_VENDOR_LIBRARY_FILENAMES":"/nix/store/1z62rda9iqnxi4ryvgmyvfaj979hgk7s-mesa-24.2.8-drivers/share/glvnd/egl_vendor.d/50_mesa.json","npm_config_prefix":"/home/runner/workspace/.config/npm/node_global"}}
@@ -1 +0,0 @@
1
- {"type":"resolve","resolvedModuleId":"nodejs-20","inputHash":"","resolutionPath":["nodejs-20"],"error":"","Changed":true}
@@ -1 +0,0 @@
1
- {"type":"resolve","resolvedModuleId":"replit","inputHash":"","resolutionPath":["replit"],"error":"","Changed":true}
File without changes
@@ -1 +0,0 @@
1
- {"runs":[{"id":"module:nodejs-20/runner:nodeJS","name":"Node.js","fileParam":true,"language":"javascript","fileTypeAttrs":{},"displayVersion":"20.18.1","run":{"command":{"args":["sh","-c","/nix/store/lyx73qs96hfazl77arnwllwckq9dy012-nodejs-20.18.1-wrapped/bin/node $file"]}},"defaultEntrypoints":["index.js","main.js"]}],"debuggers":[{"id":"module:nodejs-20/debugger:nodeDAP","name":"Node DAP","fileParam":true,"language":"javascript","fileTypeAttrs":{}}],"languageServers":[{"id":"module:nodejs-20/languageServer:typescript-language-server","name":"TypeScript Language Server","language":"javascript","fileTypeAttrs":{"extensions":[".js",".jsx",".ts",".tsx",".mjs",".mts",".cjs",".cts",".es6",".json"]},"config":{"startCommand":{"args":["sh","-c","/nix/store/9cd76kqpml5gkw8jjnjx0flwdf0a1gv1-typescript-language-server-4.3.3/bin/typescript-language-server --stdio"]},"initializationOptionsJson":"{\"tsserver\":{\"fallbackPath\":\"/nix/store/g6ns6m42fvybfzb2xjppcsfmb6k0jv5x-typescript-5.6.3/lib/node_modules/typescript/lib\"}}"},"displayVersion":"4.3.3"},{"id":"module:replit/languageServer:dotreplit-lsp","name":".replit LSP","language":"dotreplit","fileTypeAttrs":{},"config":{"startCommand":{"args":["sh","-c","/nix/store/bz8k1njgmm249fr5krhaq1jsi7jrhx5k-taplo-0.patched/bin/taplo lsp -c /nix/store/2zhz6va20gizdlqmvryab9b7pn6dp0v1-taplo-config.toml stdio"]}}}],"packagers":[{"id":"module:nodejs-20/packager:upmNodejs","name":"Node.js packager (npm, yarn, pnpm, bun)","language":"nodejs","packageSearch":true,"guessImports":true}],"formatters":[{"id":"module:nodejs-20/formatter:prettier","name":"Prettier","startCommand":{"args":["/nix/store/070ycjyhpfv8n895zq7yz6z0pp57g0q9-run-prettier/bin/run-prettier"],"lifecycle":"STDIN","splitStderr":true},"fileTypeAttrs":{"extensions":[".js",".jsx",".ts",".tsx",".json",".html"]},"displayVersion":"3.3.3","supportsRangeFormatting":true},{"id":"module:nodejs-20/languageServer:typescript-language-server","name":"TypeScript Language Server","fileTypeAttrs":{"extensions":[".js",".jsx",".ts",".tsx",".mjs",".mts",".cjs",".cts",".es6",".json"]},"displayVersion":"4.3.3"},{"id":"module:replit/languageServer:dotreplit-lsp","name":".replit LSP","fileTypeAttrs":{}}]}
package/CountTime.json DELETED
@@ -1 +0,0 @@
1
- 9786475.120597376
package/src/followUser.js DELETED
@@ -1,171 +0,0 @@
1
- "use strict";
2
-
3
- const utils = require("../utils");
4
- const log = require("npmlog");
5
-
6
- module.exports = function(defaultFuncs, api, ctx) {
7
-
8
- const methods = {
9
- graphql: async function(userID) {
10
- const form = {
11
- av: ctx.userID,
12
- fb_api_caller_class: "RelayModern",
13
- fb_api_req_friendly_name: "CometUserFollowMutation",
14
- doc_id: "7111027605271938",
15
- variables: JSON.stringify({
16
- input: {
17
- attribution_id_v2: "ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,via_cold_start," + Date.now(),
18
- is_tracking_encrypted: true,
19
- subscribe_location: "PROFILE",
20
- subscribee_id: userID,
21
- tracking: null,
22
- actor_id: ctx.userID,
23
- client_mutation_id: Math.round(Math.random() * 19).toString()
24
- },
25
- scale: 1
26
- })
27
- };
28
-
29
- return defaultFuncs
30
- .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
31
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
32
- },
33
-
34
- mqtt: async function(userID) {
35
- return new Promise((resolve, reject) => {
36
- const form = {
37
- av: ctx.userID,
38
- fb_api_req_friendly_name: "follow",
39
- fb_api_caller_class: "RelayModern",
40
- doc_id: "4619896381447695",
41
- variables: JSON.stringify({
42
- input: {
43
- subscribe_location: "PROFILE",
44
- subscribee_id: userID,
45
- actor_id: ctx.userID,
46
- client_mutation_id: utils.getSignatureID()
47
- }
48
- })
49
- };
50
-
51
- try {
52
- ctx.mqttClient.publish("/ls_req", JSON.stringify({
53
- app_id: "2220391788200892",
54
- payload: JSON.stringify({
55
- tasks: [{
56
- label: 'follow_user',
57
- payload: JSON.stringify(form),
58
- task_id: Math.random() * 1001 << 0
59
- }],
60
- epoch_id: utils.generateOfflineThreadingID()
61
- }),
62
- request_id: ++ctx.req_ID,
63
- type: 3
64
- }));
65
-
66
- ctx.callback_Task[ctx.req_ID] = {
67
- callback: (err, data) => {
68
- if (err) reject(err);
69
- else resolve(data);
70
- },
71
- type: "followUser"
72
- };
73
- } catch (error) {
74
- reject(error);
75
- }
76
- });
77
- },
78
-
79
- ajax: async function(userID) {
80
- const form = {
81
- user_id: userID,
82
- location: 1,
83
- feed_story: true,
84
- fb_api_caller_class: "RelayModern",
85
- fb_api_req_friendly_name: "follow"
86
- };
87
-
88
- return defaultFuncs
89
- .post('https://www.facebook.com/ajax/follow/follow_profile.php', ctx.jar, form)
90
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
91
- },
92
-
93
- url: async function(userID) {
94
- const form = {
95
- profile_id: userID,
96
- location: 'profile',
97
- feed_story: true,
98
- __a: 1,
99
- fb_dtsg: ctx.fb_dtsg,
100
- jazoest: ctx.jazoest
101
- };
102
-
103
- return defaultFuncs
104
- .post(`https://www.facebook.com/profile/follow_profile/?id=${userID}`, ctx.jar, form)
105
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
106
- }
107
- };
108
-
109
- return function followUser(userID, callback) {
110
- let resolveFunc = function() {};
111
- let rejectFunc = function() {};
112
- const returnPromise = new Promise((resolve, reject) => {
113
- resolveFunc = resolve;
114
- rejectFunc = reject;
115
- });
116
-
117
- if (!callback) {
118
- callback = function(err, data) {
119
- if (err) return rejectFunc(err);
120
- resolveFunc(data);
121
- };
122
- }
123
-
124
- // Validate input
125
- if (!userID || isNaN(userID)) {
126
- const error = new Error("Invalid userID. Must be numeric string or number");
127
- log.error("followUser", error);
128
- callback(error);
129
- return returnPromise;
130
- }
131
-
132
- // Danh sách các phương thức theo thứ tự ưu tiên
133
- const methodOrder = ['graphql', 'mqtt', 'ajax', 'url'];
134
- let currentMethodIndex = 0;
135
-
136
- const tryNextMethod = async () => {
137
- if (currentMethodIndex >= methodOrder.length) {
138
- const error = new Error("All follow methods failed");
139
- log.error("followUser", error);
140
- return callback(error);
141
- }
142
-
143
- const currentMethod = methodOrder[currentMethodIndex];
144
- log.info("followUser", `Trying method: ${currentMethod}`);
145
-
146
- try {
147
- const result = await methods[currentMethod](userID);
148
-
149
- if (result && !result.error) {
150
- log.info("followUser", `Successfully followed user ${userID} using ${currentMethod} method`);
151
- return callback(null, {
152
- success: true,
153
- userID: userID,
154
- method: currentMethod,
155
- timestamp: Date.now()
156
- });
157
- } else {
158
- throw new Error(result.error || "Unknown error");
159
- }
160
- } catch (error) {
161
- log.error("followUser", `${currentMethod} method failed:`, error);
162
- currentMethodIndex++;
163
- return tryNextMethod();
164
- }
165
- };
166
-
167
- // Bắt đầu với phương thức đầu tiên
168
- tryNextMethod();
169
- return returnPromise;
170
- };
171
- };
@@ -1,69 +0,0 @@
1
- "use strict";
2
- var utils = require("../utils");
3
- var log = require("npmlog");
4
-
5
- module.exports = function(defaultFuncs, api, ctx) {
6
- return function getFacebookInfo(url, callback) {
7
- var resolveFunc = () => {};
8
- var rejectFunc = () => {};
9
- var returnPromise = new Promise((resolve, reject) => {
10
- resolveFunc = resolve;
11
- rejectFunc = reject;
12
- });
13
-
14
- if (!callback) {
15
- callback = (err, data) => {
16
- if (err) return rejectFunc(err);
17
- resolveFunc(data);
18
- };
19
- }
20
-
21
- function extractID(url) {
22
- const patterns = [
23
- /(?:photos|videos|posts|stories)(?:\/|%2F)(\d+)/i,
24
- /fbid=(\d+)/i,
25
- /\/(\d+)/
26
- ];
27
-
28
- for (let pattern of patterns) {
29
- let match = url.match(pattern);
30
- if (match) return match[1];
31
- }
32
- return null;
33
- }
34
-
35
- const form = {
36
- doc_id: "5587632691339264",
37
- variables: JSON.stringify({
38
- feedbackSource: 0,
39
- id: extractID(url),
40
- scale: 1
41
- })
42
- };
43
-
44
- defaultFuncs
45
- .post("https://www.facebook.com/api/graphql/", ctx.jar, form)
46
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
47
- .then(res => {
48
- if (!res.data) throw {error: "Invalid response"};
49
-
50
- let info = {
51
- id: res.data.node.id,
52
- text: res.data.node.message?.text,
53
- media: res.data.node.attachments?.map(att => ({
54
- type: att.media.__typename,
55
- url: att.media.playable_url || att.media.image?.uri
56
- })) || [],
57
- author: {
58
- id: res.data.node.author?.id,
59
- name: res.data.node.author?.name
60
- }
61
- };
62
-
63
- return callback(null, info);
64
- })
65
- .catch(callback);
66
-
67
- return returnPromise;
68
- };
69
- };