├── .github └── workflows │ └── codeql-analysis.yml ├── Instagram2016_white-(64px).png ├── LICENSE ├── README.md ├── SECURITY.md ├── bomkomen.js ├── bomlike.js ├── bomlikeall ├── botlike.js ├── botlike2.js ├── cdl.js ├── cek.js ├── dellallphoto.js ├── fah.js ├── fft.js ├── fftasli.js ├── fftauto.js ├── fftdm.js ├── fftold.js ├── fftsleep.js ├── fl.js ├── flaauto.js ├── flm.js ├── flmauto.js ├── index.js ├── komen.txt ├── komenlike.js ├── likekomen.js ├── node_modules.zip ├── package-lock.json ├── package.json ├── unfollall.js ├── unfollnotfollback.js └── unli_bom.txt /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '22 14 * * 2' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | language: [ 'javascript' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 33 | # Learn more: 34 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 35 | 36 | steps: 37 | - name: Checkout repository 38 | uses: actions/checkout@v2 39 | 40 | # Initializes the CodeQL tools for scanning. 41 | - name: Initialize CodeQL 42 | uses: github/codeql-action/init@v1 43 | with: 44 | languages: ${{ matrix.language }} 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 51 | # If this step fails, then you should remove it and run the build manually (see below) 52 | - name: Autobuild 53 | uses: github/codeql-action/autobuild@v1 54 | 55 | # ℹ️ Command-line programs to run using the OS shell. 56 | # 📚 https://git.io/JvXDl 57 | 58 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 59 | # and modify them (or add more) to build your code if your project 60 | # uses a compiled language 61 | 62 | #- run: | 63 | # make bootstrap 64 | # make release 65 | 66 | - name: Perform CodeQL Analysis 67 | uses: github/codeql-action/analyze@v1 68 | -------------------------------------------------------------------------------- /Instagram2016_white-(64px).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClassNightcore/worktools/d62b5a55f166351ee6a6c63459a160ad5c053d40/Instagram2016_white-(64px).png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 TeamSyntaxRevolution 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![Image](Instagram2016_white-(64px).png) Instagram NODE JS API V1 2 |
3 | 4 | ## How to install (DEFAULT or BASIC USAGE) 5 | * git clone https://github.com/ikiganteng/bot-igeh.git 6 | * cd bot-igeh 7 | * unzip node_modules.zip 8 | * npm install https://github.com/huttarichard/instagram-private-api 9 | * npm audit fix 10 | * ls 11 | * Then select the tool you want to use! 12 | * node filename 13 |
14 | 15 | ## For PC/Laptop ONLY: 16 | * Download GIT for Windows (https://git-scm.com/download/) *Choose WIN & 32bit/64bit 17 | * Download NodeJS (https://nodejs.org/en/download/) *Choose .msi & 32bit/64bit 18 | * INSTALL GIT for Windows & NodeJS 19 | * Download File on Github (https://github.com/ikiganteng/bot-igeh.git) 20 | * Extract File bot-igeh and enter the folder 21 | * Right Click on Mouse, Then Select "Git Bash Here" (Make sure you are in the bot-igeh folder!!!) 22 | * Then type: unzip node_modules.zip 23 | * npm install https://github.com/huttarichard/instagram-private-api 24 | * npm audit fix 25 | * To View The Contents Of a folder in bash, type: "ls" (without "") 26 | * Then select the tool you want to use! 27 | * node filename 28 |
29 | 30 | ## For TERMUX ONLY: 31 | * Install Termux (PlayStore) 32 | * Open Termux and Wait for Automatic Install of Termux. 33 | * pkg install git 34 | * pkg install nodejs 35 | * git clone https://github.com/ikiganteng/bot-igeh.git 36 | * cd bot-igeh 37 | * unzip node_modules.zip 38 | * npm install https://github.com/huttarichard/instagram-private-api 39 | * npm audit fix 40 | * ls 41 | * Then select the tool you want to use! 42 | * node filename 43 | 44 |
45 | 46 | ## For CodeAnywhere/VPS (Centos): 47 | * sudo yum -y update 48 | * sudo yum -y install git 49 | * sudo yum -y install unzip 50 | * sudo yum -y install screen 51 | * curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash - 52 | * sudo yum -y install nodejs 53 | 54 | =========== Basic Usage ============== 55 | * git clone https://github.com/ikiganteng/bot-igeh.git 56 | * cd bot-igeh 57 | * unzip node_modules.zip 58 | * npm install https://github.com/huttarichard/instagram-private-api 59 | * npm audit fix 60 | * ls 61 | * Then select the tool you want to use! 62 | * node filename 63 | 64 | Kita buat session dulu ya! 65 | * screen -S Instagram1 (Instagram1 = Nama Session) 66 | Keluar dari session 67 | * CTRL + A + D 68 | Jika ingin mngecek prosesnya / kembali ke session Instagram1 69 | * screen -r Instagram1 70 | Kita buat session baru dulu ya! 71 | * screen -S Instagram2 (Instagram2 = Nama Session Baru) 72 | Keluar dari session 73 | * CTRL + A + D 74 | Jika ingin mngecek prosesnya / kembali ke session Instagram2 75 | * screen -r Instagram2 76 | Cara memberhentikan/stop tools 77 | * screen -S Instagram1 -X kill (Instagram1 = Nama Session yang ingin di berhentikan) 78 | Untuk melihat list session yang sedang berjalan 79 | * screen -list 80 |
81 | 82 | ## For C9/VPS (Ubuntu & Debian): 83 | * sudo apt update 84 | * sudo apt install git 85 | * sudo apt install unzip 86 | * sudo apt install screen 87 | * sudo apt install build-essential libssl-dev 88 | * curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash 89 | * source ~/.bashrc 90 | * nvm install 10.7.0 91 | 92 | =========== Basic Usage ============== 93 | * git clone https://github.com/ikiganteng/bot-igeh.git 94 | * cd bot-igeh 95 | * unzip node_modules.zip 96 | * nvm use 10.7.0 97 | * npm install https://github.com/huttarichard/instagram-private-api 98 | * npm audit fix 99 | * ls 100 | * Then select the tool you want to use! 101 | * node filename 102 | * untuk buat session sama seperti VPS Centos 103 |
104 | 105 | ## INFORMATION: 106 | * dellallphoto "DELETE ALL POST IG" (WORK & TESTED) 107 | * fl "SELECTED WITH TARGET IG" (WORK & TESTED) 108 | * fah "SELECTED WITH HASTAG IG" (WORK & TESTED) 109 | * fftsleep "SELECTED WITH TARGET IG" (WORK & TESTED) 110 | * fftdm "SELECTED WITH TARGET IG" (WORK & TESTED) 111 | * fftauto "SELECTED WITH TARGET IG" (WORK & TESTED) 112 | * fft "SELECTED WITH TARGET IG" (WORK & TESTED) 113 | * fftold "SELECTED WITH TARGET IG" (WORK & TESTED) 114 | * fftasli "SELECTED WITH TARGET IG" (WORK & TESTED) 115 | * flaauto "SELECTED WITH LOCATION IG" (WORK & TESTED) 116 | * flmauto "SELECTED WITH MEDIA IG" (WORK & TESTED) 117 | * unfollall "UNFOLOW ALL FOLLOWING IG" (WORK & TESTED) 118 | * unfollnotfollback "UNFOLLOW NOT FOLLOWBACK IG" (WORK & TESTED) 119 | * botlike "LIKE/LOVE TIMELINE IG" (WORK & TESTED) 120 | * botlike2 "LIKE/LOVE TIMELINE IG" (WORK & TESTED) 121 | * bomlike "BOM LIKE POST TARGET" (WORK & TESTED) 122 | * bomkomen "BOM KOMEN POST TARGET" (WORK & TESTED) 123 | * likekomen "SELECTED WITH POST TARGET" (WORK & TESTED) 124 | * komenlike "SELECTED WITH HASTAG TARGET" (WORK & TESTED) 125 | * cdl "SELECTED WITH TARGET IG" (WORK & TESTED) 126 | * cek "CHECK USERNAME IG TARGET" (WORK & TESTED) 127 | 128 | 129 |
130 | 131 | ## WARNING 132 | "Use tools at your own risk!!!" 133 | "Use this Tool for personal use, not for sale!!!" 134 | "Make sure your account is not in private to use this tool!!!" 135 |
136 | 137 | ## UPDATE 138 | 1. Fix Error No Detect Followers Target 139 | 2. Input Target/delay Manual (ITTYW) 140 | 3. + Improvements In Display Program 141 | 4. FFTAUTO & FFT must make file komen.txt and save your comment in there 142 | 5. BOMLIKE & BOMKOMEN if you want unlimited read unli_bom.txt 143 | 6. FFTSLEEP with random sleep 144 |
145 | 146 | ## SPECIAL THANKS TO: 147 | * Code by Ccocot (ccocot@bc0de.net) 148 | * Fixing and Testing by Putu Syntax 149 | * SGB TEAM REBORN 150 | * BC0DE.NET | NAONLAH.NET - WingKocoli 151 | * Ilyasa Fathur Rahman (Tutorial dari VPS Centos) 152 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /bomkomen.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | const Login = async function(User){ 70 | 71 | const Device = new Client.Device(User.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | 75 | try { 76 | await Client.Session.create(Device, Storage, User.username, User.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | 83 | } 84 | const Target = async function(username){ 85 | const url = 'https://www.instagram.com/'+username+'/' 86 | const option = { 87 | url: url, 88 | method: 'GET' 89 | } 90 | try{ 91 | const account = await rp(option); 92 | const data = S(account).between('').s 93 | const json = JSON.parse(data); 94 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 95 | return Promise.reject('Target is private Account'); 96 | } else { 97 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 98 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 99 | return Promise.resolve({id,followers}); 100 | } 101 | } catch (err){ 102 | return Promise.reject(err); 103 | } 104 | 105 | } 106 | 107 | const Media = async function(session, id){ 108 | const Media = new Client.Feed.UserMedia(session, id); 109 | 110 | try { 111 | const Poto = []; 112 | var cursor; 113 | if (cursor) Media.setCursor(cursor); 114 | const getPoto = await Media.get(); 115 | await Promise.all(getPoto.map(async(poto) => { 116 | Poto.push({ 117 | id:poto.id, 118 | link:poto.params.webLink 119 | }); 120 | })) 121 | cursor = await Media.getCursor() 122 | return Promise.resolve(Poto); 123 | } catch (err){ 124 | return Promise.reject(err); 125 | } 126 | } 127 | 128 | async function ngeComment(session, id, text){ 129 | try { 130 | await Client.Comment.create(session, id, text); 131 | return true; 132 | } catch(e){ 133 | return false; 134 | } 135 | } 136 | 137 | const Excute = async function(User, TargetUsername, Text, sleep, mysyntx){ 138 | try { 139 | 140 | /** TRY TO LOGIN **/ 141 | console.log('\n'); 142 | console.log('[?] Try to Login . . .'); 143 | const doLogin = await Login(User); 144 | console.log(chalk`{bold.green [!] Login Succsess!}`); 145 | 146 | /** TRY TO GET ALL MEDIA **/ 147 | console.log('[?] Try to get Media . . .') 148 | const getTarget = await Target(TargetUsername); 149 | var getMedia = await Media(doLogin.session, getTarget.id); 150 | console.log(chalk`{bold.green [!] Succsess to get Media From [${TargetUsername}] }\n`); 151 | getMedia = _.chunk(getMedia, mysyntx); 152 | 153 | /** TRY TO DELETE ALL MEDIA **/ 154 | for (let i = 0; i < getMedia.length; i++) { 155 | console.log('[?] Try to Like Photo/Delay \n') 156 | await Promise.all(getMedia[i].map(async(media) => { 157 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 158 | const ngeDo = await ngeComment(doLogin.session, media.id, ranText) 159 | const PrintOut = chalk`${ngeDo ? chalk`{bold.green Sukses Komen}` : chalk`{bold.red Gagal Komen}`}` 160 | console.log(chalk`> ${media.link} => ${PrintOut} [${ranText}]`); 161 | })) 162 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 163 | await delay(sleep) 164 | } 165 | console.log(chalk`{bold.green [+] Bom Komen Post Succsess}`) 166 | } catch (err) { 167 | console.log(err); 168 | } 169 | } 170 | console.log(chalk` 171 | {bold.cyan 172 | —————————————————— [INFORMATION] ———————————————————— 173 | 174 | [?] {bold.green BOM KOMEN POST TARGET *SET SLEEP!} 175 | 176 | —————————————————— [THANKS TO] ———————————————————— 177 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 178 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 179 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 180 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 181 | ————————————————————————————————————————————————————— 182 | What's new? 183 | 1. Input Target/delay Manual (ITTYW) 184 | —————————————————————————————————————————————————————} 185 | `); 186 | //ikiganteng 187 | inquirer.prompt(User) 188 | .then(answers => { 189 | var text = answers.text.split('|'); 190 | Excute({ 191 | username:answers.username, 192 | password:answers.password 193 | },answers.target,text,answers.sleep,answers.mysyntx); 194 | }) 195 | -------------------------------------------------------------------------------- /bomlike.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'mysyntx', 41 | message:'[>] Input Total of Target You Want (ITTYW):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Use Number Only!'; 46 | } 47 | }, 48 | { 49 | type:'input', 50 | name:'sleep', 51 | message:'[>] Insert Sleep (MiliSeconds):', 52 | validate: function(value){ 53 | value = value.match(/[0-9]/); 54 | if (value) return true; 55 | return 'Delay is number'; 56 | } 57 | } 58 | ] 59 | 60 | const Login = async function(User){ 61 | 62 | const Device = new Client.Device(User.username); 63 | const Storage = new Client.CookieMemoryStorage(); 64 | const session = new Client.Session(Device, Storage); 65 | 66 | try { 67 | await Client.Session.create(Device, Storage, User.username, User.password) 68 | const account = await session.getAccount(); 69 | return Promise.resolve({session,account}); 70 | } catch (err) { 71 | return Promise.reject(err); 72 | } 73 | 74 | } 75 | const Target = async function(username){ 76 | const url = 'https://www.instagram.com/'+username+'/' 77 | const option = { 78 | url: url, 79 | method: 'GET' 80 | } 81 | try{ 82 | const account = await rp(option); 83 | const data = S(account).between('').s 84 | const json = JSON.parse(data); 85 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 86 | return Promise.reject('Target is private Account'); 87 | } else { 88 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 89 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 90 | return Promise.resolve({id,followers}); 91 | } 92 | } catch (err){ 93 | return Promise.reject(err); 94 | } 95 | 96 | } 97 | 98 | const Media = async function(session, id){ 99 | const Media = new Client.Feed.UserMedia(session, id); 100 | 101 | try { 102 | const Poto = []; 103 | var cursor; 104 | if (cursor) Media.setCursor(cursor); 105 | const getPoto = await Media.get(); 106 | await Promise.all(getPoto.map(async(poto) => { 107 | Poto.push({ 108 | id:poto.id, 109 | link:poto.params.webLink 110 | }); 111 | })) 112 | cursor = await Media.getCursor() 113 | return Promise.resolve(Poto); 114 | } catch (err){ 115 | return Promise.reject(err); 116 | } 117 | } 118 | 119 | async function ngeLike(session, id){ 120 | try{ 121 | await Client.Like.create(session, id) 122 | return true; 123 | } catch(e) { 124 | return false; 125 | } 126 | } 127 | 128 | const Excute = async function(User, TargetUsername, mysyntx, sleep){ 129 | try { 130 | 131 | /** TRY TO LOGIN **/ 132 | console.log('\n'); 133 | console.log('[?] Try to Login . . .'); 134 | const doLogin = await Login(User); 135 | console.log(chalk`{bold.green [!] Login Succsess!}`); 136 | 137 | /** TRY TO GET ALL MEDIA **/ 138 | console.log('[?] Try to get Media . . .') 139 | const getTarget = await Target(TargetUsername); 140 | var getMedia = await Media(doLogin.session, getTarget.id); 141 | console.log(chalk`{bold.green [!] Succsess to get Media From [${TargetUsername}] }\n`); 142 | getMedia = _.chunk(getMedia, mysyntx); 143 | 144 | /** TRY TO DELETE ALL MEDIA **/ 145 | for (let i = 0; i < getMedia.length; i++) { 146 | console.log('[?] Try to Like Photo/Delay \n') 147 | await Promise.all(getMedia[i].map(async(media) => { 148 | const doDelete = await ngeLike(doLogin.session, media.id); 149 | const PrintOut = chalk`> ${media.link} => ${doDelete ? chalk`{bold.green Sukses Like}` : chalk`{bold.red Gagal Like}`}` 150 | console.log(PrintOut); 151 | })) 152 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 153 | await delay(sleep) 154 | } 155 | console.log(chalk`{bold.green [+] Bom Like Post Succsess}`) 156 | } catch (err) { 157 | console.log(err); 158 | } 159 | } 160 | console.log(chalk` 161 | {bold.cyan 162 | —————————————————— [INFORMATION] ———————————————————— 163 | 164 | [?] {bold.green BOM LIKE POST TARGET *SET SLEEP!} 165 | 166 | —————————————————— [THANKS TO] ———————————————————— 167 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 168 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 169 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 170 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 171 | ————————————————————————————————————————————————————— 172 | What's new? 173 | 1. Input Target/delay Manual (ITTYW) 174 | —————————————————————————————————————————————————————} 175 | `); 176 | //ikiganteng 177 | inquirer.prompt(User) 178 | .then(answers => { 179 | Excute({ 180 | username:answers.username, 181 | password:answers.password 182 | },answers.target,answers.mysyntx,answers.sleep); 183 | }) 184 | -------------------------------------------------------------------------------- /bomlikeall: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'mysyntx', 41 | message:'[>] Input Total of Target You Want (ITTYW):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Use Number Only!'; 46 | } 47 | }, 48 | { 49 | type:'input', 50 | name:'sleep', 51 | message:'[>] Insert Sleep (MiliSeconds):', 52 | validate: function(value){ 53 | value = value.match(/[0-9]/); 54 | if (value) return true; 55 | return 'Delay is number'; 56 | } 57 | } 58 | ] 59 | 60 | const Login = async function(User){ 61 | 62 | const Device = new Client.Device(User.username); 63 | const Storage = new Client.CookieMemoryStorage(); 64 | const session = new Client.Session(Device, Storage); 65 | 66 | try { 67 | await Client.Session.create(Device, Storage, User.username, User.password) 68 | const account = await session.getAccount(); 69 | return Promise.resolve({session,account}); 70 | } catch (err) { 71 | return Promise.reject(err); 72 | } 73 | 74 | } 75 | const Target = async function(username){ 76 | const url = 'https://www.instagram.com/'+username+'/' 77 | const option = { 78 | url: url, 79 | method: 'GET' 80 | } 81 | try{ 82 | const account = await rp(option); 83 | const data = S(account).between('').s 84 | const json = JSON.parse(data); 85 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 86 | return Promise.reject('Target is private Account'); 87 | } else { 88 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 89 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 90 | return Promise.resolve({id,followers}); 91 | } 92 | } catch (err){ 93 | return Promise.reject(err); 94 | } 95 | 96 | } 97 | 98 | const Media = async function(session, id){ 99 | const Media = new Client.Feed.UserMedia(session, id); 100 | 101 | try { 102 | const Poto = []; 103 | var cursor; 104 | do { 105 | if (cursor) Media.setCursor(cursor); 106 | const getPoto = await Media.get(); 107 | await Promise.all(getPoto.map(async(poto) => { 108 | Poto.push({ 109 | id:poto.id, 110 | link:poto.params.webLink 111 | }); 112 | })) 113 | cursor = await Media.getCursor() 114 | } while (Media.isMoreAvailable()); 115 | return Promise.resolve(Poto); 116 | } catch (err){ 117 | return Promise.reject(err); 118 | } 119 | } 120 | 121 | async function ngeLike(session, id){ 122 | try{ 123 | await Client.Like.create(session, id) 124 | return true; 125 | } catch(e) { 126 | return false; 127 | } 128 | } 129 | 130 | const Excute = async function(User, TargetUsername, mysyntx, sleep){ 131 | try { 132 | 133 | /** TRY TO LOGIN **/ 134 | console.log('\n'); 135 | console.log('[?] Try to Login . . .'); 136 | const doLogin = await Login(User); 137 | console.log(chalk`{bold.green [!] Login Succsess!}`); 138 | 139 | /** TRY TO GET ALL MEDIA **/ 140 | console.log('[?] Try to get Media . . .') 141 | const getTarget = await Target(TargetUsername); 142 | var getMedia = await Media(doLogin.session, getTarget.id); 143 | console.log(chalk`{bold.green [!] Succsess to get Media From [${TargetUsername}] }\n`); 144 | getMedia = _.chunk(getMedia, mysyntx); 145 | 146 | /** TRY TO DELETE ALL MEDIA **/ 147 | for (let i = 0; i < getMedia.length; i++) { 148 | console.log('[?] Try to Like Photo/Delay \n') 149 | await Promise.all(getMedia[i].map(async(media) => { 150 | const doDelete = await ngeLike(doLogin.session, media.id); 151 | const PrintOut = chalk`> ${media.link} => ${doDelete ? chalk`{bold.green Sukses Like}` : chalk`{bold.red Gagal Like}`}` 152 | console.log(PrintOut); 153 | })) 154 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 155 | await delay(sleep) 156 | } 157 | console.log(chalk`{bold.green [+] Bom Like Post Succsess}`) 158 | } catch (err) { 159 | console.log(err); 160 | } 161 | } 162 | console.log(chalk` 163 | {bold.cyan 164 | —————————————————— [INFORMATION] ———————————————————— 165 | [?] {bold.green BOM LIKE POST TARGET *SET SLEEP!} 166 | —————————————————— [THANKS TO] ———————————————————— 167 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 168 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 169 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 170 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 171 | ————————————————————————————————————————————————————— 172 | What's new? 173 | 1. Input Target/delay Manual (ITTYW) 174 | —————————————————————————————————————————————————————} 175 | `); 176 | //ikiganteng 177 | inquirer.prompt(User) 178 | .then(answers => { 179 | Excute({ 180 | username:answers.username, 181 | password:answers.password 182 | },answers.target,answers.mysyntx,answers.sleep); 183 | }) 184 | -------------------------------------------------------------------------------- /botlike.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const delay = require('delay'); 5 | const chalk = require('chalk'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'sleep', 32 | message:'[>] Insert Sleep (MiliSeconds):', 33 | validate: function(value){ 34 | value = value.match(/[0-9]/); 35 | if (value) return true; 36 | return 'Delay is number'; 37 | } 38 | } 39 | ] 40 | 41 | const Login = async function(User){ 42 | 43 | /** Save Account **/ 44 | const Device = new Client.Device(User.username); 45 | const Storage = new Client.CookieMemoryStorage(); 46 | const session = new Client.Session(Device, Storage); 47 | 48 | try { 49 | await Client.Session.create(Device, Storage, User.username, User.password) 50 | const account = await session.getAccount(); 51 | return Promise.resolve({session,account}); 52 | } catch (err) { 53 | return Promise.reject(err); 54 | } 55 | 56 | } 57 | 58 | const Like = async function(session,media){ 59 | try { 60 | if (media.params.hasLiked) { 61 | return chalk`{bold.blue Already Liked}`; 62 | } 63 | await Client.Like.create(session, media.id); 64 | return chalk`{bold.green Success Like}`; 65 | } catch (err) { 66 | return chalk`{bold.red Failed Like}`; 67 | } 68 | } 69 | 70 | const Excute = async function(User, sleep){ 71 | try { 72 | console.log(chalk`\n{yellow [?] Try to Login . . .}`); 73 | const doLogin = await Login(User); 74 | console.log(chalk`{green [!] Login Succsess}, {yellow [?] Try Like All Media in Feed / Timeline . . .\n}`); 75 | const feed = new Client.Feed.Timeline(doLogin.session); 76 | var cursor; 77 | do { 78 | if (cursor) feed.setCursor(cursor); 79 | var media = await feed.get(); 80 | media = _.chunk(media, 10); 81 | for (var i = 0; i < media.length; i++) { 82 | await Promise.all(media[i].map(async (media) => { 83 | const doLike = await Like(doLogin.session, media); 84 | console.log(chalk`[{bold.green Username:}] ${media.params.user.username}\n[{cyan ${media.id}}] => [${doLike}]`); 85 | })) 86 | await console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`); 87 | await delay(sleep); 88 | } 89 | } while(feed.isMoreAvailable()); 90 | } catch (err) { 91 | console.log(err); 92 | } 93 | } 94 | 95 | console.log(chalk` 96 | {bold.cyan 97 | —————————————————— [INFORMATION] ———————————————————— 98 | 99 | [?] {bold.green BOTLIKEv1 | Like/Love TL IG *SET SLEEP!} 100 | 101 | —————————————————— [THANKS TO] ———————————————————— 102 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 103 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 104 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 105 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 106 | —————————————————————————————————————————————————————} 107 | `); 108 | 109 | inquirer.prompt(User) 110 | .then(answers => { 111 | Excute({ 112 | username:answers.username, 113 | password:answers.password 114 | },answers.sleep); 115 | }) 116 | -------------------------------------------------------------------------------- /botlike2.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const delay = require('delay'); 5 | const chalk = require('chalk'); 6 | const inquirer = require('inquirer'); 7 | 8 | const User = [ 9 | { 10 | type:'input', 11 | name:'username', 12 | message:'[>] Insert Username:', 13 | validate: function(value){ 14 | if(!value) return 'Can\'t Empty'; 15 | return true; 16 | } 17 | }, 18 | { 19 | type:'password', 20 | name:'password', 21 | message:'[>] Insert Password:', 22 | mask:'*', 23 | validate: function(value){ 24 | if(!value) return 'Can\'t Empty'; 25 | return true; 26 | } 27 | } 28 | ] 29 | 30 | const Login = async function(User){ 31 | 32 | /** Save Account **/ 33 | const Device = new Client.Device(User.username); 34 | const Storage = new Client.CookieMemoryStorage(); 35 | const session = new Client.Session(Device, Storage); 36 | 37 | try { 38 | await Client.Session.create(Device, Storage, User.username, User.password) 39 | const account = await session.getAccount(); 40 | return Promise.resolve({session,account}); 41 | } catch (err) { 42 | return Promise.reject(err); 43 | } 44 | 45 | } 46 | 47 | const Timeline = async function(session,count,cursor){ 48 | var getCursor; 49 | count++; 50 | /** New Feed **/ 51 | const feed = new Client.Feed.Timeline(session); 52 | 53 | /** Cursor Detect **/ 54 | if (cursor) { 55 | feed.setCursor(cursor); 56 | } 57 | 58 | try { 59 | const media = await feed.get(); 60 | console.log('\n[+] Cursor => %s\n', count); 61 | await Promise.all(media.map(async(media) => { 62 | Like(session,media); 63 | })); 64 | if (count < 3) { 65 | getCursor = await feed.getCursor(); 66 | await Timeline(session,count,getCursor); 67 | } else { 68 | console.log('\n[-] Repeat from scratch (Delay 60s)\n'); 69 | await delay(60000); 70 | count=0; 71 | await Timeline(session,count); 72 | } 73 | } catch(err) { 74 | return Promise.reject(err); 75 | } 76 | 77 | } 78 | 79 | const Like = async function(session,media){ 80 | 81 | try { 82 | if (media.params.hasLiked === false){ 83 | const Like = await Client.Like.create(session, media.params.id); 84 | console.log(chalk`[{bold.cyan ${media.id}}] Username : ${media.params.user.username} => {bold.green Liked}`); 85 | } else { 86 | console.log(chalk`[{bold.cyan ${media.id}}] Username : ${media.params.user.username} => {bold.red Already Liked}`); 87 | } 88 | } catch (err) { 89 | return Promise.reject(err); 90 | } 91 | 92 | } 93 | 94 | const Excute = async function(User){ 95 | try { 96 | const count = 0; 97 | const doLogin = await Login(User); 98 | await Timeline(doLogin.session,count); 99 | } catch (err) { 100 | console.log(err); 101 | } 102 | } 103 | console.log(chalk` 104 | {bold.cyan 105 | —————————————————— [INFORMATION] ———————————————————— 106 | 107 | [?] {bold.green BOTLIKEv2 | Like/Love TL IG *AUTO!} 108 | 109 | —————————————————— [THANKS TO] ———————————————————— 110 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 111 | [✓] FIXING & TESTING BY SYNTAX (@teamsyntaxid) 112 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 113 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 114 | —————————————————————————————————————————————————————} 115 | `); 116 | 117 | inquirer.prompt(User) 118 | .then(answers => { 119 | Excute({ 120 | username:answers.username, 121 | password:answers.password 122 | }); 123 | }) 124 | -------------------------------------------------------------------------------- /cdl.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | var fs = require('fs'), 9 | request = require('request'); 10 | 11 | const User = [ 12 | { 13 | type:'input', 14 | name:'username', 15 | message:'[>] Insert Username:', 16 | validate: function(value){ 17 | if(!value) return 'Can\'t Empty'; 18 | return true; 19 | } 20 | }, 21 | { 22 | type:'password', 23 | name:'password', 24 | message:'[>] Insert Password:', 25 | mask:'*', 26 | validate: function(value){ 27 | if(!value) return 'Can\'t Empty'; 28 | return true; 29 | } 30 | }, 31 | { 32 | type:'input', 33 | name:'target', 34 | message:'[>] Insert Username Target (Without @[at]):', 35 | validate: function(value){ 36 | if(!value) return 'Can\'t Empty'; 37 | return true; 38 | } 39 | }, 40 | { 41 | type:'input', 42 | name:'mysyntx', 43 | message:'[>] Input Total of Target You Want (ITTYW):', 44 | validate: function(value){ 45 | value = value.match(/[0-9]/); 46 | if (value) return true; 47 | return 'Use Number Only!'; 48 | } 49 | }, 50 | { 51 | type:'input', 52 | name:'sleep', 53 | message:'[>] Insert Sleep (MiliSeconds):', 54 | validate: function(value){ 55 | value = value.match(/[0-9]/); 56 | if (value) return true; 57 | return 'Delay is number'; 58 | } 59 | } 60 | ] 61 | 62 | const Login = async function(User){ 63 | 64 | const Device = new Client.Device(User.username); 65 | const Storage = new Client.CookieMemoryStorage(); 66 | const session = new Client.Session(Device, Storage); 67 | 68 | try { 69 | await Client.Session.create(Device, Storage, User.username, User.password) 70 | const account = await session.getAccount(); 71 | return Promise.resolve({session,account}); 72 | } catch (err) { 73 | return Promise.reject(err); 74 | } 75 | 76 | } 77 | 78 | const Target = async function(username){ 79 | const url = 'https://www.instagram.com/'+username+'/' 80 | const option = { 81 | url: url, 82 | method: 'GET' 83 | } 84 | try{ 85 | const account = await rp(option); 86 | const data = S(account).between('').s 87 | const json = JSON.parse(data); 88 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 89 | return Promise.reject('Target is private Account'); 90 | } else { 91 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 92 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 93 | return Promise.resolve({id,followers}); 94 | } 95 | } catch (err){ 96 | return Promise.reject(err); 97 | } 98 | 99 | } 100 | 101 | async function ngeComment(session, id, text){ 102 | try { 103 | await Client.Comment.create(session, id, text); 104 | return true; 105 | } catch(e){ 106 | return false; 107 | } 108 | } 109 | 110 | async function ngeLike(session, id){ 111 | try{ 112 | await Client.Like.create(session, id) 113 | return true; 114 | } catch(e) { 115 | return false; 116 | } 117 | } 118 | 119 | async function ngeDM(session, users, text){ 120 | try{ 121 | await Client.Thread.configureText(session, users, text) 122 | return true; 123 | } catch(e) { 124 | return false; 125 | } 126 | } 127 | 128 | const CommentLikeDM = async function(session, accountId, text){ 129 | var result; 130 | 131 | const feed = new Client.Feed.UserMedia(session, accountId); 132 | 133 | try { 134 | result = await feed.get(); 135 | } catch (err) { 136 | return chalk`{bold.red ${err}}`; 137 | } 138 | 139 | if (result.length > 0) { 140 | const task = [ 141 | ngeComment(session, result[0].params.id, text), 142 | ngeDM(session, accountId, text), 143 | ngeLike(session, result[0].params.id) 144 | ] 145 | const [Comment,DM,Like] = await Promise.all(task); 146 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 147 | const printDM = DM ? chalk`{green DM}` : chalk`{red DM}`; 148 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 149 | return chalk`{bold.green ${printComment},${printDM},${printLike} [${text}]}`; 150 | } 151 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 152 | }; 153 | 154 | const Followers = async function(session, id){ 155 | const feed = new Client.Feed.AccountFollowers(session, id); 156 | try{ 157 | const Pollowers = []; 158 | var cursor; 159 | do { 160 | if (cursor) feed.setCursor(cursor); 161 | const getPollowers = await feed.get(); 162 | await Promise.all(getPollowers.map(async(akun) => { 163 | Pollowers.push(akun.id); 164 | })) 165 | cursor = await feed.getCursor(); 166 | } while(feed.isMoreAvailable()); 167 | return Promise.resolve(Pollowers); 168 | } catch(err){ 169 | return Promise.reject(err); 170 | } 171 | } 172 | 173 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 174 | try { 175 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 176 | const doLogin = await Login(User); 177 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 178 | const getTarget = await Target(TargetUsername); 179 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 180 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 181 | console.log(chalk`{cyan [?] Try to Follow, Comment, DM, and Like Followers Target . . . \n}`) 182 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 183 | var TargetCursor; 184 | do { 185 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 186 | var TargetResult = await Targetfeed.get(); 187 | TargetResult = _.chunk(TargetResult, mysyntx); 188 | for (let i = 0; i < TargetResult.length; i++) { 189 | var timeNow = new Date(); 190 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 191 | await Promise.all(TargetResult[i].map(async(akun) => { 192 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 193 | var Text = fs.readFileSync('komen.txt', 'utf8').split('|'); 194 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 195 | const ngeDo = await CommentLikeDM(doLogin.session, akun.id, ranText) 196 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 197 | } else { 198 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 199 | } 200 | })); 201 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 202 | await delay(Sleep); 203 | } 204 | TargetCursor = await Targetfeed.getCursor(); 205 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 206 | await delay(Sleep); 207 | } while(Targetfeed.isMoreAvailable()); 208 | } catch (err) { 209 | console.log(err); 210 | } 211 | } 212 | 213 | console.log(chalk` 214 | {bold.cyan 215 | —————————————————— [INFORMATION] ———————————————————— 216 | 217 | [?] {bold.green Using Account/User Target!} 218 | [?] {bold.green Comment, DM & Like} 219 | [?] {bold.green Gunakan komen.txt untk komen!} 220 | 221 | —————————————————— [THANKS TO] ———————————————————— 222 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 223 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 224 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 225 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 226 | ————————————————————————————————————————————————————— 227 | What's new? 228 | 1. Input Target/delay Manual (ITTYW) 229 | —————————————————————————————————————————————————————} 230 | `); 231 | //ikiganteng 232 | inquirer.prompt(User) 233 | .then(answers => { 234 | Excute({ 235 | username:answers.username, 236 | password:answers.password 237 | },answers.target,answers.sleep,answers.mysyntx); 238 | }) 239 | -------------------------------------------------------------------------------- /cek.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | const User = [ 9 | { 10 | type:'input', 11 | name:'username', 12 | message:'[>] Insert Username:', 13 | validate: function(value){ 14 | if(!value) return 'Can\'t Empty'; 15 | return true; 16 | } 17 | }, 18 | { 19 | type:'password', 20 | name:'password', 21 | message:'[>] Insert Password:', 22 | mask:'*', 23 | validate: function(value){ 24 | if(!value) return 'Can\'t Empty'; 25 | return true; 26 | } 27 | }, 28 | { 29 | type:'input', 30 | name:'mysyntx', 31 | message:'[>] Input Total of Amount You Want :', 32 | validate: function(value){ 33 | value = value.match(/[0-9]/); 34 | if (value) return true; 35 | return 'Use Number Only!'; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'sleep', 41 | message:'[>] Insert Sleep (MiliSeconds):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Delay is number'; 46 | } 47 | } 48 | ] 49 | const Login = async function(User){ 50 | 51 | const Device = new Client.Device(User.username); 52 | const Storage = new Client.CookieMemoryStorage(); 53 | const session = new Client.Session(Device, Storage); 54 | 55 | try { 56 | await Client.Session.create(Device, Storage, User.username, User.password) 57 | const account = await session.getAccount(); 58 | return Promise.resolve({session,account}); 59 | } catch (err) { 60 | return Promise.reject(err); 61 | } 62 | 63 | } 64 | 65 | function randomString1() { 66 | var chars = "abcdefghiklmnopqrstuvwxyz"; 67 | var string_length = 5; 68 | var randomstring = ''; 69 | for (var i=0; i ${getTarget} \n`, function (err) { 118 | if (err) { 119 | // append failed 120 | } else { 121 | // done 122 | } 123 | }) 124 | console.log(chalk`\n [{magenta ${timeNow}}] {bold.green [>]} [Username: ${iki}] => ${getTarget}`) 125 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 126 | await delay(Sleep); 127 | } 128 | } catch (err){ 129 | console.log(err); 130 | } 131 | } 132 | console.log(chalk` 133 | {bold.cyan 134 | —————————————————— [INFORMATION] ———————————————————— 135 | 136 | [?] {bold.green Check Username Account *AUTO!} 137 | [?] {bold.green Save Result to Log.txt} 138 | 139 | —————————————————— [THANKS TO] ———————————————————— 140 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 141 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 142 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 143 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 144 | —————————————————————————————————————————————————————} 145 | `); 146 | //ikiganteng 147 | inquirer.prompt(User) 148 | .then(answers => { 149 | Excute({ 150 | username:answers.username, 151 | password:answers.password 152 | },answers.sleep,answers.mysyntx); 153 | }) 154 | -------------------------------------------------------------------------------- /dellallphoto.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const delay = require('delay'); 5 | const chalk = require('chalk'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'sleep', 32 | message:'[>] Insert Sleep (MiliSeconds):', 33 | validate: function(value){ 34 | value = value.match(/[0-9]/); 35 | if (value) return true; 36 | return 'Delay is number'; 37 | } 38 | } 39 | ] 40 | 41 | const Login = async function(User){ 42 | 43 | const Device = new Client.Device(User.username); 44 | const Storage = new Client.CookieMemoryStorage(); 45 | const session = new Client.Session(Device, Storage); 46 | 47 | try { 48 | await Client.Session.create(Device, Storage, User.username, User.password) 49 | const account = await session.getAccount(); 50 | return Promise.resolve({session,account}); 51 | } catch (err) { 52 | return Promise.reject(err); 53 | } 54 | 55 | } 56 | 57 | const Media = async function(session, id){ 58 | const Media = new Client.Feed.UserMedia(session, id); 59 | 60 | try { 61 | const Poto = []; 62 | var cursor; 63 | do { 64 | if (cursor) Media.setCursor(cursor); 65 | const getPoto = await Media.get(); 66 | await Promise.all(getPoto.map(async(poto) => { 67 | Poto.push({ 68 | id:poto.id, 69 | link:poto.params.webLink 70 | }); 71 | })) 72 | cursor = await Media.getCursor() 73 | } while (Media.isMoreAvailable()); 74 | return Promise.resolve(Poto); 75 | } catch (err){ 76 | return Promise.reject(err); 77 | } 78 | } 79 | 80 | const Delete = async function(session, id){ 81 | try { 82 | await Client.Media.delete(session,id); 83 | return true; 84 | } catch (err) { 85 | return false; 86 | } 87 | } 88 | 89 | 90 | const Excute = async function(User,sleep){ 91 | try { 92 | 93 | /** TRY TO LOGIN **/ 94 | console.log('\n [?] Try to Login . . .'); 95 | const doLogin = await Login(User); 96 | console.log(chalk`{bold.green [!] Login Succsess!}`); 97 | 98 | /** TRY TO GET ALL MEDIA **/ 99 | console.log('[?] Try to get Media . . .') 100 | var getMedia = await Media(doLogin.session, doLogin.account.id); 101 | console.log(chalk`{bold.green [!] Succsess to get Media. Media Length : ${getMedia.length}}\n`); 102 | getMedia = _.chunk(getMedia, 10); 103 | 104 | /** TRY TO DELETE ALL MEDIA **/ 105 | for (let i = 0; i < getMedia.length; i++) { 106 | console.log('[?] Try to Delete 10 Photo/Delay \n') 107 | await Promise.all(getMedia[i].map(async(media) => { 108 | const doDelete = await Delete(doLogin.session, media.id); 109 | const PrintOut = chalk`> ${media.link} => ${doDelete ? chalk`{bold.green Sukses}` : chalk`{bold.red Gagal}`}` 110 | console.log(PrintOut); 111 | })) 112 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 113 | await delay(sleep) 114 | } 115 | 116 | } catch (err) { 117 | console.log(err); 118 | } 119 | } 120 | console.log(chalk` 121 | {bold.cyan 122 | —————————————————— [INFORMATION] ———————————————————— 123 | 124 | [?] {bold.green MASS DELETE ALL PHOTO IG *SET SLEEP!} 125 | 126 | —————————————————— [THANKS TO] ———————————————————— 127 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 128 | [✓] FIXING & TESTING BY SYNTAX (@teamsyntaxid) 129 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 130 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 131 | —————————————————————————————————————————————————————} 132 | `); 133 | 134 | inquirer.prompt(User) 135 | .then(answers => { 136 | Excute({ 137 | username:answers.username, 138 | password:answers.password 139 | },answers.sleep); 140 | }) 141 | -------------------------------------------------------------------------------- /fah.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const chalk = require('chalk'); 5 | const delay = require('delay'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const question = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'hastag', 32 | message:'[>] Insert Hashtag (Without #)(Use [|] if more than 1)(jangan dispasi):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (In MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | 70 | const doLogin = async (params) => { 71 | const Device = new Client.Device(params.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | try { 75 | await Client.Session.create(Device, Storage, params.username, params.password) 76 | const account = await session.getAccount(); 77 | return Promise.resolve({session,account}); 78 | } catch (err) { 79 | return Promise.reject(err); 80 | } 81 | } 82 | 83 | const grabFollowers = async (session, id) => { 84 | const feed = new Client.Feed.AccountFollowers(session, id); 85 | try{ 86 | feed.map = item => item.params; 87 | return Promise.resolve(feed.all()); 88 | }catch (e){ 89 | return Promise.reject(err); 90 | } 91 | } 92 | 93 | const doFollow = async (session, id) => { 94 | try { 95 | await Client.Relationship.create(session, id); 96 | return true; 97 | } catch (e) { 98 | return false; 99 | } 100 | } 101 | 102 | const doComment = async (session, id, text) => { 103 | try { 104 | await Client.Comment.create(session, id, text); 105 | return true; 106 | } catch(e){ 107 | return false; 108 | } 109 | } 110 | 111 | const doLike = async (session, id) => { 112 | try{ 113 | await Client.Like.create(session, id); 114 | return true; 115 | } catch(e) { 116 | return false; 117 | } 118 | } 119 | 120 | const doAction = async (session, params, text) => { 121 | const task = [ 122 | doFollow(session, params.account.id), 123 | doLike(session, params.id), 124 | doComment(session, params.id, text) 125 | ]; 126 | var [Follow,Like,Comment] = await Promise.all(task); 127 | Follow = Follow ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 128 | Comment = Comment ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 129 | Like = Like ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 130 | return chalk`[Follow: ${Follow}] [Like: ${Like}] [Comment: ${Comment} ({cyan ${text}})]`; 131 | } 132 | 133 | const doMain = async (account, hastag, sleep, text, mysyntx) => { 134 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 135 | account = await doLogin(account); 136 | console.log(chalk`{green [!] Login Success!}`) 137 | try { 138 | const ranhastag = hastag[Math.floor(Math.random() * hastag.length)]; 139 | const feed = new Client.Feed.TaggedMedia(account.session, ranhastag); 140 | console.log(chalk`{cyan [?] Try to Follow, Like and Comment All Account In Hashtag: #${ranhastag}}`); 141 | var cursor; 142 | var count = 0; 143 | console.log(chalk`{yellow \n [#][>] START WITH RATIO ${mysyntx}/${sleep} MiliSeconds [<][#] \n}`) 144 | do { 145 | if (cursor) feed.setCursor(cursor); 146 | count++; 147 | var media = await feed.get(); 148 | media = _.chunk(media, mysyntx); 149 | for (media of media) { 150 | var timeNow = new Date(); 151 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 152 | await Promise.all(media.map(async(media)=>{ 153 | const ranText = text[Math.floor(Math.random() * text.length)]; 154 | const resultAction = await doAction(account.session, media.params, ranText); 155 | console.log(chalk`[{magenta ${timeNow}}] ${media.id} | {cyanBright @${media.params.account.username}} \n=> ${resultAction}`); 156 | })) 157 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 158 | await delay(sleep); 159 | } 160 | cursor = await feed.getCursor(); 161 | console.log(chalk`[Cursor: {bold.cyan ${cursor ? cursor : 'null'}} | Count: {bold.cyan ${count}} | Total Media: {bold.cyan ${media.length}} | Delay: ${sleep} MiliSeconds ]`); 162 | } while(feed.isMoreAvailable()); 163 | } catch(e) { 164 | console.log(e); 165 | } 166 | } 167 | 168 | console.log(chalk` 169 | {bold.cyan 170 | —————————————————— [INFORMATION] ———————————————————— 171 | 172 | [?] {bold.green FAH | Using Hastag Media Target!} 173 | 174 | —————————————————— [THANKS TO] ———————————————————— 175 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 176 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 177 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 178 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 179 | ————————————————————————————————————————————————————— 180 | What's new? 181 | 1. Input Target/delay Manual (ITTYW) 182 | —————————————————————————————————————————————————————} 183 | `); 184 | 185 | inquirer.prompt(question) 186 | .then(answers => { 187 | var text = answers.text.split('|'); 188 | var hastag = answers.hastag.split('|'); 189 | doMain({ 190 | username:answers.username, 191 | password:answers.password},hastag,answers.sleep,text,answers.mysyntx); 192 | }) 193 | .catch(e => { 194 | console.log(e); 195 | }) 196 | -------------------------------------------------------------------------------- /fft.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const chalk = require('chalk'); 5 | const delay = require('delay'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const question = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'hastag', 32 | message:'[>] Insert Hashtag (Without #)(Use [|] if more than 1)(jangan dispasi):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (In MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | 70 | const doLogin = async (params) => { 71 | const Device = new Client.Device(params.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | try { 75 | await Client.Session.create(Device, Storage, params.username, params.password) 76 | const account = await session.getAccount(); 77 | return Promise.resolve({session,account}); 78 | } catch (err) { 79 | return Promise.reject(err); 80 | } 81 | } 82 | 83 | const grabFollowers = async (session, id) => { 84 | const feed = new Client.Feed.AccountFollowers(session, id); 85 | try{ 86 | feed.map = item => item.params; 87 | return Promise.resolve(feed.all()); 88 | }catch (e){ 89 | return Promise.reject(err); 90 | } 91 | } 92 | 93 | const doFollow = async (session, id) => { 94 | try { 95 | await Client.Relationship.create(session, id); 96 | return true; 97 | } catch (e) { 98 | return false; 99 | } 100 | } 101 | 102 | const doComment = async (session, id, text) => { 103 | try { 104 | await Client.Comment.create(session, id, text); 105 | return true; 106 | } catch(e){ 107 | return false; 108 | } 109 | } 110 | 111 | const doLike = async (session, id) => { 112 | try{ 113 | await Client.Like.create(session, id); 114 | return true; 115 | } catch(e) { 116 | return false; 117 | } 118 | } 119 | 120 | const doAction = async (session, params, text) => { 121 | const task = [ 122 | doFollow(session, params.account.id), 123 | doLike(session, params.id), 124 | doComment(session, params.id, text) 125 | ]; 126 | var [Follow,Like,Comment] = await Promise.all(task); 127 | Follow = Follow ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 128 | Comment = Comment ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 129 | Like = Like ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 130 | return chalk`[Follow: ${Follow}] [Like: ${Like}] [Comment: ${Comment} ({cyan ${text}})]`; 131 | } 132 | 133 | const doMain = async (account, hastag, sleep, text, mysyntx) => { 134 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 135 | account = await doLogin(account); 136 | console.log(chalk`{green [!] Login Success!}`) 137 | try { 138 | const ranhastag = hastag[Math.floor(Math.random() * hastag.length)]; 139 | const feed = new Client.Feed.TaggedMedia(account.session, ranhastag); 140 | console.log(chalk`{cyan [?] Try to Follow, Like and Comment All Account In Hashtag: #${ranhastag}}`); 141 | var cursor; 142 | var count = 0; 143 | console.log(chalk`{yellow \n [#][>] START WITH RATIO ${mysyntx}/${sleep} MiliSeconds [<][#] \n}`) 144 | do { 145 | if (cursor) feed.setCursor(cursor); 146 | count++; 147 | var media = await feed.get(); 148 | media = _.chunk(media, mysyntx); 149 | for (media of media) { 150 | var timeNow = new Date(); 151 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 152 | await Promise.all(media.map(async(media)=>{ 153 | const ranText = text[Math.floor(Math.random() * text.length)]; 154 | const resultAction = await doAction(account.session, media.params, ranText); 155 | console.log(chalk`[{magenta ${timeNow}}] ${media.id} | {cyanBright @${media.params.account.username}} \n=> ${resultAction}`); 156 | })) 157 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 158 | await delay(sleep); 159 | } 160 | cursor = await feed.getCursor(); 161 | console.log(chalk`[Cursor: {bold.cyan ${cursor ? cursor : 'null'}} | Count: {bold.cyan ${count}} | Total Media: {bold.cyan ${media.length}} | Delay: ${sleep} MiliSeconds ]`); 162 | } while(feed.isMoreAvailable()); 163 | } catch(e) { 164 | console.log(e); 165 | } 166 | } 167 | 168 | console.log(chalk` 169 | {bold.cyan 170 | —————————————————— [INFORMATION] ———————————————————— 171 | 172 | [?] {bold.green FAH | Using Hastag Media Target!} 173 | 174 | —————————————————— [THANKS TO] ———————————————————— 175 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 176 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 177 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 178 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 179 | ————————————————————————————————————————————————————— 180 | What's new? 181 | 1. Input Target/delay Manual (ITTYW) 182 | —————————————————————————————————————————————————————} 183 | `); 184 | 185 | inquirer.prompt(question) 186 | .then(answers => { 187 | var text = answers.text.split('|'); 188 | var hastag = answers.hastag.split('|'); 189 | doMain({ 190 | username:answers.username, 191 | password:answers.password},hastag,answers.sleep,text,answers.mysyntx); 192 | }) 193 | .catch(e => { 194 | console.log(e); 195 | }) 196 | -------------------------------------------------------------------------------- /fftasli.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | const Login = async function(User){ 70 | 71 | const Device = new Client.Device(User.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | 75 | try { 76 | await Client.Session.create(Device, Storage, User.username, User.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | 83 | } 84 | 85 | const Target = async function(username){ 86 | const url = 'https://www.instagram.com/'+username+'/' 87 | const option = { 88 | url: url, 89 | method: 'GET' 90 | } 91 | try{ 92 | const account = await rp(option); 93 | const data = S(account).between('').s 94 | const json = JSON.parse(data); 95 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 96 | return Promise.reject('Target is private Account'); 97 | } else { 98 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 99 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 100 | return Promise.resolve({id,followers}); 101 | } 102 | } catch (err){ 103 | return Promise.reject(err); 104 | } 105 | 106 | } 107 | 108 | async function ngefollow(session,accountId){ 109 | try { 110 | await Client.Relationship.create(session, accountId); 111 | return true 112 | } catch (e) { 113 | return false 114 | } 115 | } 116 | 117 | async function ngeComment(session, id, text){ 118 | try { 119 | await Client.Comment.create(session, id, text); 120 | return true; 121 | } catch(e){ 122 | return false; 123 | } 124 | } 125 | 126 | async function ngeLike(session, id){ 127 | try{ 128 | await Client.Like.create(session, id) 129 | return true; 130 | } catch(e) { 131 | return false; 132 | } 133 | } 134 | 135 | const CommentAndLike = async function(session, accountId, text){ 136 | var result; 137 | 138 | const feed = new Client.Feed.UserMedia(session, accountId); 139 | 140 | try { 141 | result = await feed.get(); 142 | } catch (err) { 143 | return chalk`{bold.red ${err}}`; 144 | } 145 | 146 | if (result.length > 0) { 147 | const task = [ 148 | ngefollow(session, accountId), 149 | ngeComment(session, result[0].params.id, text), 150 | ngeLike(session, result[0].params.id) 151 | ] 152 | const [Follow,Comment,Like] = await Promise.all(task); 153 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 154 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 155 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 156 | return chalk`{bold.green ${printFollow},${printComment},${printLike} [${text}]}`; 157 | } 158 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 159 | }; 160 | 161 | const Followers = async function(session, id){ 162 | const feed = new Client.Feed.AccountFollowers(session, id); 163 | try{ 164 | const Pollowers = []; 165 | var cursor; 166 | do { 167 | if (cursor) feed.setCursor(cursor); 168 | const getPollowers = await feed.get(); 169 | await Promise.all(getPollowers.map(async(akun) => { 170 | Pollowers.push(akun.id); 171 | })) 172 | cursor = await feed.getCursor(); 173 | } while(feed.isMoreAvailable()); 174 | return Promise.resolve(Pollowers); 175 | } catch(err){ 176 | return Promise.reject(err); 177 | } 178 | } 179 | 180 | const Excute = async function(User, TargetUsername, Text, Sleep, mysyntx){ 181 | try { 182 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 183 | const doLogin = await Login(User); 184 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 185 | const getTarget = await Target(TargetUsername); 186 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 187 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 188 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 189 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 190 | var TargetCursor; 191 | do { 192 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 193 | var TargetResult = await Targetfeed.get(); 194 | TargetResult = _.chunk(TargetResult, mysyntx); 195 | for (let i = 0; i < TargetResult.length; i++) { 196 | var timeNow = new Date(); 197 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 198 | await Promise.all(TargetResult[i].map(async(akun) => { 199 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 200 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 201 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, ranText) 202 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 203 | } else { 204 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 205 | } 206 | })); 207 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 208 | await delay(Sleep); 209 | } 210 | TargetCursor = await Targetfeed.getCursor(); 211 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 212 | await delay(Sleep); 213 | } while(Targetfeed.isMoreAvailable()); 214 | } catch (err) { 215 | console.log(err); 216 | } 217 | } 218 | 219 | console.log(chalk` 220 | {bold.cyan 221 | —————————————————— [INFORMATION] ———————————————————— 222 | 223 | [?] {bold.green FFTauto | Using Account/User Target!} 224 | 225 | —————————————————— [THANKS TO] ———————————————————— 226 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 227 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 228 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 229 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 230 | ————————————————————————————————————————————————————— 231 | What's new? 232 | 1. Input Target/delay Manual (ITTYW) 233 | —————————————————————————————————————————————————————} 234 | `); 235 | 236 | inquirer.prompt(User) 237 | .then(answers => { 238 | var text = answers.text.split('|'); 239 | Excute({ 240 | username:answers.username, 241 | password:answers.password 242 | },answers.target,text,answers.sleep,answers.mysyntx); 243 | }) 244 | -------------------------------------------------------------------------------- /fftauto.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | var fs = require('fs'), 9 | request = require('request'); 10 | 11 | const User = [ 12 | { 13 | type:'input', 14 | name:'username', 15 | message:'[>] Insert Username:', 16 | validate: function(value){ 17 | if(!value) return 'Can\'t Empty'; 18 | return true; 19 | } 20 | }, 21 | { 22 | type:'password', 23 | name:'password', 24 | message:'[>] Insert Password:', 25 | mask:'*', 26 | validate: function(value){ 27 | if(!value) return 'Can\'t Empty'; 28 | return true; 29 | } 30 | }, 31 | { 32 | type:'input', 33 | name:'target', 34 | message:'[>] Insert Username Target (Without @[at]):', 35 | validate: function(value){ 36 | if(!value) return 'Can\'t Empty'; 37 | return true; 38 | } 39 | }, 40 | { 41 | type:'input', 42 | name:'mysyntx', 43 | message:'[>] Input Total of Target You Want (ITTYW):', 44 | validate: function(value){ 45 | value = value.match(/[0-9]/); 46 | if (value) return true; 47 | return 'Use Number Only!'; 48 | } 49 | }, 50 | { 51 | type:'input', 52 | name:'sleep', 53 | message:'[>] Insert Sleep (MiliSeconds):', 54 | validate: function(value){ 55 | value = value.match(/[0-9]/); 56 | if (value) return true; 57 | return 'Delay is number'; 58 | } 59 | } 60 | ] 61 | 62 | const Login = async function(User){ 63 | 64 | const Device = new Client.Device(User.username); 65 | const Storage = new Client.CookieMemoryStorage(); 66 | const session = new Client.Session(Device, Storage); 67 | 68 | try { 69 | await Client.Session.create(Device, Storage, User.username, User.password) 70 | const account = await session.getAccount(); 71 | return Promise.resolve({session,account}); 72 | } catch (err) { 73 | return Promise.reject(err); 74 | } 75 | 76 | } 77 | 78 | const Target = async function(username){ 79 | const url = 'https://www.instagram.com/'+username+'/' 80 | const option = { 81 | url: url, 82 | method: 'GET' 83 | } 84 | try{ 85 | const account = await rp(option); 86 | const data = S(account).between('').s 87 | const json = JSON.parse(data); 88 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 89 | return Promise.reject('Target is private Account'); 90 | } else { 91 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 92 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 93 | return Promise.resolve({id,followers}); 94 | } 95 | } catch (err){ 96 | return Promise.reject(err); 97 | } 98 | 99 | } 100 | 101 | async function ngefollow(session,accountId){ 102 | try { 103 | await Client.Relationship.create(session, accountId); 104 | return true 105 | } catch (e) { 106 | return false 107 | } 108 | } 109 | 110 | async function ngeComment(session, id, text){ 111 | try { 112 | await Client.Comment.create(session, id, text); 113 | return true; 114 | } catch(e){ 115 | return false; 116 | } 117 | } 118 | 119 | async function ngeLike(session, id){ 120 | try{ 121 | await Client.Like.create(session, id) 122 | return true; 123 | } catch(e) { 124 | return false; 125 | } 126 | } 127 | 128 | const CommentAndLike = async function(session, accountId, text){ 129 | var result; 130 | 131 | const feed = new Client.Feed.UserMedia(session, accountId); 132 | 133 | try { 134 | result = await feed.get(); 135 | } catch (err) { 136 | return chalk`{bold.red ${err}}`; 137 | } 138 | 139 | if (result.length > 0) { 140 | const task = [ 141 | ngefollow(session, accountId), 142 | ngeComment(session, result[0].params.id, text), 143 | ngeLike(session, result[0].params.id) 144 | ] 145 | const [Follow,Comment,Like] = await Promise.all(task); 146 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 147 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 148 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 149 | return chalk`{bold.green ${printFollow},${printComment},${printLike} [${text}]}`; 150 | } 151 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 152 | }; 153 | 154 | const Followers = async function(session, id){ 155 | const feed = new Client.Feed.AccountFollowers(session, id); 156 | try{ 157 | const Pollowers = []; 158 | var cursor; 159 | do { 160 | if (cursor) feed.setCursor(cursor); 161 | const getPollowers = await feed.get(); 162 | await Promise.all(getPollowers.map(async(akun) => { 163 | Pollowers.push(akun.id); 164 | })) 165 | cursor = await feed.getCursor(); 166 | } while(feed.isMoreAvailable()); 167 | return Promise.resolve(Pollowers); 168 | } catch(err){ 169 | return Promise.reject(err); 170 | } 171 | } 172 | 173 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 174 | try { 175 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 176 | const doLogin = await Login(User); 177 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 178 | const getTarget = await Target(TargetUsername); 179 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 180 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 181 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 182 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 183 | var TargetCursor; 184 | do { 185 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 186 | var TargetResult = await Targetfeed.get(); 187 | TargetResult = _.chunk(TargetResult, mysyntx); 188 | for (let i = 0; i < TargetResult.length; i++) { 189 | var timeNow = new Date(); 190 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 191 | await Promise.all(TargetResult[i].map(async(akun) => { 192 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 193 | var Text = fs.readFileSync('komen.txt', 'utf8').split('|'); 194 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 195 | var iki = ''+akun.params.username+' '+ranText; 196 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, iki) 197 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 198 | } else { 199 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 200 | } 201 | })); 202 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 203 | await delay(Sleep); 204 | } 205 | TargetCursor = await Targetfeed.getCursor(); 206 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 207 | await delay(Sleep); 208 | } while(Targetfeed.isMoreAvailable()); 209 | } catch (err) { 210 | console.log(err); 211 | } 212 | } 213 | 214 | console.log(chalk` 215 | {bold.cyan 216 | —————————————————— [INFORMATION] ———————————————————— 217 | 218 | [?] {bold.green FFTauto | Using Account/User Target!} 219 | [?] {bold.green Gunakan komen.txt untk komen!} 220 | 221 | —————————————————— [THANKS TO] ———————————————————— 222 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 223 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 224 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 225 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 226 | ————————————————————————————————————————————————————— 227 | What's new? 228 | 1. Input Target/delay Manual (ITTYW) 229 | —————————————————————————————————————————————————————} 230 | `); 231 | //ikiganteng 232 | inquirer.prompt(User) 233 | .then(answers => { 234 | Excute({ 235 | username:answers.username, 236 | password:answers.password 237 | },answers.target,answers.sleep,answers.mysyntx); 238 | }) 239 | -------------------------------------------------------------------------------- /fftdm.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | var fs = require('fs'), 9 | request = require('request'); 10 | 11 | const User = [ 12 | { 13 | type:'input', 14 | name:'username', 15 | message:'[>] Insert Username:', 16 | validate: function(value){ 17 | if(!value) return 'Can\'t Empty'; 18 | return true; 19 | } 20 | }, 21 | { 22 | type:'password', 23 | name:'password', 24 | message:'[>] Insert Password:', 25 | mask:'*', 26 | validate: function(value){ 27 | if(!value) return 'Can\'t Empty'; 28 | return true; 29 | } 30 | }, 31 | { 32 | type:'input', 33 | name:'target', 34 | message:'[>] Insert Username Target (Without @[at]):', 35 | validate: function(value){ 36 | if(!value) return 'Can\'t Empty'; 37 | return true; 38 | } 39 | }, 40 | { 41 | type:'input', 42 | name:'mysyntx', 43 | message:'[>] Input Total of Target You Want (ITTYW):', 44 | validate: function(value){ 45 | value = value.match(/[0-9]/); 46 | if (value) return true; 47 | return 'Use Number Only!'; 48 | } 49 | }, 50 | { 51 | type:'input', 52 | name:'sleep', 53 | message:'[>] Insert Sleep (MiliSeconds):', 54 | validate: function(value){ 55 | value = value.match(/[0-9]/); 56 | if (value) return true; 57 | return 'Delay is number'; 58 | } 59 | } 60 | ] 61 | 62 | const Login = async function(User){ 63 | 64 | const Device = new Client.Device(User.username); 65 | const Storage = new Client.CookieMemoryStorage(); 66 | const session = new Client.Session(Device, Storage); 67 | 68 | try { 69 | await Client.Session.create(Device, Storage, User.username, User.password) 70 | const account = await session.getAccount(); 71 | return Promise.resolve({session,account}); 72 | } catch (err) { 73 | return Promise.reject(err); 74 | } 75 | 76 | } 77 | 78 | const Target = async function(username){ 79 | const url = 'https://www.instagram.com/'+username+'/' 80 | const option = { 81 | url: url, 82 | method: 'GET' 83 | } 84 | try{ 85 | const account = await rp(option); 86 | const data = S(account).between('').s 87 | const json = JSON.parse(data); 88 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 89 | return Promise.reject('Target is private Account'); 90 | } else { 91 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 92 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 93 | return Promise.resolve({id,followers}); 94 | } 95 | } catch (err){ 96 | return Promise.reject(err); 97 | } 98 | 99 | } 100 | 101 | async function ngefollow(session,accountId){ 102 | try { 103 | await Client.Relationship.create(session, accountId); 104 | return true 105 | } catch (e) { 106 | return false 107 | } 108 | } 109 | 110 | async function ngeComment(session, id, text){ 111 | try { 112 | await Client.Comment.create(session, id, text); 113 | return true; 114 | } catch(e){ 115 | return false; 116 | } 117 | } 118 | 119 | async function ngeLike(session, id){ 120 | try{ 121 | await Client.Like.create(session, id) 122 | return true; 123 | } catch(e) { 124 | return false; 125 | } 126 | } 127 | 128 | async function ngeDM(session, users, text){ 129 | try{ 130 | await Client.Thread.configureText(session, users, text) 131 | return true; 132 | } catch(e) { 133 | return false; 134 | } 135 | } 136 | 137 | const CommentLikeDM = async function(session, accountId, text){ 138 | var result; 139 | 140 | const feed = new Client.Feed.UserMedia(session, accountId); 141 | 142 | try { 143 | result = await feed.get(); 144 | } catch (err) { 145 | return chalk`{bold.red ${err}}`; 146 | } 147 | 148 | if (result.length > 0) { 149 | const task = [ 150 | ngefollow(session, accountId), 151 | ngeComment(session, result[0].params.id, text), 152 | ngeDM(session, accountId, text), 153 | ngeLike(session, result[0].params.id) 154 | ] 155 | const [Follow,Comment,DM,Like] = await Promise.all(task); 156 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 157 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 158 | const printDM = DM ? chalk`{green DM}` : chalk`{red DM}`; 159 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 160 | return chalk`{bold.green ${printFollow},${printComment},${printDM},${printLike} [${text}]}`; 161 | } 162 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 163 | }; 164 | 165 | const Followers = async function(session, id){ 166 | const feed = new Client.Feed.AccountFollowers(session, id); 167 | try{ 168 | const Pollowers = []; 169 | var cursor; 170 | do { 171 | if (cursor) feed.setCursor(cursor); 172 | const getPollowers = await feed.get(); 173 | await Promise.all(getPollowers.map(async(akun) => { 174 | Pollowers.push(akun.id); 175 | })) 176 | cursor = await feed.getCursor(); 177 | } while(feed.isMoreAvailable()); 178 | return Promise.resolve(Pollowers); 179 | } catch(err){ 180 | return Promise.reject(err); 181 | } 182 | } 183 | 184 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 185 | try { 186 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 187 | const doLogin = await Login(User); 188 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 189 | const getTarget = await Target(TargetUsername); 190 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 191 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 192 | console.log(chalk`{cyan [?] Try to Follow, Comment, DM, and Like Followers Target . . . \n}`) 193 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 194 | var TargetCursor; 195 | do { 196 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 197 | var TargetResult = await Targetfeed.get(); 198 | TargetResult = _.chunk(TargetResult, mysyntx); 199 | for (let i = 0; i < TargetResult.length; i++) { 200 | var timeNow = new Date(); 201 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 202 | await Promise.all(TargetResult[i].map(async(akun) => { 203 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 204 | var Text = fs.readFileSync('komen.txt', 'utf8').split('|'); 205 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 206 | const ngeDo = await CommentLikeDM(doLogin.session, akun.id, ranText) 207 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 208 | } else { 209 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 210 | } 211 | })); 212 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 213 | await delay(Sleep); 214 | } 215 | TargetCursor = await Targetfeed.getCursor(); 216 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 217 | await delay(Sleep); 218 | } while(Targetfeed.isMoreAvailable()); 219 | } catch (err) { 220 | console.log(err); 221 | } 222 | } 223 | 224 | console.log(chalk` 225 | {bold.cyan 226 | —————————————————— [INFORMATION] ———————————————————— 227 | 228 | [?] {bold.green FFTauto | Using Account/User Target!} 229 | [?] {bold.green Follow, Comment, DM & Like} 230 | [?] {bold.green Gunakan komen.txt untk komen!} 231 | 232 | —————————————————— [THANKS TO] ———————————————————— 233 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 234 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 235 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 236 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 237 | ————————————————————————————————————————————————————— 238 | What's new? 239 | 1. Input Target/delay Manual (ITTYW) 240 | —————————————————————————————————————————————————————} 241 | `); 242 | //ikiganteng 243 | inquirer.prompt(User) 244 | .then(answers => { 245 | Excute({ 246 | username:answers.username, 247 | password:answers.password 248 | },answers.target,answers.sleep,answers.mysyntx); 249 | }) 250 | -------------------------------------------------------------------------------- /fftold.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'mysyntx', 41 | message:'[>] Input Total of Target You Want (ITTYW):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Use Number Only!'; 46 | } 47 | }, 48 | { 49 | type:'input', 50 | name:'sleep', 51 | message:'[>] Insert Sleep (MiliSeconds):', 52 | validate: function(value){ 53 | value = value.match(/[0-9]/); 54 | if (value) return true; 55 | return 'Delay is number'; 56 | } 57 | } 58 | ] 59 | 60 | const Login = async function(User){ 61 | 62 | const Device = new Client.Device(User.username); 63 | const Storage = new Client.CookieMemoryStorage(); 64 | const session = new Client.Session(Device, Storage); 65 | 66 | try { 67 | await Client.Session.create(Device, Storage, User.username, User.password) 68 | const account = await session.getAccount(); 69 | return Promise.resolve({session,account}); 70 | } catch (err) { 71 | return Promise.reject(err); 72 | } 73 | 74 | } 75 | 76 | const Target = async function(username){ 77 | const url = 'https://www.instagram.com/'+username+'/' 78 | const option = { 79 | url: url, 80 | method: 'GET' 81 | } 82 | try{ 83 | const account = await rp(option); 84 | const data = S(account).between('').s 85 | const json = JSON.parse(data); 86 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 87 | return Promise.reject('Target is private Account'); 88 | } else { 89 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 90 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 91 | return Promise.resolve({id,followers}); 92 | } 93 | } catch (err){ 94 | return Promise.reject(err); 95 | } 96 | 97 | } 98 | 99 | async function ngefollow(session,accountId){ 100 | try { 101 | await Client.Relationship.create(session, accountId); 102 | return true 103 | } catch (e) { 104 | return false 105 | } 106 | } 107 | 108 | const Follow = async function(session, accountId){ 109 | const task = [ 110 | ngefollow(session, accountId), 111 | ] 112 | const [Follow] = await Promise.all(task); 113 | const printFollow = Follow ? chalk`{green Followed}` : chalk`{red Gagal Follow}`; 114 | return chalk`{bold.green ${printFollow}}`; 115 | }; 116 | 117 | const Followers = async function(session, id){ 118 | const feed = new Client.Feed.AccountFollowers(session, id); 119 | try{ 120 | const Pollowers = []; 121 | var cursor; 122 | do { 123 | if (cursor) feed.setCursor(cursor); 124 | const getPollowers = await feed.get(); 125 | await Promise.all(getPollowers.map(async(akun) => { 126 | Pollowers.push(akun.id); 127 | })) 128 | cursor = await feed.getCursor(); 129 | } while(feed.isMoreAvailable()); 130 | return Promise.resolve(Pollowers); 131 | } catch(err){ 132 | return Promise.reject(err); 133 | } 134 | } 135 | 136 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 137 | try { 138 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 139 | const doLogin = await Login(User); 140 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 141 | const getTarget = await Target(TargetUsername); 142 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 143 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 144 | console.log(chalk`{cyan [?] Try to Follow Followers Target . . . \n}`) 145 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 146 | var TargetCursor; 147 | do { 148 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 149 | var TargetResult = await Targetfeed.get(); 150 | TargetResult = _.chunk(TargetResult, mysyntx); 151 | for (let i = 0; i < TargetResult.length; i++) { 152 | var timeNow = new Date(); 153 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 154 | await Promise.all(TargetResult[i].map(async(akun) => { 155 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 156 | const ngeDo = await Follow(doLogin.session, akun.id) 157 | console.log(chalk`[{magenta ${timeNow}}] {bold.cyan [>]}${akun.params.username} => ${ngeDo}`) 158 | } else { 159 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 160 | } 161 | })); 162 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 163 | await delay(Sleep); 164 | } 165 | TargetCursor = await Targetfeed.getCursor(); 166 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 167 | await delay(Sleep); 168 | } while(Targetfeed.isMoreAvailable()); 169 | } catch (err) { 170 | console.log(err); 171 | } 172 | } 173 | 174 | console.log(chalk` 175 | {bold.cyan 176 | —————————————————— [INFORMATION] ———————————————————— 177 | 178 | [?] {bold.green FFTauto | Using Account/User Target!} 179 | 180 | —————————————————— [THANKS TO] ———————————————————— 181 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 182 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 183 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 184 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 185 | ————————————————————————————————————————————————————— 186 | What's new? 187 | 1. Input Target/delay Manual (ITTYW) 188 | —————————————————————————————————————————————————————} 189 | `); 190 | 191 | inquirer.prompt(User) 192 | .then(answers => { 193 | Excute({ 194 | username:answers.username, 195 | password:answers.password 196 | },answers.target,answers.sleep,answers.mysyntx); 197 | }) 198 | -------------------------------------------------------------------------------- /fftsleep.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | var fs = require('fs'), 9 | request = require('request'); 10 | 11 | const User = [ 12 | { 13 | type:'input', 14 | name:'username', 15 | message:'[>] Insert Username:', 16 | validate: function(value){ 17 | if(!value) return 'Can\'t Empty'; 18 | return true; 19 | } 20 | }, 21 | { 22 | type:'password', 23 | name:'password', 24 | message:'[>] Insert Password:', 25 | mask:'*', 26 | validate: function(value){ 27 | if(!value) return 'Can\'t Empty'; 28 | return true; 29 | } 30 | }, 31 | { 32 | type:'input', 33 | name:'target', 34 | message:'[>] Insert Username Target (Without @[at]):', 35 | validate: function(value){ 36 | if(!value) return 'Can\'t Empty'; 37 | return true; 38 | } 39 | }, 40 | { 41 | type:'input', 42 | name:'mysyntx', 43 | message:'[>] Input Total of Target You Want (ITTYW):', 44 | validate: function(value){ 45 | value = value.match(/[0-9]/); 46 | if (value) return true; 47 | return 'Use Number Only!'; 48 | } 49 | }, 50 | { 51 | type:'input', 52 | name:'sleep', 53 | message:'[>] Insert Sleep (MiliSeconds)(Use [|] if more than 1):', 54 | validate: function(value){ 55 | value = value.match(/[0-9]/); 56 | if (value) return true; 57 | return 'Delay is number'; 58 | } 59 | } 60 | ] 61 | 62 | const Login = async function(User){ 63 | 64 | const Device = new Client.Device(User.username); 65 | const Storage = new Client.CookieMemoryStorage(); 66 | const session = new Client.Session(Device, Storage); 67 | 68 | try { 69 | await Client.Session.create(Device, Storage, User.username, User.password) 70 | const account = await session.getAccount(); 71 | return Promise.resolve({session,account}); 72 | } catch (err) { 73 | return Promise.reject(err); 74 | } 75 | 76 | } 77 | 78 | const Target = async function(username){ 79 | const url = 'https://www.instagram.com/'+username+'/' 80 | const option = { 81 | url: url, 82 | method: 'GET' 83 | } 84 | try{ 85 | const account = await rp(option); 86 | const data = S(account).between('').s 87 | const json = JSON.parse(data); 88 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 89 | return Promise.reject('Target is private Account'); 90 | } else { 91 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 92 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 93 | return Promise.resolve({id,followers}); 94 | } 95 | } catch (err){ 96 | return Promise.reject(err); 97 | } 98 | 99 | } 100 | 101 | async function ngefollow(session,accountId){ 102 | try { 103 | await Client.Relationship.create(session, accountId); 104 | return true 105 | } catch (e) { 106 | return false 107 | } 108 | } 109 | 110 | async function ngeComment(session, id, text){ 111 | try { 112 | await Client.Comment.create(session, id, text); 113 | return true; 114 | } catch(e){ 115 | return false; 116 | } 117 | } 118 | 119 | async function ngeLike(session, id){ 120 | try{ 121 | await Client.Like.create(session, id) 122 | return true; 123 | } catch(e) { 124 | return false; 125 | } 126 | } 127 | 128 | const CommentAndLike = async function(session, accountId, text){ 129 | var result; 130 | 131 | const feed = new Client.Feed.UserMedia(session, accountId); 132 | 133 | try { 134 | result = await feed.get(); 135 | } catch (err) { 136 | return chalk`{bold.red ${err}}`; 137 | } 138 | 139 | if (result.length > 0) { 140 | const task = [ 141 | ngefollow(session, accountId), 142 | ngeComment(session, result[0].params.id, text), 143 | ngeLike(session, result[0].params.id) 144 | ] 145 | const [Follow,Comment,Like] = await Promise.all(task); 146 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 147 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 148 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 149 | return chalk`{bold.green ${printFollow},${printComment},${printLike} [${text}]}`; 150 | } 151 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 152 | }; 153 | 154 | const Followers = async function(session, id){ 155 | const feed = new Client.Feed.AccountFollowers(session, id); 156 | try{ 157 | const Pollowers = []; 158 | var cursor; 159 | do { 160 | if (cursor) feed.setCursor(cursor); 161 | const getPollowers = await feed.get(); 162 | await Promise.all(getPollowers.map(async(akun) => { 163 | Pollowers.push(akun.id); 164 | })) 165 | cursor = await feed.getCursor(); 166 | } while(feed.isMoreAvailable()); 167 | return Promise.resolve(Pollowers); 168 | } catch(err){ 169 | return Promise.reject(err); 170 | } 171 | } 172 | 173 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 174 | try { 175 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 176 | const doLogin = await Login(User); 177 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 178 | const getTarget = await Target(TargetUsername); 179 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 180 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 181 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 182 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 183 | var TargetCursor; 184 | do { 185 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 186 | var TargetResult = await Targetfeed.get(); 187 | TargetResult = _.chunk(TargetResult, mysyntx); 188 | for (let i = 0; i < TargetResult.length; i++) { 189 | var timeNow = new Date(); 190 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 191 | await Promise.all(TargetResult[i].map(async(akun) => { 192 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 193 | var Text = fs.readFileSync('komen.txt', 'utf8').split('|'); 194 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 195 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, ranText) 196 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 197 | } else { 198 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 199 | } 200 | })); 201 | var ranSleep = Sleep[Math.floor(Math.random() * Sleep.length)]; 202 | console.log(chalk`{yellow \n [#][>] Delay For ${ranSleep} MiliSeconds [<][#] \n}`); 203 | await delay(ranSleep); 204 | } 205 | TargetCursor = await Targetfeed.getCursor(); 206 | var ranSleep = Sleep[Math.floor(Math.random() * Sleep.length)]; 207 | console.log(chalk`{yellow \n [#][>] Delay For ${ranSleep} MiliSeconds [<][#] \n}`); 208 | await delay(ranSleep); 209 | } while(Targetfeed.isMoreAvailable()); 210 | } catch (err) { 211 | console.log(err); 212 | } 213 | } 214 | 215 | console.log(chalk` 216 | {bold.cyan 217 | —————————————————— [INFORMATION] ———————————————————— 218 | 219 | [?] {bold.green FFTauto | Using Account/User Target!} 220 | [?] {bold.green Gunakan komen.txt untk komen!} 221 | 222 | 223 | —————————————————— [THANKS TO] ———————————————————— 224 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 225 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 226 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 227 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 228 | ————————————————————————————————————————————————————— 229 | What's new? 230 | 1. Input Target/delay Manual (ITTYW) 231 | —————————————————————————————————————————————————————} 232 | `); 233 | 234 | inquirer.prompt(User) 235 | .then(answers => { 236 | Excute({ 237 | username:answers.username, 238 | password:answers.password 239 | },answers.target,answers.sleep,answers.mysyntx); 240 | }) 241 | -------------------------------------------------------------------------------- /fl.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'mysyntx', 41 | message:'[>] Input Total of Target You Want (ITTYW):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Use Number Only!'; 46 | } 47 | }, 48 | { 49 | type:'input', 50 | name:'sleep', 51 | message:'[>] Insert Sleep (MiliSeconds):', 52 | validate: function(value){ 53 | value = value.match(/[0-9]/); 54 | if (value) return true; 55 | return 'Delay is number'; 56 | } 57 | } 58 | ] 59 | 60 | const Login = async function(User){ 61 | 62 | const Device = new Client.Device(User.username); 63 | const Storage = new Client.CookieMemoryStorage(); 64 | const session = new Client.Session(Device, Storage); 65 | 66 | try { 67 | await Client.Session.create(Device, Storage, User.username, User.password) 68 | const account = await session.getAccount(); 69 | return Promise.resolve({session,account}); 70 | } catch (err) { 71 | return Promise.reject(err); 72 | } 73 | 74 | } 75 | 76 | const Target = async function(username){ 77 | const url = 'https://www.instagram.com/'+username+'/' 78 | const option = { 79 | url: url, 80 | method: 'GET' 81 | } 82 | try{ 83 | const account = await rp(option); 84 | const data = S(account).between('').s 85 | const json = JSON.parse(data); 86 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 87 | return Promise.reject('Target is private Account'); 88 | } else { 89 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 90 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 91 | return Promise.resolve({id,followers}); 92 | } 93 | } catch (err){ 94 | return Promise.reject(err); 95 | } 96 | 97 | } 98 | 99 | async function ngefollow(session,accountId){ 100 | try { 101 | await Client.Relationship.create(session, accountId); 102 | return true 103 | } catch (e) { 104 | return false 105 | } 106 | } 107 | 108 | async function ngeComment(session, id, text){ 109 | try { 110 | await Client.Comment.create(session, id, text); 111 | return true; 112 | } catch(e){ 113 | return false; 114 | } 115 | } 116 | 117 | async function ngeLike(session, id){ 118 | try{ 119 | await Client.Like.create(session, id) 120 | return true; 121 | } catch(e) { 122 | return false; 123 | } 124 | } 125 | 126 | const FollowAndLike = async function(session, accountId){ 127 | var result; 128 | 129 | const feed = new Client.Feed.UserMedia(session, accountId); 130 | 131 | try { 132 | result = await feed.get(); 133 | } catch (err) { 134 | return chalk`{bold.red ${err}}`; 135 | } 136 | 137 | if (result.length > 0) { 138 | const task = [ 139 | ngefollow(session, accountId), 140 | ngeLike(session, result[0].params.id) 141 | ] 142 | const [Follow,Like] = await Promise.all(task); 143 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 144 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 145 | return chalk`{bold.green ${printFollow} | ${printLike} }`; 146 | } 147 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 148 | }; 149 | 150 | const Followers = async function(session, id){ 151 | const feed = new Client.Feed.AccountFollowers(session, id); 152 | try{ 153 | const Pollowers = []; 154 | var cursor; 155 | do { 156 | if (cursor) feed.setCursor(cursor); 157 | const getPollowers = await feed.get(); 158 | await Promise.all(getPollowers.map(async(akun) => { 159 | Pollowers.push(akun.id); 160 | })) 161 | cursor = await feed.getCursor(); 162 | } while(feed.isMoreAvailable()); 163 | return Promise.resolve(Pollowers); 164 | } catch(err){ 165 | return Promise.reject(err); 166 | } 167 | } 168 | 169 | const Excute = async function(User, TargetUsername, Sleep, mysyntx){ 170 | try { 171 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 172 | const doLogin = await Login(User); 173 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 174 | const getTarget = await Target(TargetUsername); 175 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 176 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 177 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 178 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 179 | var TargetCursor; 180 | do { 181 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 182 | var TargetResult = await Targetfeed.get(); 183 | TargetResult = _.chunk(TargetResult, mysyntx); 184 | for (let i = 0; i < TargetResult.length; i++) { 185 | var timeNow = new Date(); 186 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 187 | await Promise.all(TargetResult[i].map(async(akun) => { 188 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 189 | const ngeDo = await FollowAndLike(doLogin.session, akun.id) 190 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 191 | } else { 192 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 193 | } 194 | })); 195 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 196 | await delay(Sleep); 197 | } 198 | TargetCursor = await Targetfeed.getCursor(); 199 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 200 | await delay(Sleep); 201 | } while(Targetfeed.isMoreAvailable()); 202 | } catch (err) { 203 | console.log(err); 204 | } 205 | } 206 | 207 | console.log(chalk` 208 | {bold.cyan 209 | —————————————————— [INFORMATION] ———————————————————— 210 | 211 | [?] {bold.green FFTauto | Using Account/User Target!} 212 | 213 | —————————————————— [THANKS TO] ———————————————————— 214 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 215 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 216 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 217 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 218 | ————————————————————————————————————————————————————— 219 | What's new? 220 | 1. Input Target/delay Manual (ITTYW) 221 | —————————————————————————————————————————————————————} 222 | `); 223 | //ikiganteng 224 | inquirer.prompt(User) 225 | .then(answers => { 226 | Excute({ 227 | username:answers.username, 228 | password:answers.password 229 | },answers.target,answers.sleep,answers.mysyntx); 230 | }) 231 | -------------------------------------------------------------------------------- /flaauto.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const chalk = require('chalk'); 5 | const delay = require('delay'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const question = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'locationId', 32 | message:'[>] Insert Location ID:', 33 | validate: function(value){ 34 | value = value.match(/[0-9]/); 35 | if (value) return true; 36 | return 'Delay is number'; 37 | } 38 | }, 39 | { 40 | type:'input', 41 | name:'text', 42 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 43 | validate: function(value){ 44 | if(!value) return 'Can\'t Empty'; 45 | return true; 46 | } 47 | }, 48 | { 49 | type:'input', 50 | name:'sleep', 51 | message:'[>] Insert Sleep (MiliSeconds):', 52 | validate: function(value){ 53 | value = value.match(/[0-9]/); 54 | if (value) return true; 55 | return 'Delay is number'; 56 | } 57 | } 58 | ] 59 | 60 | 61 | const doLogin = async (params) => { 62 | const Device = new Client.Device(params.username); 63 | const Storage = new Client.CookieMemoryStorage(); 64 | const session = new Client.Session(Device, Storage); 65 | try { 66 | await Client.Session.create(Device, Storage, params.username, params.password) 67 | const account = await session.getAccount(); 68 | return Promise.resolve({session,account}); 69 | } catch (err) { 70 | return Promise.reject(err); 71 | } 72 | } 73 | 74 | const grabFollowers = async (session, id) => { 75 | const feed = new Client.Feed.AccountFollowers(session, id); 76 | try{ 77 | feed.map = item => item.params; 78 | return Promise.resolve(feed.all()); 79 | }catch (e){ 80 | return Promise.reject(err); 81 | } 82 | } 83 | 84 | const doFollow = async (session, id) => { 85 | try { 86 | await Client.Relationship.create(session, id); 87 | return true; 88 | } catch (e) { 89 | return false; 90 | } 91 | } 92 | 93 | const doComment = async (session, id, text) => { 94 | try { 95 | await Client.Comment.create(session, id, text); 96 | return true; 97 | } catch(e){ 98 | return false; 99 | } 100 | } 101 | 102 | const doLike = async (session, id) => { 103 | try{ 104 | await Client.Like.create(session, id); 105 | return true; 106 | } catch(e) { 107 | return false; 108 | } 109 | } 110 | 111 | const doAction = async (session, params, text) => { 112 | const task = [ 113 | doFollow(session, params.account.id), 114 | doLike(session, params.id), 115 | doComment(session, params.id, text) 116 | ]; 117 | var [Follow,Like,Comment] = await Promise.all(task); 118 | Follow = Follow ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 119 | Comment = Comment ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 120 | Like = Like ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 121 | return chalk`[Follow: ${Follow}] [Like: ${Like}] [Comment: ${Comment} ({cyan ${text}})]`; 122 | } 123 | 124 | const doMain = async (account, locationid, sleep, text) => { 125 | console.log(chalk`\n{green [?] Try to Login ....}`); 126 | account = await doLogin(account); 127 | console.log(chalk`{bold.green [!] Login Success!}`) 128 | const feed = new Client.Feed.LocationMedia(account.session, locationid); 129 | console.log(chalk`{green [?] Try Follow, Like and Comment All Account In LocationId: ${locationid}\n}`); 130 | try { 131 | var cursor; 132 | var count = 0; 133 | do { 134 | if (cursor) feed.setCursor(cursor); 135 | count++; 136 | const media = await feed.get(); 137 | console.log(chalk`[Cursor: {bold.cyan ${cursor ? cursor : 'null'}} | Count: {bold.cyan ${count}} | Total Media: {bold.cyan ${media.length}} | Delay: ${sleep} MiliSeconds ]`); 138 | var timeNow = new Date(); 139 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 140 | await Promise.all(media.map(async(media)=>{ 141 | const ranText = text[Math.floor(Math.random() * text.length)]; 142 | const resultAction = await doAction(account.session, media.params, ranText); 143 | console.log(chalk`[{magenta ${timeNow}}] ${media.id} | {cyanBright @${media.params.account.username}} => ${resultAction}`); 144 | })) 145 | await delay(sleep); 146 | cursor = await feed.getCursor(); 147 | } while(feed.isMoreAvailable()); 148 | } catch(e) { 149 | console.log(e); 150 | } 151 | } 152 | 153 | console.log(chalk` 154 | {bold.cyan 155 | —————————————————— [INFORMATION] ———————————————————— 156 | 157 | [?] {bold.green FLA | Using Location Media Target!} 158 | 159 | —————————————————— [THANKS TO] ———————————————————— 160 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 161 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 162 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 163 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 164 | —————————————————————————————————————————————————————} 165 | `); 166 | 167 | inquirer.prompt(question) 168 | .then(answers => { 169 | var text = answers.text.split('|'); 170 | doMain({ 171 | username:answers.username, 172 | password:answers.password}, answers.locationId, answers.sleep, text); 173 | }) 174 | .catch(e => { 175 | console.log(e); 176 | }) 177 | -------------------------------------------------------------------------------- /flm.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Link Media:', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | const Login = async function(User){ 70 | 71 | const Device = new Client.Device(User.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | 75 | try { 76 | await Client.Session.create(Device, Storage, User.username, User.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | 83 | } 84 | 85 | const Target = async function(link){ 86 | const url = link+'?__a=1' 87 | const option = { 88 | url: url, 89 | method: 'GET' 90 | } 91 | try{ 92 | const account = await rp(option); 93 | const data = S(account).between('').s 94 | const json = JSON.parse(data); 95 | return Promise.resolve(json.entry_data.PostPage[0].graphql.shortcode_media.id); 96 | } catch (err){ 97 | return Promise.reject(err); 98 | } 99 | 100 | } 101 | 102 | async function ngefollow(session,accountId){ 103 | try { 104 | await Client.Relationship.create(session, accountId); 105 | return true 106 | } catch (e) { 107 | return false 108 | } 109 | } 110 | 111 | async function ngeComment(session, id, text){ 112 | try { 113 | await Client.Comment.create(session, id, text); 114 | return true; 115 | } catch(e){ 116 | return false; 117 | } 118 | } 119 | 120 | async function ngeLike(session, id){ 121 | try{ 122 | await Client.Like.create(session, id) 123 | return true; 124 | } catch(e) { 125 | return false; 126 | } 127 | } 128 | 129 | const CommentAndLike = async function(session, accountId, text){ 130 | var result; 131 | 132 | const feed = new Client.Feed.UserMedia(session, accountId); 133 | 134 | try { 135 | result = await feed.get(); 136 | } catch (err) { 137 | return chalk`{bold.red ${err}}`; 138 | } 139 | 140 | if (result.length > 0) { 141 | if (result[0].params.hasLiked) { 142 | return chalk`{bold.blue Already Follow,Liked & Comment}`; 143 | } 144 | const task = [ 145 | ngefollow(session, accountId), 146 | ngeComment(session, result[0].params.id, text), 147 | ] 148 | const [Follow,Comment,Like] = await Promise.all(task); 149 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 150 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 151 | return chalk`{bold.green ${printFollow},${printComment} [${text}]}`; 152 | } 153 | return chalk`{bold.cyan Timeline Kosong (SKIPPED)}` 154 | }; 155 | 156 | const Followers = async function(session, id){ 157 | const feed = new Client.Feed.AccountFollowers(session, id); 158 | try{ 159 | const Pollowers = []; 160 | var cursor; 161 | do { 162 | if (cursor) feed.setCursor(cursor); 163 | const getPollowers = await feed.get(); 164 | await Promise.all(getPollowers.map(async(akun) => { 165 | Pollowers.push(akun.id); 166 | })) 167 | cursor = await feed.getCursor(); 168 | } while(feed.isMoreAvailable()); 169 | return Promise.resolve(Pollowers); 170 | } catch(err){ 171 | return Promise.reject(err); 172 | } 173 | } 174 | 175 | const Excute = async function(User, TargetUsername, Text, Sleep, mysyntx){ 176 | try { 177 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 178 | const doLogin = await Login(User); 179 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get Link & Media ID Target . . .}`) 180 | const getTarget = await Target(TargetUsername); 181 | console.log(chalk`{green [!] ${TargetUsername} [${getTarget}]}`); 182 | const getFollowers = await Followers(doLogin.session, doLogin.account.id); 183 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 184 | var TargetResult = await Client.Media.likers(doLogin.session, getTarget); 185 | TargetResult = _.chunk(TargetResult, mysyntx); 186 | for (var i = 0; i < TargetResult.length; i++) { 187 | var timeNow = new Date(); 188 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 189 | await Promise.all(TargetResult[i].map(async(akun) => { 190 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 191 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 192 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, ranText) 193 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]} @${akun.params.username} => ${ngeDo}`) 194 | } else { 195 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIPPED]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 196 | } 197 | })); 198 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 199 | await delay(Sleep); 200 | } 201 | } catch (err) { 202 | console.log(err); 203 | } 204 | } 205 | 206 | console.log(chalk` 207 | {bold.cyan 208 | —————————————————— [INFORMATION] ———————————————————— 209 | 210 | [?] {bold.green FLMauto | Using Media/Link Target} 211 | 212 | —————————————————— [THANKS TO] ———————————————————— 213 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 214 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 215 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 216 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 217 | ————————————————————————————————————————————————————— 218 | What's new? 219 | 1. Input Target/delay Manual (ITTYW) 220 | —————————————————————————————————————————————————————} 221 | `); 222 | 223 | inquirer.prompt(User) 224 | .then(answers => { 225 | var text = answers.text.split('|'); 226 | Excute({ 227 | username:answers.username, 228 | password:answers.password 229 | },answers.target,text,answers.sleep,answers.mysyntx); 230 | }) 231 | -------------------------------------------------------------------------------- /flmauto.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Link Media:', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | const Login = async function(User){ 70 | 71 | const Device = new Client.Device(User.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | 75 | try { 76 | await Client.Session.create(Device, Storage, User.username, User.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | 83 | } 84 | 85 | const Target = async function(link){ 86 | const url = link+'?__a=1' 87 | const option = { 88 | url: url, 89 | method: 'GET' 90 | } 91 | try{ 92 | const account = await rp(option); 93 | const data = S(account).between('').s 94 | const json = JSON.parse(data); 95 | return Promise.resolve(json.entry_data.PostPage[0].graphql.shortcode_media.id); 96 | } catch (err){ 97 | return Promise.reject(err); 98 | } 99 | 100 | } 101 | 102 | async function ngefollow(session,accountId){ 103 | try { 104 | await Client.Relationship.create(session, accountId); 105 | return true 106 | } catch (e) { 107 | return false 108 | } 109 | } 110 | 111 | async function ngeComment(session, id, text){ 112 | try { 113 | await Client.Comment.create(session, id, text); 114 | return true; 115 | } catch(e){ 116 | return false; 117 | } 118 | } 119 | 120 | async function ngeLike(session, id){ 121 | try{ 122 | await Client.Like.create(session, id) 123 | return true; 124 | } catch(e) { 125 | return false; 126 | } 127 | } 128 | 129 | const CommentAndLike = async function(session, accountId, text){ 130 | var result; 131 | 132 | const feed = new Client.Feed.UserMedia(session, accountId); 133 | 134 | try { 135 | result = await feed.get(); 136 | } catch (err) { 137 | return chalk`{bold.red ${err}}`; 138 | } 139 | 140 | if (result.length > 0) { 141 | if (result[0].params.hasLiked) { 142 | return chalk`{bold.blue Already Follow,Liked & Comment}`; 143 | } 144 | const task = [ 145 | ngefollow(session, accountId), 146 | ngeComment(session, result[0].params.id, text), 147 | ngeLike(session, result[0].params.id) 148 | ] 149 | const [Follow,Comment,Like] = await Promise.all(task); 150 | const printFollow = Follow ? chalk`{green Follow}` : chalk`{red Follow}`; 151 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 152 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 153 | return chalk`{bold.green ${printFollow},${printComment},${printLike} [${text}]}`; 154 | } 155 | return chalk`{bold.cyan Timeline Kosong (SKIPPED)}` 156 | }; 157 | 158 | const Followers = async function(session, id){ 159 | const feed = new Client.Feed.AccountFollowers(session, id); 160 | try{ 161 | const Pollowers = []; 162 | var cursor; 163 | do { 164 | if (cursor) feed.setCursor(cursor); 165 | const getPollowers = await feed.get(); 166 | await Promise.all(getPollowers.map(async(akun) => { 167 | Pollowers.push(akun.id); 168 | })) 169 | cursor = await feed.getCursor(); 170 | } while(feed.isMoreAvailable()); 171 | return Promise.resolve(Pollowers); 172 | } catch(err){ 173 | return Promise.reject(err); 174 | } 175 | } 176 | 177 | const Excute = async function(User, TargetUsername, Text, Sleep, mysyntx){ 178 | try { 179 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 180 | const doLogin = await Login(User); 181 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get Link & Media ID Target . . .}`) 182 | const getTarget = await Target(TargetUsername); 183 | console.log(chalk`{green [!] ${TargetUsername} [${getTarget}]}`); 184 | const getFollowers = await Followers(doLogin.session, doLogin.account.id); 185 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 186 | var TargetResult = await Client.Media.likers(doLogin.session, getTarget); 187 | TargetResult = _.chunk(TargetResult, mysyntx); 188 | for (var i = 0; i < TargetResult.length; i++) { 189 | var timeNow = new Date(); 190 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 191 | await Promise.all(TargetResult[i].map(async(akun) => { 192 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 193 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 194 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, ranText) 195 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]} @${akun.params.username} => ${ngeDo}`) 196 | } else { 197 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIPPED]}${akun.params.username} => PRIVATE OR ALREADY FOLLOWED`) 198 | } 199 | })); 200 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 201 | await delay(Sleep); 202 | } 203 | } catch (err) { 204 | console.log(err); 205 | } 206 | } 207 | 208 | console.log(chalk` 209 | {bold.cyan 210 | —————————————————— [INFORMATION] ———————————————————— 211 | 212 | [?] {bold.green FLMauto | Using Media/Link Target} 213 | 214 | —————————————————— [THANKS TO] ———————————————————— 215 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 216 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 217 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 218 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 219 | ————————————————————————————————————————————————————— 220 | What's new? 221 | 1. Input Target/delay Manual (ITTYW) 222 | —————————————————————————————————————————————————————} 223 | `); 224 | //ikiganteng 225 | inquirer.prompt(User) 226 | .then(answers => { 227 | var text = answers.text.split('|'); 228 | Excute({ 229 | username:answers.username, 230 | password:answers.password 231 | },answers.target,text,answers.sleep,answers.mysyntx); 232 | }) 233 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | //const insta = require('./func.js'); 4 | const Client = require('instagram-private-api').V1; 5 | const delay = require('delay'); 6 | const chalk = require('chalk'); 7 | const inquirer = require('inquirer'); 8 | //const Spinner = require('cli-spinner').Spinner; 9 | 10 | const questionTools = [ 11 | { 12 | type:"list", 13 | name:"Tools", 14 | message:"Select tools:", 15 | choices: 16 | [ 17 | "[1] Botlike v1", 18 | "[2] Botlike v2", 19 | "[3] Delete All Media", 20 | "[4] Unfollow All Following", 21 | "[5] Unfollow Not Followback", 22 | "[6] Follow Followers Target", 23 | "[7] Follow Account By Media", 24 | "[8] Follow Account By Hastag", 25 | "[9] Follow Account By Location", 26 | "[10] Follow Followers Target No Like", 27 | "[11] Follow Followers Target No Comment & Like", 28 | "[12] Bom Like Post Target", 29 | "[12] Bom Komen Post Target", 30 | "\n" 31 | ] 32 | } 33 | ] 34 | 35 | const main = async () => { 36 | var spinner; 37 | try{ 38 | var toolChoise = await inquirer.prompt(questionTools); 39 | toolChoise = toolChoise.Tools; 40 | switch(toolChoise){ 41 | case "[1] Botlike v1": 42 | const botlike = require('./botlike.js'); 43 | await botlike(); 44 | break; 45 | 46 | case "[2] Botlike v2": 47 | const botlike2 = require('./botlike2.js'); 48 | await botlike2(); 49 | break; 50 | 51 | case "[3] Delete All Media": 52 | const dellallphoto = require('./dellallphoto.js'); 53 | await dellallphoto(); 54 | break; 55 | 56 | case "[4] Unfollow All Following": 57 | const unfollall = require('./unfollall.js'); 58 | await unfollall(); 59 | break; 60 | 61 | case "[5] Unfollow Not Followback": 62 | const unfollnotfollback = require('./unfollnotfollback.js'); 63 | await unfollnotfollback(); 64 | break; 65 | 66 | case "[6] Follow Followers Target": 67 | const fftauto = require('./fftauto.js'); 68 | await fftauto(); 69 | break; 70 | 71 | case "[7] Follow Account By Media": 72 | const flmauto = require('./flmauto.js'); 73 | await flmauto(); 74 | break; 75 | 76 | case "[8] Follow Account By Hastag": 77 | const fah = require('./fah.js'); 78 | await fah(); 79 | break; 80 | 81 | case "[9] Follow Account By Location": 82 | const flaauto = require('./flaauto.js'); 83 | await flaauto(); 84 | break; 85 | 86 | case "[10] Follow Followers Target No Like": 87 | const fft = require('./fft.js'); 88 | await fft(); 89 | break; 90 | 91 | case "[11] Follow Followers Target No Comment & Like": 92 | const fftold = require('./fftold.js'); 93 | await fftold(); 94 | break; 95 | case "[12] Bom Like Post Target": 96 | const bomlike = require('./bomlike.js'); 97 | await bomlike(); 98 | break; 99 | case "[13] Bom Komen Post Target": 100 | const bomkomen = require('./bomkomen.js'); 101 | await bomkomen(); 102 | break; 103 | default: 104 | console.log('\nERROR:\n[?] Aw, Snap! \n[!] Something went wrong while displaying this program!\n[!] Please try again!'); 105 | } 106 | } catch(e) { 107 | //spinner.stop(true); 108 | //console.log(e); 109 | } 110 | } 111 | 112 | console.log(chalk` 113 | {bold.cyan 114 | ╦┌┐┌┌─┐┌┬┐┌─┐┌─┐┬─┐┌─┐┌┬┐ 115 | ║│││└─┐ │ ├─┤│ ┬├┬┘├─┤│││ 116 | ╩┘└┘└─┘ ┴ ┴ ┴└─┘┴└─┴ ┴┴ ┴ 117 | ╔╦╗┌─┐┌─┐┬ ┌─┐ © 2018 118 | ║ │ ││ ││ └─┐ SGBTeam 119 | ╩ └─┘└─┘┴─┘└─┘ ------- 120 | } 121 | `); 122 | 123 | main() 124 | -------------------------------------------------------------------------------- /komen.txt: -------------------------------------------------------------------------------- 1 | like back dan Follow back ya🙏 | follback dan like back🙏 | follback ya👌 | salken, follback dan like back ya👍 | salam kenal follback dan likeback ya kak👍 | orang mana? follback dan likeback ya👍 | salken ya, boleh minta follback dan likeback? | follback yo | follbackk | follback like back ya😀 | followback ya | udah aku follow dan like bisa minta follback dan likeback gak hehe | follback dan likeback yo kak udah difollow kok | follback dan likeback kak sudah aku follow dan like | bisa minta follow back kak hehe? | followback yo 😀 | salken, follback ya 🙂 | salken, follback aku yah | salken, btw follback ya | salken, follback juga yah hehe | salam kenal, follback yah hehe | bisa follback ? | follback yow | follback yapp | Follback hihihihi | follbackk saya ya 🙂 | Orang mana kak, like back dan Follback ya | Salam kenal kak hehe likeback dan follback ya | Salkus ya kak like back dan follback ya | Mari berteman kak,like back dan follback ya | Orang mana kak, Salam kenal ya, likeback dan Follback yaa | Orang mana kak?, likeback dan Follback dong | Namanya siapa, Salam kenal ya, like back dan follback ya | Saling follback ya kak, makasih | Orang mana kak, likeback dan Follbackdong hehehe | halo kak salken ya,, like back dan Follback ya | Mari berteman ya kak saling dan follback hehe | Kenalan dong kak heheh likeback dan follback ya rafz1104 | Likeback dan follback hihi salam kenal ya rafz1104 | Hallo kak salam kenal ya hehe likeback dan follback juga ya | Jangan lupa dukung Channel saya di Youtube, Class NIGHTCORE | Dukung Youtube Class NIGHTCORE | Auto Follow by youtube Class NIGHTCORE | Hai saya menggunakan auto follow dari Youtube Class NIGHTCORE, jangan lupa subscribe yah | auto follow tutorial by Class NIGHTCORE 2 | -------------------------------------------------------------------------------- /komenlike.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | var fs = require('fs'), 9 | request = require('request'); 10 | 11 | const question = [ 12 | { 13 | type:'input', 14 | name:'username', 15 | message:'[>] Insert Username:', 16 | validate: function(value){ 17 | if(!value) return 'Can\'t Empty'; 18 | return true; 19 | } 20 | }, 21 | { 22 | type:'password', 23 | name:'password', 24 | message:'[>] Insert Password:', 25 | mask:'*', 26 | validate: function(value){ 27 | if(!value) return 'Can\'t Empty'; 28 | return true; 29 | } 30 | }, 31 | { 32 | type:'input', 33 | name:'hastag', 34 | message:'[>] Insert Hashtag (Without #):', 35 | validate: function(value){ 36 | if(!value) return 'Can\'t Empty'; 37 | return true; 38 | } 39 | }, 40 | { 41 | type:'input', 42 | name:'text', 43 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 44 | validate: function(value){ 45 | if(!value) return 'Can\'t Empty'; 46 | return true; 47 | } 48 | }, 49 | { 50 | type:'input', 51 | name:'mysyntx', 52 | message:'[>] Input Total of Target You Want (ITTYW):', 53 | validate: function(value){ 54 | value = value.match(/[0-9]/); 55 | if (value) return true; 56 | return 'Use Number Only!'; 57 | } 58 | }, 59 | { 60 | type:'input', 61 | name:'sleep', 62 | message:'[>] Insert Sleep (In MiliSeconds)', 63 | validate: function(value){ 64 | value = value.match(/[0-9]/); 65 | if (value) return true; 66 | return 'Delay is number'; 67 | } 68 | } 69 | ] 70 | 71 | const doLogin = async (params) => { 72 | const Device = new Client.Device(params.username); 73 | const Storage = new Client.CookieMemoryStorage(); 74 | const session = new Client.Session(Device, Storage); 75 | try { 76 | await Client.Session.create(Device, Storage, params.username, params.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | } 83 | 84 | async function ngeComment(session, id, text){ 85 | try { 86 | await Client.Comment.create(session, id, text); 87 | return true; 88 | } catch(e){ 89 | return false; 90 | } 91 | } 92 | 93 | async function ngeLike(session, id){ 94 | try{ 95 | await Client.Like.create(session, id) 96 | return true; 97 | } catch(e) { 98 | return false; 99 | } 100 | } 101 | 102 | const doAction = async (session, params, text) => { 103 | if (params.hasLiked) { 104 | return chalk`{bold.blue Already Liked & Comment}`; 105 | } 106 | const task = [ 107 | ngeLike(session, params.id), 108 | ngeComment(session, params.id, text) 109 | ]; 110 | var [Like,Comment] = await Promise.all(task); 111 | Comment = Comment ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 112 | Like = Like ? chalk`{bold.green SUKSES}` : chalk`{bold.red GAGAL}`; 113 | return chalk`[Like: ${Like}] [Comment: ${Comment} ({cyan ${text}})]`; 114 | } 115 | 116 | 117 | const doMain = async (account, hastag, sleep, text, mysyntx) => { 118 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 119 | account = await doLogin(account); 120 | console.log(chalk`{green [!] Login Success!}`) 121 | const feed = new Client.Feed.TaggedMedia(account.session, hastag); 122 | console.log(chalk`{cyan [?] Like and Comment All Account In Hashtag: #${hastag}}`); 123 | try { 124 | var cursor; 125 | var count = 0; 126 | console.log(chalk`{yellow \n [#][>] START WITH RATIO ${mysyntx}/${sleep} MiliSeconds [<][#] \n}`) 127 | do { 128 | if (cursor) feed.setCursor(cursor); 129 | count++; 130 | var media = await feed.get(); 131 | media = _.chunk(media, mysyntx); 132 | for (media of media) { 133 | var timeNow = new Date(); 134 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 135 | await Promise.all(media.map(async(media)=>{ 136 | const ranText = text[Math.floor(Math.random() * text.length)]; 137 | const resultAction = await doAction(account.session, media.params, ranText); 138 | console.log(chalk`[{magenta ${timeNow}}] {cyanBright @${media.params.account.username}} \n=> ${resultAction}`); 139 | })) 140 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`) 141 | await delay(sleep); 142 | } 143 | cursor = await feed.getCursor(); 144 | console.log(chalk`[Cursor: {bold.cyan ${cursor ? cursor : 'null'}} | Count: {bold.cyan ${count}} | Total Media: {bold.cyan ${media.length}} | Delay: ${sleep} MiliSeconds ]`); 145 | } while(feed.isMoreAvailable()); 146 | } catch(e) { 147 | console.log(e); 148 | } 149 | } 150 | 151 | console.log(chalk` 152 | {bold.cyan 153 | —————————————————— [INFORMATION] ———————————————————— 154 | 155 | [?] {bold.green Comment & Like | Using Hastag Target!} 156 | [?] {bold.green Gunakan komen.txt untk komen!} 157 | 158 | —————————————————— [THANKS TO] ———————————————————— 159 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 160 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 161 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 162 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 163 | ————————————————————————————————————————————————————— 164 | What's new? 165 | 1. Input Target/delay Manual (ITTYW) 166 | —————————————————————————————————————————————————————} 167 | `); 168 | //ikiganteng 169 | inquirer.prompt(question) 170 | .then(answers => { 171 | var text = answers.text.split('|'); 172 | var hastag = answers.hastag.split('|'); 173 | doMain({ 174 | username:answers.username, 175 | password:answers.password},hastag,answers.sleep,text,answers.mysyntx); 176 | }) 177 | .catch(e => { 178 | console.log(e); 179 | }) 180 | -------------------------------------------------------------------------------- /likekomen.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const S = require('string'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'target', 32 | message:'[>] Insert Username Target (Without @[at]):', 33 | validate: function(value){ 34 | if(!value) return 'Can\'t Empty'; 35 | return true; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'text', 41 | message:'[>] Insert Text Comment (Use [|] if more than 1):', 42 | validate: function(value){ 43 | if(!value) return 'Can\'t Empty'; 44 | return true; 45 | } 46 | }, 47 | { 48 | type:'input', 49 | name:'mysyntx', 50 | message:'[>] Input Total of Target You Want (ITTYW):', 51 | validate: function(value){ 52 | value = value.match(/[0-9]/); 53 | if (value) return true; 54 | return 'Use Number Only!'; 55 | } 56 | }, 57 | { 58 | type:'input', 59 | name:'sleep', 60 | message:'[>] Insert Sleep (MiliSeconds):', 61 | validate: function(value){ 62 | value = value.match(/[0-9]/); 63 | if (value) return true; 64 | return 'Delay is number'; 65 | } 66 | } 67 | ] 68 | 69 | const Login = async function(User){ 70 | 71 | const Device = new Client.Device(User.username); 72 | const Storage = new Client.CookieMemoryStorage(); 73 | const session = new Client.Session(Device, Storage); 74 | 75 | try { 76 | await Client.Session.create(Device, Storage, User.username, User.password) 77 | const account = await session.getAccount(); 78 | return Promise.resolve({session,account}); 79 | } catch (err) { 80 | return Promise.reject(err); 81 | } 82 | 83 | } 84 | 85 | const Target = async function(username){ 86 | const url = 'https://www.instagram.com/'+username+'/' 87 | const option = { 88 | url: url, 89 | method: 'GET' 90 | } 91 | try{ 92 | const account = await rp(option); 93 | const data = S(account).between('').s 94 | const json = JSON.parse(data); 95 | if (json.entry_data.ProfilePage[0].graphql.user.is_private) { 96 | return Promise.reject('Target is private Account'); 97 | } else { 98 | const id = json.entry_data.ProfilePage[0].graphql.user.id; 99 | const followers = json.entry_data.ProfilePage[0].graphql.user.edge_followed_by.count; 100 | return Promise.resolve({id,followers}); 101 | } 102 | } catch (err){ 103 | return Promise.reject(err); 104 | } 105 | 106 | } 107 | 108 | async function ngefollow(session,accountId){ 109 | try { 110 | await Client.Relationship.create(session, accountId); 111 | return true 112 | } catch (e) { 113 | return false 114 | } 115 | } 116 | 117 | async function ngeComment(session, id, text){ 118 | try { 119 | await Client.Comment.create(session, id, text); 120 | return true; 121 | } catch(e){ 122 | return false; 123 | } 124 | } 125 | 126 | async function ngeLike(session, id){ 127 | try{ 128 | await Client.Like.create(session, id) 129 | return true; 130 | } catch(e) { 131 | return false; 132 | } 133 | } 134 | 135 | const CommentAndLike = async function(session, accountId, text){ 136 | var result; 137 | 138 | const feed = new Client.Feed.UserMedia(session, accountId); 139 | 140 | try { 141 | result = await feed.get(); 142 | } catch (err) { 143 | return chalk`{bold.red ${err}}`; 144 | } 145 | 146 | if (result.length > 0) { 147 | if (result[0].params.hasLiked) { 148 | return chalk`{bold.blue Already Liked & Comment}`; 149 | } 150 | const task = [ 151 | ngeComment(session, result[0].params.id, text), 152 | ngeLike(session, result[0].params.id) 153 | ] 154 | const [Comment,Like] = await Promise.all(task); 155 | const printComment = Comment ? chalk`{green Comment}` : chalk`{red Comment}`; 156 | const printLike = Like ? chalk`{green Like}` : chalk`{red Like}`; 157 | return chalk`{bold.green ${printComment},${printLike} [${text}]}`; 158 | } 159 | return chalk`{bold.white Timeline Kosong (SKIPPED)}` 160 | }; 161 | 162 | const Followers = async function(session, id){ 163 | const feed = new Client.Feed.AccountFollowers(session, id); 164 | try{ 165 | const Pollowers = []; 166 | var cursor; 167 | do { 168 | if (cursor) feed.setCursor(cursor); 169 | const getPollowers = await feed.get(); 170 | await Promise.all(getPollowers.map(async(akun) => { 171 | Pollowers.push(akun.id); 172 | })) 173 | cursor = await feed.getCursor(); 174 | } while(feed.isMoreAvailable()); 175 | return Promise.resolve(Pollowers); 176 | } catch(success){ 177 | return Promise.reject(success); 178 | } 179 | } 180 | 181 | const Excute = async function(User, TargetUsername, Text, Sleep, mysyntx){ 182 | try { 183 | console.log(chalk`{yellow \n [?] Try to Login . . .}`) 184 | const doLogin = await Login(User); 185 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try To Get ID & Followers Target . . .}`) 186 | const getTarget = await Target(TargetUsername); 187 | console.log(chalk`{green [!] ${TargetUsername}: [${getTarget.id}] | Followers: [${getTarget.followers}]}`) 188 | const getFollowers = await Followers(doLogin.session, doLogin.account.id) 189 | console.log(chalk`{cyan [?] Try to Follow, Comment, and Like Followers Target . . . \n}`) 190 | const Targetfeed = new Client.Feed.AccountFollowers(doLogin.session, getTarget.id); 191 | var TargetCursor; 192 | do { 193 | if (TargetCursor) Targetfeed.setCursor(TargetCursor); 194 | var TargetResult = await Targetfeed.get(); 195 | TargetResult = _.chunk(TargetResult, mysyntx); 196 | for (let i = 0; i < TargetResult.length; i++) { 197 | var timeNow = new Date(); 198 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 199 | await Promise.all(TargetResult[i].map(async(akun) => { 200 | if (!getFollowers.includes(akun.id) && akun.params.isPrivate === false) { 201 | var ranText = Text[Math.floor(Math.random() * Text.length)]; 202 | const ngeDo = await CommentAndLike(doLogin.session, akun.id, ranText) 203 | console.log(chalk`[{magenta ${timeNow}}] {bold.green [>]}${akun.params.username} => ${ngeDo}`) 204 | } else { 205 | console.log(chalk`[{magenta ${timeNow}}] {bold.yellow [SKIP]}${akun.params.username} => PRIVATE`) 206 | } 207 | })); 208 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 209 | await delay(Sleep); 210 | } 211 | TargetCursor = await Targetfeed.getCursor(); 212 | console.log(chalk`{yellow \n [#][>] Delay For ${Sleep} MiliSeconds [<][#] \n}`); 213 | await delay(Sleep); 214 | } while(Targetfeed.isMoreAvailable()); 215 | } catch (err) { 216 | console.log(err); 217 | } 218 | } 219 | 220 | console.log(chalk` 221 | {bold.cyan 222 | —————————————————— [INFORMATION] ———————————————————— 223 | 224 | [?] {bold.green Comment & Like | Using Account/User Target!} 225 | 226 | —————————————————— [THANKS TO] ———————————————————— 227 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 228 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 229 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 230 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 231 | ————————————————————————————————————————————————————— 232 | What's new? 233 | 1. Input Target/delay Manual (ITTYW) 234 | —————————————————————————————————————————————————————} 235 | `); 236 | //ikiganteng 237 | inquirer.prompt(User) 238 | .then(answers => { 239 | var text = answers.text.split('|'); 240 | Excute({ 241 | username:answers.username, 242 | password:answers.password 243 | },answers.target,text,answers.sleep,answers.mysyntx); 244 | }) 245 | -------------------------------------------------------------------------------- /node_modules.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClassNightcore/worktools/d62b5a55f166351ee6a6c63459a160ad5c053d40/node_modules.zip -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "instagram", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 11 | }, 12 | "ajv": { 13 | "version": "5.5.1", 14 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz", 15 | "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=", 16 | "requires": { 17 | "co": "4.6.0", 18 | "fast-deep-equal": "1.0.0", 19 | "fast-json-stable-stringify": "2.0.0", 20 | "json-schema-traverse": "0.3.1" 21 | } 22 | }, 23 | "ansi-escapes": { 24 | "version": "3.0.0", 25 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", 26 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" 27 | }, 28 | "ansi-regex": { 29 | "version": "3.0.0", 30 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 31 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 32 | }, 33 | "ansi-styles": { 34 | "version": "3.2.0", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 36 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 37 | "requires": { 38 | "color-convert": "1.9.1" 39 | } 40 | }, 41 | "asn1": { 42 | "version": "0.2.3", 43 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 44 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 45 | }, 46 | "assert-plus": { 47 | "version": "1.0.0", 48 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 49 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 50 | }, 51 | "asynckit": { 52 | "version": "0.4.0", 53 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 54 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 55 | }, 56 | "aws-sign2": { 57 | "version": "0.7.0", 58 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 59 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 60 | }, 61 | "aws4": { 62 | "version": "1.6.0", 63 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 64 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 65 | }, 66 | "bcrypt-pbkdf": { 67 | "version": "1.0.1", 68 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 69 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 70 | "optional": true, 71 | "requires": { 72 | "tweetnacl": "0.14.5" 73 | } 74 | }, 75 | "bignumber.js": { 76 | "version": "4.1.0", 77 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", 78 | "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" 79 | }, 80 | "bluebird": { 81 | "version": "3.5.1", 82 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 83 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 84 | }, 85 | "boom": { 86 | "version": "4.3.1", 87 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 88 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 89 | "requires": { 90 | "hoek": "4.2.0" 91 | } 92 | }, 93 | "camelcase": { 94 | "version": "4.1.0", 95 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 96 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 97 | }, 98 | "camelcase-keys": { 99 | "version": "4.2.0", 100 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", 101 | "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", 102 | "requires": { 103 | "camelcase": "4.1.0", 104 | "map-obj": "2.0.0", 105 | "quick-lru": "1.1.0" 106 | } 107 | }, 108 | "caseless": { 109 | "version": "0.12.0", 110 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 111 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 112 | }, 113 | "chalk": { 114 | "version": "2.3.0", 115 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 116 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 117 | "requires": { 118 | "ansi-styles": "3.2.0", 119 | "escape-string-regexp": "1.0.5", 120 | "supports-color": "4.5.0" 121 | } 122 | }, 123 | "chardet": { 124 | "version": "0.4.2", 125 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", 126 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" 127 | }, 128 | "cli-cursor": { 129 | "version": "2.1.0", 130 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 131 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 132 | "requires": { 133 | "restore-cursor": "2.0.0" 134 | } 135 | }, 136 | "cli-width": { 137 | "version": "2.2.0", 138 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 139 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" 140 | }, 141 | "clone": { 142 | "version": "1.0.3", 143 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", 144 | "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" 145 | }, 146 | "cls-bluebird": { 147 | "version": "1.1.3", 148 | "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-1.1.3.tgz", 149 | "integrity": "sha1-syY8EaCJsDlhhaG3q5BNkPAq1Cg=", 150 | "requires": { 151 | "is-bluebird": "1.0.2", 152 | "shimmer": "1.2.0" 153 | } 154 | }, 155 | "co": { 156 | "version": "4.6.0", 157 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 158 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 159 | }, 160 | "color-convert": { 161 | "version": "1.9.1", 162 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 163 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 164 | "requires": { 165 | "color-name": "1.1.3" 166 | } 167 | }, 168 | "color-name": { 169 | "version": "1.1.3", 170 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 171 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 172 | }, 173 | "combined-stream": { 174 | "version": "1.0.5", 175 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 176 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 177 | "requires": { 178 | "delayed-stream": "1.0.0" 179 | } 180 | }, 181 | "core-util-is": { 182 | "version": "1.0.2", 183 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 184 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 185 | }, 186 | "cryptiles": { 187 | "version": "3.1.2", 188 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 189 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 190 | "requires": { 191 | "boom": "5.2.0" 192 | }, 193 | "dependencies": { 194 | "boom": { 195 | "version": "5.2.0", 196 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 197 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 198 | "requires": { 199 | "hoek": "4.2.0" 200 | } 201 | } 202 | } 203 | }, 204 | "crypto-js": { 205 | "version": "3.1.8", 206 | "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", 207 | "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" 208 | }, 209 | "dashdash": { 210 | "version": "1.14.1", 211 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 212 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 213 | "requires": { 214 | "assert-plus": "1.0.0" 215 | } 216 | }, 217 | "delay": { 218 | "version": "2.0.0", 219 | "resolved": "https://registry.npmjs.org/delay/-/delay-2.0.0.tgz", 220 | "integrity": "sha1-kRLq3APk7H4AKXM3iW8nO72R+uU=", 221 | "requires": { 222 | "p-defer": "1.0.0" 223 | } 224 | }, 225 | "delayed-stream": { 226 | "version": "1.0.0", 227 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 228 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 229 | }, 230 | "ecc-jsbn": { 231 | "version": "0.1.1", 232 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 233 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 234 | "optional": true, 235 | "requires": { 236 | "jsbn": "0.1.1" 237 | } 238 | }, 239 | "escape-string-regexp": { 240 | "version": "1.0.5", 241 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 242 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 243 | }, 244 | "extend": { 245 | "version": "3.0.1", 246 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 247 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 248 | }, 249 | "external-editor": { 250 | "version": "2.1.0", 251 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", 252 | "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", 253 | "requires": { 254 | "chardet": "0.4.2", 255 | "iconv-lite": "0.4.19", 256 | "tmp": "0.0.33" 257 | } 258 | }, 259 | "extsprintf": { 260 | "version": "1.3.0", 261 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 262 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 263 | }, 264 | "fast-deep-equal": { 265 | "version": "1.0.0", 266 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 267 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 268 | }, 269 | "fast-json-stable-stringify": { 270 | "version": "2.0.0", 271 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 272 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 273 | }, 274 | "figures": { 275 | "version": "2.0.0", 276 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 277 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 278 | "requires": { 279 | "escape-string-regexp": "1.0.5" 280 | } 281 | }, 282 | "forever-agent": { 283 | "version": "0.6.1", 284 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 285 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 286 | }, 287 | "form-data": { 288 | "version": "2.3.1", 289 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 290 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 291 | "requires": { 292 | "asynckit": "0.4.0", 293 | "combined-stream": "1.0.5", 294 | "mime-types": "2.1.17" 295 | } 296 | }, 297 | "getpass": { 298 | "version": "0.1.7", 299 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 300 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 301 | "requires": { 302 | "assert-plus": "1.0.0" 303 | } 304 | }, 305 | "har-schema": { 306 | "version": "2.0.0", 307 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 308 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 309 | }, 310 | "har-validator": { 311 | "version": "5.0.3", 312 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 313 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 314 | "requires": { 315 | "ajv": "5.5.1", 316 | "har-schema": "2.0.0" 317 | } 318 | }, 319 | "has-flag": { 320 | "version": "2.0.0", 321 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 322 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" 323 | }, 324 | "hawk": { 325 | "version": "6.0.2", 326 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 327 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 328 | "requires": { 329 | "boom": "4.3.1", 330 | "cryptiles": "3.1.2", 331 | "hoek": "4.2.0", 332 | "sntp": "2.1.0" 333 | } 334 | }, 335 | "hoek": { 336 | "version": "4.2.0", 337 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 338 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 339 | }, 340 | "http-signature": { 341 | "version": "1.2.0", 342 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 343 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 344 | "requires": { 345 | "assert-plus": "1.0.0", 346 | "jsprim": "1.4.1", 347 | "sshpk": "1.13.1" 348 | } 349 | }, 350 | "iconv-lite": { 351 | "version": "0.4.19", 352 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 353 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 354 | }, 355 | "inquirer": { 356 | "version": "4.0.1", 357 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-4.0.1.tgz", 358 | "integrity": "sha512-HVU3eq/6DCt5Wkt46N6cooQBLlQy55UcmTGwMOe7XEmuxgdVjNxllS3pxrKDc8+OmNIbu+saotsCfH7m+IxHfg==", 359 | "requires": { 360 | "ansi-escapes": "3.0.0", 361 | "chalk": "2.3.0", 362 | "cli-cursor": "2.1.0", 363 | "cli-width": "2.2.0", 364 | "external-editor": "2.1.0", 365 | "figures": "2.0.0", 366 | "lodash": "4.17.4", 367 | "mute-stream": "0.0.7", 368 | "run-async": "2.3.0", 369 | "rx-lite": "4.0.8", 370 | "rx-lite-aggregates": "4.0.8", 371 | "string-width": "2.1.1", 372 | "strip-ansi": "4.0.0", 373 | "through": "2.3.8" 374 | } 375 | }, 376 | "instagram-private-api": { 377 | "version": "0.6.7", 378 | "resolved": "https://registry.npmjs.org/instagram-private-api/-/instagram-private-api-0.6.7.tgz", 379 | "integrity": "sha1-K9kZqYR1MvsSDHlHcBJ9481/pfo=", 380 | "requires": { 381 | "bluebird": "3.5.1", 382 | "camelcase-keys": "4.2.0", 383 | "crypto-js": "3.1.8", 384 | "is-stream": "1.1.0", 385 | "js-md5": "0.3.0", 386 | "json-bigint": "0.2.3", 387 | "lodash": "4.17.4", 388 | "node-cache": "3.2.1", 389 | "request": "2.83.0", 390 | "request-promise": "1.0.2", 391 | "socks5-https-client": "1.2.1", 392 | "touch": "1.0.0", 393 | "tough-cookie": "2.3.3", 394 | "tough-cookie-filestore": "0.0.1", 395 | "underscore.string": "3.3.4", 396 | "valid-url": "1.0.9" 397 | }, 398 | "dependencies": { 399 | "request-promise": { 400 | "version": "1.0.2", 401 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-1.0.2.tgz", 402 | "integrity": "sha1-FV9BBgjZJXwInB0LJvjY96iqhqE=", 403 | "requires": { 404 | "bluebird": "2.11.0", 405 | "cls-bluebird": "1.1.3", 406 | "lodash": "3.10.1", 407 | "request": "2.83.0" 408 | }, 409 | "dependencies": { 410 | "bluebird": { 411 | "version": "2.11.0", 412 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 413 | "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" 414 | }, 415 | "lodash": { 416 | "version": "3.10.1", 417 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 418 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" 419 | } 420 | } 421 | } 422 | } 423 | }, 424 | "ip-address": { 425 | "version": "5.8.8", 426 | "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.8.8.tgz", 427 | "integrity": "sha1-X9H490ZSSft9Kzwe7HtB0p0fG3Y=", 428 | "requires": { 429 | "jsbn": "0.1.0", 430 | "lodash.find": "4.6.0", 431 | "lodash.max": "4.0.1", 432 | "lodash.merge": "4.6.0", 433 | "lodash.padstart": "4.6.1", 434 | "lodash.repeat": "4.1.0", 435 | "sprintf-js": "1.1.1", 436 | "util-deprecate": "1.0.2" 437 | }, 438 | "dependencies": { 439 | "jsbn": { 440 | "version": "0.1.0", 441 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", 442 | "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=" 443 | } 444 | } 445 | }, 446 | "is-bluebird": { 447 | "version": "1.0.2", 448 | "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", 449 | "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" 450 | }, 451 | "is-fullwidth-code-point": { 452 | "version": "2.0.0", 453 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 454 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 455 | }, 456 | "is-promise": { 457 | "version": "2.1.0", 458 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 459 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 460 | }, 461 | "is-stream": { 462 | "version": "1.1.0", 463 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 464 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 465 | }, 466 | "is-typedarray": { 467 | "version": "1.0.0", 468 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 469 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 470 | }, 471 | "isstream": { 472 | "version": "0.1.2", 473 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 474 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 475 | }, 476 | "js-md5": { 477 | "version": "0.3.0", 478 | "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.3.0.tgz", 479 | "integrity": "sha1-VqbXADe8plr/fxTKQ3JOR6eCXRI=" 480 | }, 481 | "jsbn": { 482 | "version": "0.1.1", 483 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 484 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 485 | "optional": true 486 | }, 487 | "json-bigint": { 488 | "version": "0.2.3", 489 | "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.2.3.tgz", 490 | "integrity": "sha1-EY1/b/HThlnxn5TPc+ZKdaP5iKg=", 491 | "requires": { 492 | "bignumber.js": "4.1.0" 493 | } 494 | }, 495 | "json-schema": { 496 | "version": "0.2.3", 497 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 498 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 499 | }, 500 | "json-schema-traverse": { 501 | "version": "0.3.1", 502 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 503 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 504 | }, 505 | "json-stringify-safe": { 506 | "version": "5.0.1", 507 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 508 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 509 | }, 510 | "jsprim": { 511 | "version": "1.4.1", 512 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 513 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 514 | "requires": { 515 | "assert-plus": "1.0.0", 516 | "extsprintf": "1.3.0", 517 | "json-schema": "0.2.3", 518 | "verror": "1.10.0" 519 | } 520 | }, 521 | "lodash": { 522 | "version": "4.17.4", 523 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 524 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 525 | }, 526 | "lodash.find": { 527 | "version": "4.6.0", 528 | "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", 529 | "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=" 530 | }, 531 | "lodash.max": { 532 | "version": "4.0.1", 533 | "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", 534 | "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" 535 | }, 536 | "lodash.merge": { 537 | "version": "4.6.0", 538 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", 539 | "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=" 540 | }, 541 | "lodash.padstart": { 542 | "version": "4.6.1", 543 | "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", 544 | "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" 545 | }, 546 | "lodash.repeat": { 547 | "version": "4.1.0", 548 | "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", 549 | "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" 550 | }, 551 | "map-obj": { 552 | "version": "2.0.0", 553 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", 554 | "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" 555 | }, 556 | "mime-db": { 557 | "version": "1.30.0", 558 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 559 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 560 | }, 561 | "mime-types": { 562 | "version": "2.1.17", 563 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 564 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 565 | "requires": { 566 | "mime-db": "1.30.0" 567 | } 568 | }, 569 | "mimic-fn": { 570 | "version": "1.1.0", 571 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 572 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" 573 | }, 574 | "mute-stream": { 575 | "version": "0.0.7", 576 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 577 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" 578 | }, 579 | "node-cache": { 580 | "version": "3.2.1", 581 | "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-3.2.1.tgz", 582 | "integrity": "sha1-p5WNMqikLZEZziWYZWfqLF+WZ3M=", 583 | "requires": { 584 | "clone": "1.0.3", 585 | "lodash": "4.17.4" 586 | } 587 | }, 588 | "nopt": { 589 | "version": "1.0.10", 590 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 591 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 592 | "requires": { 593 | "abbrev": "1.1.1" 594 | } 595 | }, 596 | "oauth-sign": { 597 | "version": "0.8.2", 598 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 599 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 600 | }, 601 | "onetime": { 602 | "version": "2.0.1", 603 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 604 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 605 | "requires": { 606 | "mimic-fn": "1.1.0" 607 | } 608 | }, 609 | "os-tmpdir": { 610 | "version": "1.0.2", 611 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 612 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 613 | }, 614 | "p-defer": { 615 | "version": "1.0.0", 616 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 617 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" 618 | }, 619 | "performance-now": { 620 | "version": "2.1.0", 621 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 622 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 623 | }, 624 | "punycode": { 625 | "version": "1.4.1", 626 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 627 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 628 | }, 629 | "qs": { 630 | "version": "6.5.1", 631 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 632 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 633 | }, 634 | "quick-lru": { 635 | "version": "1.1.0", 636 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", 637 | "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" 638 | }, 639 | "request": { 640 | "version": "2.83.0", 641 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 642 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 643 | "requires": { 644 | "aws-sign2": "0.7.0", 645 | "aws4": "1.6.0", 646 | "caseless": "0.12.0", 647 | "combined-stream": "1.0.5", 648 | "extend": "3.0.1", 649 | "forever-agent": "0.6.1", 650 | "form-data": "2.3.1", 651 | "har-validator": "5.0.3", 652 | "hawk": "6.0.2", 653 | "http-signature": "1.2.0", 654 | "is-typedarray": "1.0.0", 655 | "isstream": "0.1.2", 656 | "json-stringify-safe": "5.0.1", 657 | "mime-types": "2.1.17", 658 | "oauth-sign": "0.8.2", 659 | "performance-now": "2.1.0", 660 | "qs": "6.5.1", 661 | "safe-buffer": "5.1.1", 662 | "stringstream": "0.0.5", 663 | "tough-cookie": "2.3.3", 664 | "tunnel-agent": "0.6.0", 665 | "uuid": "3.1.0" 666 | } 667 | }, 668 | "request-promise": { 669 | "version": "4.2.2", 670 | "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", 671 | "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", 672 | "requires": { 673 | "bluebird": "3.5.1", 674 | "request-promise-core": "1.1.1", 675 | "stealthy-require": "1.1.1", 676 | "tough-cookie": "2.3.3" 677 | } 678 | }, 679 | "request-promise-core": { 680 | "version": "1.1.1", 681 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", 682 | "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", 683 | "requires": { 684 | "lodash": "4.17.4" 685 | } 686 | }, 687 | "restore-cursor": { 688 | "version": "2.0.0", 689 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 690 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 691 | "requires": { 692 | "onetime": "2.0.1", 693 | "signal-exit": "3.0.2" 694 | } 695 | }, 696 | "run-async": { 697 | "version": "2.3.0", 698 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 699 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 700 | "requires": { 701 | "is-promise": "2.1.0" 702 | } 703 | }, 704 | "rx-lite": { 705 | "version": "4.0.8", 706 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 707 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" 708 | }, 709 | "rx-lite-aggregates": { 710 | "version": "4.0.8", 711 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 712 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 713 | "requires": { 714 | "rx-lite": "4.0.8" 715 | } 716 | }, 717 | "safe-buffer": { 718 | "version": "5.1.1", 719 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 720 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 721 | }, 722 | "shimmer": { 723 | "version": "1.2.0", 724 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.0.tgz", 725 | "integrity": "sha512-xTCx2vohXC2EWWDqY/zb4+5Mu28D+HYNSOuFzsyRDRvI/e1ICb69afwaUwfjr+25ZXldbOLyp+iDUZHq8UnTag==" 726 | }, 727 | "signal-exit": { 728 | "version": "3.0.2", 729 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 730 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 731 | }, 732 | "sntp": { 733 | "version": "2.1.0", 734 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 735 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 736 | "requires": { 737 | "hoek": "4.2.0" 738 | } 739 | }, 740 | "socks5-client": { 741 | "version": "1.2.5", 742 | "resolved": "https://registry.npmjs.org/socks5-client/-/socks5-client-1.2.5.tgz", 743 | "integrity": "sha512-0bRhfDRBHokTLEvEZYKtz0sssD54dGaTN3dD1oBIZtkDX60AqUYSJteavlRGPzO3c7le9WvLglMODc5u1X9Kxw==", 744 | "requires": { 745 | "ip-address": "5.8.8" 746 | } 747 | }, 748 | "socks5-https-client": { 749 | "version": "1.2.1", 750 | "resolved": "https://registry.npmjs.org/socks5-https-client/-/socks5-https-client-1.2.1.tgz", 751 | "integrity": "sha512-FbZ/X/2Xq3DAMhuRA4bnN0jy1QxaPTVPLFvyv6CEj0QDKSTdWp9yRxo1JhqXmWKhPQeJyUMajHJB2UjT43pFcw==", 752 | "requires": { 753 | "socks5-client": "1.2.5" 754 | } 755 | }, 756 | "sprintf-js": { 757 | "version": "1.1.1", 758 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", 759 | "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" 760 | }, 761 | "sshpk": { 762 | "version": "1.13.1", 763 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 764 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 765 | "requires": { 766 | "asn1": "0.2.3", 767 | "assert-plus": "1.0.0", 768 | "bcrypt-pbkdf": "1.0.1", 769 | "dashdash": "1.14.1", 770 | "ecc-jsbn": "0.1.1", 771 | "getpass": "0.1.7", 772 | "jsbn": "0.1.1", 773 | "tweetnacl": "0.14.5" 774 | } 775 | }, 776 | "stealthy-require": { 777 | "version": "1.1.1", 778 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 779 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" 780 | }, 781 | "string": { 782 | "version": "3.3.3", 783 | "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz", 784 | "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=" 785 | }, 786 | "string-width": { 787 | "version": "2.1.1", 788 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 789 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 790 | "requires": { 791 | "is-fullwidth-code-point": "2.0.0", 792 | "strip-ansi": "4.0.0" 793 | } 794 | }, 795 | "stringstream": { 796 | "version": "0.0.5", 797 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 798 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 799 | }, 800 | "strip-ansi": { 801 | "version": "4.0.0", 802 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 803 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 804 | "requires": { 805 | "ansi-regex": "3.0.0" 806 | } 807 | }, 808 | "supports-color": { 809 | "version": "4.5.0", 810 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 811 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 812 | "requires": { 813 | "has-flag": "2.0.0" 814 | } 815 | }, 816 | "through": { 817 | "version": "2.3.8", 818 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 819 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 820 | }, 821 | "tmp": { 822 | "version": "0.0.33", 823 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 824 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 825 | "requires": { 826 | "os-tmpdir": "1.0.2" 827 | } 828 | }, 829 | "touch": { 830 | "version": "1.0.0", 831 | "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", 832 | "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", 833 | "requires": { 834 | "nopt": "1.0.10" 835 | } 836 | }, 837 | "tough-cookie": { 838 | "version": "2.3.3", 839 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 840 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 841 | "requires": { 842 | "punycode": "1.4.1" 843 | } 844 | }, 845 | "tough-cookie-filestore": { 846 | "version": "0.0.1", 847 | "resolved": "https://registry.npmjs.org/tough-cookie-filestore/-/tough-cookie-filestore-0.0.1.tgz", 848 | "integrity": "sha1-C/IwjtKTpQugcz7X1iiWAUhVcLY=", 849 | "requires": { 850 | "tough-cookie": "0.12.1" 851 | }, 852 | "dependencies": { 853 | "tough-cookie": { 854 | "version": "0.12.1", 855 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz", 856 | "integrity": "sha1-giDH4hq9WxPZaAQlS9WoHr8sfWI=", 857 | "requires": { 858 | "punycode": "1.4.1" 859 | } 860 | } 861 | } 862 | }, 863 | "tunnel-agent": { 864 | "version": "0.6.0", 865 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 866 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 867 | "requires": { 868 | "safe-buffer": "5.1.1" 869 | } 870 | }, 871 | "tweetnacl": { 872 | "version": "0.14.5", 873 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 874 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 875 | "optional": true 876 | }, 877 | "underscore.string": { 878 | "version": "3.3.4", 879 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", 880 | "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", 881 | "requires": { 882 | "sprintf-js": "1.1.1", 883 | "util-deprecate": "1.0.2" 884 | } 885 | }, 886 | "util-deprecate": { 887 | "version": "1.0.2", 888 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 889 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 890 | }, 891 | "uuid": { 892 | "version": "3.1.0", 893 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 894 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 895 | }, 896 | "valid-url": { 897 | "version": "1.0.9", 898 | "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", 899 | "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" 900 | }, 901 | "verror": { 902 | "version": "1.10.0", 903 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 904 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 905 | "requires": { 906 | "assert-plus": "1.0.0", 907 | "core-util-is": "1.0.2", 908 | "extsprintf": "1.3.0" 909 | } 910 | } 911 | } 912 | } 913 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "instagram", 3 | "version": "1.0.0", 4 | "description": "Instagram Unfollow Not FollowBack", 5 | "main": "index.js", 6 | "dependencies": { 7 | "chalk": "^2.3.0", 8 | "delay": "^2.0.0", 9 | "inquirer": "^4.0.1", 10 | "instagram-private-api": "^0.6.7", 11 | "request": "^2.83.0", 12 | "request-promise": "^4.2.2", 13 | "string": "^3.3.3" 14 | }, 15 | "author": "CCOCOT" 16 | } 17 | -------------------------------------------------------------------------------- /unfollall.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const Client = require('instagram-private-api').V1; 4 | const delay = require('delay'); 5 | const chalk = require('chalk'); 6 | const _ = require('lodash'); 7 | const inquirer = require('inquirer'); 8 | 9 | const User = [ 10 | { 11 | type:'input', 12 | name:'username', 13 | message:'[>] Insert Username:', 14 | validate: function(value){ 15 | if(!value) return 'Can\'t Empty'; 16 | return true; 17 | } 18 | }, 19 | { 20 | type:'password', 21 | name:'password', 22 | message:'[>] Insert Password:', 23 | mask:'*', 24 | validate: function(value){ 25 | if(!value) return 'Can\'t Empty'; 26 | return true; 27 | } 28 | }, 29 | { 30 | type:'input', 31 | name:'mysyntx', 32 | message:'[>] Input Total of Target You Want (ITTYW):', 33 | validate: function(value){ 34 | value = value.match(/[0-9]/); 35 | if (value) return true; 36 | return 'Use Number Only!'; 37 | } 38 | }, 39 | { 40 | type:'input', 41 | name:'sleep', 42 | message:'[>] Insert Sleep (MiliSeconds):', 43 | validate: function(value){ 44 | value = value.match(/[0-9]/); 45 | if (value) return true; 46 | return 'Delay is number'; 47 | } 48 | } 49 | ] 50 | 51 | const Login = async function(User){ 52 | 53 | const Device = new Client.Device(User.username); 54 | const Storage = new Client.CookieMemoryStorage(); 55 | const session = new Client.Session(Device, Storage); 56 | 57 | try { 58 | await Client.Session.create(Device, Storage, User.username, User.password) 59 | const account = await session.getAccount(); 60 | return Promise.resolve({session,account}); 61 | } catch (err) { 62 | return Promise.reject(err); 63 | } 64 | 65 | } 66 | 67 | const Unfollow = async function(session, accountId){ 68 | try { 69 | await Client.Relationship.destroy(session, accountId); 70 | return chalk`{bold.green SUKSES}`; 71 | } catch (err){ 72 | return chalk`{bold.red GAGAL}`; 73 | } 74 | } 75 | 76 | const Excute = async function(User,sleep,mysyntx){ 77 | 78 | try { 79 | console.log(chalk`{yellow [?] Try to Login . . .}`); 80 | const doLogin = await Login(User); 81 | console.log(chalk`{green [!] Login Succsess, }{yellow [?] Try to Unfollow All Following . . .}`) 82 | const feed = new Client.Feed.AccountFollowing(doLogin.session, doLogin.account.id); 83 | var cursor; 84 | do{ 85 | if (cursor) feed.setCursor(cursor); 86 | var getPollowers = await feed.get(); 87 | getPollowers = _.chunk(getPollowers, mysyntx); 88 | for (let i = 0; i < getPollowers.length; i++) { 89 | var timeNow = new Date(); 90 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 91 | await Promise.all(getPollowers[i].map(async(account) => { 92 | const doUnfollow = await Unfollow(doLogin.session, account.id); 93 | console.log(chalk`[{magenta ${timeNow}}] Unfollow {yellow @${account.params.username}} => ${doUnfollow}`); 94 | })); 95 | console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`); 96 | await delay(sleep); 97 | } 98 | cursor = await feed.getCursor(); 99 | } while(feed.isMoreAvailable()) 100 | console.log(chalk`{bold.green [+] Unfollow All Succsess}`) 101 | } catch(e) { 102 | console.log(e) 103 | } 104 | } 105 | 106 | console.log(chalk` 107 | {bold.cyan 108 | —————————————————— [INFORMATION] ———————————————————— 109 | 110 | [?] {bold.green UNFALL | Unfollow All Following IG!} 111 | 112 | —————————————————— [THANKS TO] ———————————————————— 113 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 114 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 115 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 116 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 117 | ————————————————————————————————————————————————————— 118 | What's new? 119 | 1. Input Target/delay Manual (ITTYW) 120 | —————————————————————————————————————————————————————} 121 | `); 122 | 123 | inquirer.prompt(User) 124 | .then(answers => { 125 | Excute({ 126 | username:answers.username, 127 | password:answers.password 128 | },answers.sleep,answers.mysyntx); 129 | }) 130 | -------------------------------------------------------------------------------- /unfollnotfollback.js: -------------------------------------------------------------------------------- 1 | const Client = require('instagram-private-api').V1; 2 | const delay = require('delay'); 3 | const chalk = require('chalk'); 4 | const _ = require('lodash'); 5 | const rp = require('request-promise'); 6 | const inquirer = require('inquirer'); 7 | 8 | const User = [ 9 | { 10 | type:'input', 11 | name:'username', 12 | message:'[>] Insert Username:', 13 | validate: function(value){ 14 | if(!value) return 'Can\'t Empty'; 15 | return true; 16 | } 17 | }, 18 | { 19 | type:'password', 20 | name:'password', 21 | message:'[>] Insert Password:', 22 | mask:'*', 23 | validate: function(value){ 24 | if(!value) return 'Can\'t Empty'; 25 | return true; 26 | } 27 | }, 28 | { 29 | type:'input', 30 | name:'mysyntx', 31 | message:'[>] Input Total of Target You Want (ITTYW):', 32 | validate: function(value){ 33 | value = value.match(/[0-9]/); 34 | if (value) return true; 35 | return 'Use Number Only!'; 36 | } 37 | }, 38 | { 39 | type:'input', 40 | name:'sleep', 41 | message:'[>] Insert Sleep (MiliSeconds):', 42 | validate: function(value){ 43 | value = value.match(/[0-9]/); 44 | if (value) return true; 45 | return 'Delay is number'; 46 | } 47 | } 48 | ] 49 | 50 | const Login = async function(User){ 51 | 52 | const Device = new Client.Device(User.username); 53 | const Storage = new Client.CookieMemoryStorage(); 54 | const session = new Client.Session(Device, Storage); 55 | 56 | try { 57 | await Client.Session.create(Device, Storage, User.username, User.password) 58 | const account = await session.getAccount(); 59 | return Promise.resolve({session,account}); 60 | } catch (err) { 61 | return Promise.reject(err); 62 | } 63 | 64 | } 65 | 66 | const Followers = async function(session, id){ 67 | const feed = new Client.Feed.AccountFollowers(session, id); 68 | try{ 69 | const Pollowers = []; 70 | var cursor; 71 | do { 72 | if (cursor) feed.setCursor(cursor); 73 | const getPollowers = await feed.get(); 74 | await Promise.all(getPollowers.map(async(akun) => { 75 | Pollowers.push(akun.id); 76 | })) 77 | cursor = await feed.getCursor(); 78 | } while(feed.isMoreAvailable()); 79 | return Promise.resolve(Pollowers); 80 | } catch(err){ 81 | return Promise.reject(err); 82 | } 83 | } 84 | 85 | const Following = async function(session, id){ 86 | const feed = new Client.Feed.AccountFollowing(session, id); 87 | try{ 88 | const Pollowing = []; 89 | var cursor; 90 | do { 91 | if (cursor) feed.setCursor(cursor); 92 | const getPollowers = await feed.get(); 93 | await Promise.all(getPollowers.map(async(akun) => { 94 | Pollowing.push(akun.id); 95 | })) 96 | cursor = await feed.getCursor(); 97 | } while(feed.isMoreAvailable()); 98 | return Promise.resolve(Pollowing); 99 | } catch(err){ 100 | return Promise.reject(err); 101 | } 102 | } 103 | 104 | const Unfollow = async function(session, accountId){ 105 | try { 106 | await Client.Relationship.destroy(session, accountId); 107 | return chalk`{bold.green SUKSES}`; 108 | } catch (err){ 109 | return chalk`{bold.red GAGAL}`; 110 | } 111 | } 112 | 113 | const Excute = async function(User,sleep,mysyntx){ 114 | try { 115 | console.log(chalk`\n{yellow [?] Try to Login . . .}`); 116 | const doLogin = await Login(User); 117 | console.log(chalk`{green [!] Login Succsess}, {yellow [?] Try to get Followers and Following . . .}`); 118 | const task = [ 119 | Followers(doLogin.session, doLogin.account.id), 120 | Following(doLogin.session, doLogin.account.id) 121 | ] 122 | const [getFollowers, getFollowing] = await Promise.all(task); 123 | console.log(chalk`{bold.green | Followers : ${getFollowers.length}\n | Following : ${getFollowing.length}}`); 124 | var AccountToUnfollow = []; 125 | await Promise.all(getFollowing.map(async(account) => { 126 | if (!getFollowers.includes(account)) { 127 | await AccountToUnfollow.push(account); 128 | } 129 | })); 130 | console.log(chalk`{blue | Account To Unfollow : ${AccountToUnfollow.length}}`) 131 | AccountToUnfollow = _.chunk(AccountToUnfollow, mysyntx); 132 | for (let i = 0; i < AccountToUnfollow.length; i++) { 133 | var timeNow = new Date(); 134 | timeNow = `${timeNow.getHours()}:${timeNow.getMinutes()}:${timeNow.getSeconds()}` 135 | await Promise.all(AccountToUnfollow[i].map(async(akun) => { 136 | const doUnfollow = await Unfollow(doLogin.session, akun); 137 | console.log(chalk`[{magenta ${timeNow}}] Unfollow {blue [${akun}]} => ${doUnfollow}`); 138 | })) 139 | await console.log(chalk`{yellow \n [#][>] Delay For ${sleep} MiliSeconds [<][#] \n}`); 140 | await delay(sleep); 141 | } 142 | } catch(err) { 143 | console.log(err); 144 | } 145 | } 146 | 147 | console.log(chalk` 148 | {bold.cyan 149 | —————————————————— [INFORMATION] ———————————————————— 150 | 151 | [?] {bold.green UFNFB | Unfollow Not FollowBack!} 152 | 153 | —————————————————— [THANKS TO] ———————————————————— 154 | [✓] CODE BY CYBER SCREAMER CCOCOT (ccocot@bc0de.net) 155 | [✓] FIXING & TESTING BY SYNTAX (@officialputu_id) 156 | [✓] CCOCOT.CO | BC0DE.NET | NAONLAH.NET | WingkoColi 157 | [✓] SGB TEAM REBORN | Zerobyte.id | ccocot@bc0de.net 158 | ————————————————————————————————————————————————————— 159 | What's new? 160 | 1. Input Target/delay Manual (ITTYW) 161 | —————————————————————————————————————————————————————} 162 | `); 163 | 164 | inquirer.prompt(User) 165 | .then(answers => { 166 | Excute({ 167 | username:answers.username, 168 | password:answers.password 169 | },answers.sleep,answers.mysyntx); 170 | }) 171 | -------------------------------------------------------------------------------- /unli_bom.txt: -------------------------------------------------------------------------------- 1 | Cara buat sampe akar :v 2 | 3 | Cari 4 | - const Media 5 | Ganti jadi 6 | - const Media = async function(session, id){ 7 | const Media = new Client.Feed.UserMedia(session, id); 8 | 9 | try { 10 | const Poto = []; 11 | var cursor; 12 | do { 13 | if (cursor) Media.setCursor(cursor); 14 | const getPoto = await Media.get(); 15 | await Promise.all(getPoto.map(async(poto) => { 16 | Poto.push({ 17 | id:poto.id, 18 | link:poto.params.webLink 19 | }); 20 | })) 21 | cursor = await Media.getCursor() 22 | } while (Media.isMoreAvailable()); 23 | return Promise.resolve(Poto); 24 | } catch (err){ 25 | return Promise.reject(err); 26 | } 27 | } 28 | --------------------------------------------------------------------------------