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.
- package/.replit +14 -1
- package/Extra/Balancer.js +49 -0
- package/Extra/ExtraAddons.js +4 -4
- package/Extra/ExtraGetThread.js +27 -27
- package/Extra/ExtraScreenShot.js +3 -3
- package/Extra/ExtraUptimeRobot.js +4 -4
- package/Extra/Src/Change_Environment.js +2 -2
- package/Extra/Src/Check_Update.js +3 -3
- package/Extra/Src/Instant_Update.js +2 -2
- package/Extra/Src/Premium.js +7 -7
- package/Extra/Src/Release_Memory.js +7 -7
- package/Extra/Src/Websocket.js +12 -12
- package/Func/ClearCache.js +2 -2
- package/LICENSE +21 -0
- package/Language/index.json +22 -16
- package/Main.js +515 -349
- package/README.md +198 -0
- package/SECURITY.md +17 -0
- package/broadcast.js +44 -0
- package/index.js +215 -31
- package/logger.js +51 -122
- package/package.json +17 -15
- package/src/Dev_Horizon_Data.js +2 -2
- package/src/editMessage.js +45 -38
- package/src/listenMqtt.js +395 -373
- package/src/listenMqttV1.js +11 -11
- package/src/sendMessage.js +2 -2
- package/src/sendMqttMessage.js +51 -251
- package/src/setMessageReaction.js +64 -66
- package/src/shareContact.js +50 -75
- package/src/unsendMessage.js +32 -126
- package/src/unsendMqttMessage.js +66 -0
- package/test/data/shareAttach.js +146 -0
- package/test/data/something.mov +0 -0
- package/test/data/test.png +0 -0
- package/test/data/test.txt +7 -0
- package/test/example-config.json +18 -0
- package/test/test-page.js +140 -0
- package/test/test.js +385 -0
- package/test/testv2.js +3 -0
- package/utils.js +50 -11
- package/.cache/replit/env/latest +0 -49
- package/.cache/replit/env/latest.json +0 -1
- package/.cache/replit/modules/nodejs-20.res +0 -1
- package/.cache/replit/modules/replit.res +0 -1
- package/.cache/replit/modules.stamp +0 -0
- package/.cache/replit/toolchain.json +0 -1
- package/CountTime.json +0 -1
- package/src/followUser.js +0 -171
- package/src/getFacebookInfo.js +0 -69
- package/src/listenMqtt.jk +0 -732
- package/src/postStory.js +0 -122
- package/src/refreshFb_dtsg.js +0 -81
package/.cache/replit/env/latest
DELETED
@@ -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
|
-
};
|
package/src/getFacebookInfo.js
DELETED
@@ -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
|
-
};
|