1. Introduction
Have you ever wondered: How to read deleted messages on Facebook?
Do wives who want to manage their husbands text or flirt but can’t be online 24/24 with their husband’s account to check?
Or simply record the messages the other person removed from the message as evidence, depending on your purpose.
Note: This article does not help you to read previous messages (before the time you do the following)
2. The idea
The simple idea is to make a pike all the messages sent to your account and save it somewhere else.
3. Requirement
- Node.js version> 8
4. Brainstorming
Geez, what did this guy use the API API of the facebook guy called to play …
Oh no .. The Facebook Graph API is for accounts only a Page ..
Give up? Think of another way …. Create a login request on facebook and then get the message? Noooooo …
1 2 | Unauthorized Login detected <span class="token punctuation">.</span> Your account <span class="token keyword">is</span> temporarily locked <span class="token punctuation">.</span> |
Na nì ?? I heard that Facebook is also very secure … This song is tight, …. Log in with Facebook again, then facebook will force me to verify my identity and then unlock it
Facebook-chat-api
A few days after despairing about the phishing idea, wandering on the github, I saw a facebook-chat-api (Unofficial) repo that allowed me to manipulate most of the functions of facebook messenger.
Link repo: https://github.com/Schmavery/facebook-chat-api
Start to find out what kind of facebook login it is.
With some desciption on this repo, it will specifically simulate a browser to be able to login to facebook. => So that’s how it is. Fool your Facebook using a browser to login
5. Let’s give it a try
See repo or good then shake hands and do it .
Here I default that you are using Ubuntu and have Node.js version> 8 installed already on your computer.
If you do not have it installed, follow the instructions below:
Install node.js
1 2 3 | <span class="token function">sudo</span> <span class="token function">apt-get</span> update <span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> nodejs |
Install npm:
1 2 | sudo apt-get install npm |
Check if the installation was successful:
1 2 | nodejs -v |
If this is successful, then !!
Create a new folder to start doing
1 2 | mkdir <span class="token punctuation">.</span> <span class="token operator">/</span> justforfun |
Move to that directory with the following command:
1 2 | cd ./justforfun |
Init npm use the following command:
1 2 | npm init |
You will see that node_modules and package.log and pakage.json have been initialized in the directory. Next, we will try to install facebook-chat-api
1 2 | <span class="token function">npm</span> <span class="token function">install</span> facebook-chat-api |
Create a test file with the following command
1 2 | touch testlogin <span class="token punctuation">.</span> js |
Open the newly created file letter and add the following content:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create simple echo bot</span> <span class="token function">login</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> email <span class="token punctuation">:</span> <span class="token string">"FB_EMAIL"</span> <span class="token punctuation">,</span> password <span class="token punctuation">:</span> <span class="token string">"FB_PASSWORD"</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token keyword">return</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> api <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> message <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> api <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> message <span class="token punctuation">.</span> body <span class="token punctuation">,</span> message <span class="token punctuation">.</span> threadID <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In which replace FB_EMAIL
and FB_PASSWORD
with the email and password you login to facebook.
* Note: It looks good but haven’t run yet, bro =))
Test run with:
1 2 | node testlogin <span class="token punctuation">.</span> js |
And get the error:
1 2 3 4 | Logging in... You have login approvals turned on. Something went wrong with login approvals. |
Gosh, Facebook detected that I was logged in with a strange browser or it detected that I was logged in with facebook-chat-api and blocked the login.
For some accounts, this situation will be encountered, and my account was no exception
Back to facebook login with browser and it forced me to verify new identity … Haizzz ….
Find a solution
Continue reading Docs of this facebook-chat-api to see that it supports both login with 2 Factor Authentication
If you log in normally, facebook won’t allow you this time to force login with One-time-password (OTP).
The doctor proceeded to download the Google Authenticator App on his phone. Turn on 2-layer security of Facebook in Settings> Security and Login (Security and Login)
Select Use 2-factor authentication> Authentication application
Edit the testlogin.js
file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"fs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> readline <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"readline"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> rl <span class="token operator">=</span> readline <span class="token punctuation">.</span> <span class="token function">createInterface</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> input <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdin <span class="token punctuation">,</span> output <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdout <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span> email <span class="token punctuation">:</span> <span class="token string">"FB_EMAIL"</span> <span class="token punctuation">,</span> password <span class="token punctuation">:</span> <span class="token string">"FB_PASSWORD"</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token function">login</span> <span class="token punctuation">(</span> obj <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span> err <span class="token punctuation">.</span> error <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token string">'login-approval'</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Enter code > '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">on</span> <span class="token punctuation">(</span> <span class="token string">'line'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> err <span class="token punctuation">.</span> <span class="token keyword">continue</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">close</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">break</span> <span class="token punctuation">;</span> <span class="token keyword">default</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Logged in!</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Still replace FB_EMAIL
and FB_PASSWORD
with the email and password you log into facebook and go to the console to try:
1 2 | node testlogin <span class="token punctuation">.</span> js |
Go to the Google Authenticator App and enter the OTP code currently displayed and the result:
So finished login already
But every time I log in, I have to log in, I have to enter the 2-layer security code like this, it’s not very convenient …
But this package also supports us when we log in with cookies. We will proceed to login for the first time with the account and password as usual => Facebook returns cookies => we save it to use for the next batch of login.
We continue to fix the testlogin.js
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"fs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> readline <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"readline"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> rl <span class="token operator">=</span> readline <span class="token punctuation">.</span> <span class="token function">createInterface</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> input <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdin <span class="token punctuation">,</span> output <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdout <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span> email <span class="token punctuation">:</span> <span class="token string">"FB_EMAIL"</span> <span class="token punctuation">,</span> password <span class="token punctuation">:</span> <span class="token string">"FB_PASSWORD"</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token function">login</span> <span class="token punctuation">(</span> obj <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span> err <span class="token punctuation">.</span> error <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token string">'login-approval'</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Enter code > '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">on</span> <span class="token punctuation">(</span> <span class="token string">'line'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> err <span class="token punctuation">.</span> <span class="token keyword">continue</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">close</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">break</span> <span class="token punctuation">;</span> <span class="token keyword">default</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Logged in!</span> fs <span class="token punctuation">.</span> <span class="token function">writeFileSync</span> <span class="token punctuation">(</span> <span class="token string">'appstate.json'</span> <span class="token punctuation">,</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> api <span class="token punctuation">.</span> <span class="token function">getAppState</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
So after logging in, we will create a file and save the facebook cookie and the login code with the cookie might look like this:
1 2 3 4 5 6 7 8 | <span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"fs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">login</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> appState <span class="token punctuation">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">parse</span> <span class="token punctuation">(</span> fs <span class="token punctuation">.</span> <span class="token function">readFileSync</span> <span class="token punctuation">(</span> <span class="token string">'appstate.json'</span> <span class="token punctuation">,</span> <span class="token string">'utf8'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token keyword">return</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Here you can use the api</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Save the message to the database. (Google Sheet)
The poor don’t have enough rent for database server, so I have to choose google sheet as database.
You guys create a form using Google Form
Create the fields you want to save with the questions in the form.
Notice where you highlighted the address bar. The doctor took out the form id The doctor assigned it to the code below we will be a link to post data to:
1 2 3 | https://docs.google.com/forms/d/e/YOUR_FORM_ID_HERE/formResponse? // https://docs.google.com/forms/d/e/1V7ZsBG4wBXL0aYPldLgpdvAd8D01VMYS6PItxzxcH/formResponse? |
Switch to the response tab and select Create Spread-Sheet
And our sheet looks like this:
Continue to move on to the Google form section, select Preview (The eye image above)
On this tab, inspect the field names of the input fields that get these entries
Next go into the code because for added security we will create the following file:
1 2 3 4 | getappstate <span class="token punctuation">.</span> js appstate <span class="token punctuation">.</span> json worker <span class="token punctuation">.</span> js |
File getappstate.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"fs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> readline <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"readline"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> rl <span class="token operator">=</span> readline <span class="token punctuation">.</span> <span class="token function">createInterface</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> input <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdin <span class="token punctuation">,</span> output <span class="token punctuation">:</span> process <span class="token punctuation">.</span> stdout <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span> email <span class="token punctuation">:</span> process <span class="token punctuation">.</span> env <span class="token punctuation">.</span> <span class="token constant">USER_NAME</span> <span class="token punctuation">,</span> password <span class="token punctuation">:</span> process <span class="token punctuation">.</span> env <span class="token punctuation">.</span> <span class="token constant">USER_PASSWORD</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token function">login</span> <span class="token punctuation">(</span> obj <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">switch</span> <span class="token punctuation">(</span> err <span class="token punctuation">.</span> error <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">case</span> <span class="token string">'login-approval'</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Enter code > '</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">on</span> <span class="token punctuation">(</span> <span class="token string">'line'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> err <span class="token punctuation">.</span> <span class="token keyword">continue</span> <span class="token punctuation">(</span> line <span class="token punctuation">)</span> <span class="token punctuation">;</span> rl <span class="token punctuation">.</span> <span class="token function">close</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">break</span> <span class="token punctuation">;</span> <span class="token keyword">default</span> <span class="token punctuation">:</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> fs <span class="token punctuation">.</span> <span class="token function">writeFileSync</span> <span class="token punctuation">(</span> <span class="token string">'appstate.json'</span> <span class="token punctuation">,</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> api <span class="token punctuation">.</span> <span class="token function">getAppState</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
In which replace process.env.USER_NAME, process.env.USER_PASSWORD
with your facebook login account if you run it locally, and if to deploy onto a server, you should leave it in a certain .env file. (The code above is used to deploy to heroku)
File worker.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"fs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> login <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"facebook-chat-api"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">var</span> FormData <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'form-data'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">login</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> appState <span class="token punctuation">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">parse</span> <span class="token punctuation">(</span> fs <span class="token punctuation">.</span> <span class="token function">readFileSync</span> <span class="token punctuation">(</span> <span class="token string">'appstate.json'</span> <span class="token punctuation">,</span> <span class="token string">'utf8'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> api <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> api <span class="token punctuation">.</span> <span class="token function">setOptions</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> selfListen <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> logLevel <span class="token punctuation">:</span> <span class="token string">"silent"</span> <span class="token punctuation">,</span> updatePresence <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token keyword">return</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> api <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> message <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token keyword">return</span> console <span class="token punctuation">.</span> <span class="token function">error</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token operator">!</span> message <span class="token punctuation">.</span> isGroup <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token keyword">typeof</span> message <span class="token punctuation">.</span> body <span class="token operator">===</span> <span class="token string">"string"</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> form <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FormData</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> message <span class="token punctuation">.</span> attachments <span class="token punctuation">.</span> length <span class="token operator">==</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//Do nothing</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> message <span class="token punctuation">.</span> attachments <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> type <span class="token operator">===</span> <span class="token string">"photo"</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> form <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">"entry.1366768221"</span> <span class="token punctuation">,</span> message <span class="token punctuation">.</span> attachments <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> largePreviewUrl <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> form <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">"entry.1366768221"</span> <span class="token punctuation">,</span> message <span class="token punctuation">.</span> attachments <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> url <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> form <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">"entry.1524614322"</span> <span class="token punctuation">,</span> message <span class="token punctuation">.</span> threadID <span class="token punctuation">)</span> <span class="token punctuation">;</span> form <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">"entry.1184740740"</span> <span class="token punctuation">,</span> message <span class="token punctuation">.</span> senderID <span class="token punctuation">)</span> <span class="token punctuation">;</span> form <span class="token punctuation">.</span> <span class="token function">append</span> <span class="token punctuation">(</span> <span class="token string">"entry.520057091"</span> <span class="token punctuation">,</span> message <span class="token punctuation">.</span> body <span class="token punctuation">)</span> <span class="token punctuation">;</span> form <span class="token punctuation">.</span> <span class="token function">submit</span> <span class="token punctuation">(</span> <span class="token string">'https://docs.google.com/forms/d/e/1FAIpQLSdcjFkgt_sfsdHadsasd-dshrcv_frGXilUSab08tM_qA/formResponse?'</span> <span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> err <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> res <span class="token punctuation">.</span> statusCode <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
So the backend code part is done then. Let it run, guys do this turn.
1 2 3 | node getappstate <span class="token punctuation">.</span> js node worker <span class="token punctuation">.</span> js |
And enjoy the results.
6. Deploy to Heroku
If you want him to run 24/24, Deploy to Heroku.
Please install Heroku CLI:
1 2 | sudo snap install --classic heroku |
Create a Procfile file to define the worker.js
file that runs as a worker.
The file content is as follows:
1 2 | node worker <span class="token punctuation">.</span> js |
Conduct deploy: Create 1 project on Heroku, add remote for herokugit, guys refer to it online. On my computer:
Create .gitignore file and ignore /node_modules
.
1 2 | <span class="token function">git</span> init |
1 2 | <span class="token function">git</span> add <span class="token keyword">.</span> |
1 2 | <span class="token function">git</span> commit -m <span class="token string">"Init Project"</span> |
1 2 | <span class="token function">git</span> push heroku master |
Config environment variables for the project:
1 2 3 | heroku config <span class="token punctuation">:</span> set USER_NAME <span class="token operator">=</span> abcxyz <span class="token operator">@</span> gmail <span class="token punctuation">.</span> com heroku config <span class="token punctuation">:</span> set USER_PASSWORD <span class="token operator">=</span> abcxyz |
Replace abcxyz
with your user name and password
Get appstate:
1 2 | heroku run node getappstate <span class="token punctuation">.</span> js |
Go to heroku project> Resources and turn on the worker and enjoy the results!
Conclude:
I wish you success!
* Note: So there is data, how to display it depends on how you guys do the frontend. You can use other databases instead of google sheet like Mongo, Mysql, …
Google sheet also has a limit of 5 million Cells, guys.
Actually I am using DynamoDB and if anyone needs it, I can share the code.