From cbe03c59545f0d4929ff839d9fc3c3c30a5ebfea Mon Sep 17 00:00:00 2001 From: Mohammed Ashab Uddin Date: Mon, 20 Jul 2020 15:14:36 +0400 Subject: [PATCH] foundation is set --- whatsapp-web.js/index.js | 53 +++++++++++++++++++ whatsapp-web.js/package.json | 3 +- whatsapp-web.js/src/businessLogic/logic.js | 4 ++ whatsapp-web.js/src/models/product.js | 50 +++++++++++++++++ whatsapp-web.js/src/models/website.js | 23 ++++++++ .../src/userInteraction/commands.js | 23 ++++++++ .../src/userInteraction/messages.js | 52 ++++++++++++++++++ whatsapp-web.js/website_test.js | 1 + 8 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 whatsapp-web.js/index.js create mode 100644 whatsapp-web.js/src/businessLogic/logic.js create mode 100644 whatsapp-web.js/src/models/product.js create mode 100644 whatsapp-web.js/src/models/website.js create mode 100644 whatsapp-web.js/src/userInteraction/commands.js create mode 100644 whatsapp-web.js/src/userInteraction/messages.js diff --git a/whatsapp-web.js/index.js b/whatsapp-web.js/index.js new file mode 100644 index 0000000..518bc28 --- /dev/null +++ b/whatsapp-web.js/index.js @@ -0,0 +1,53 @@ +const fs = require('fs'); +var request = require('request'); +const { Client } = require('whatsapp-web.js'); +const onMessage = require('./src/userInteraction/messages'); + + + +const SESSION_FILE_PATH = './session.json'; +let sessionCfg; +if (fs.existsSync(SESSION_FILE_PATH)) +{ + sessionCfg = require(SESSION_FILE_PATH); +} + +const client = new Client({ puppeteer: { headless: false }, session: sessionCfg }); +client.initialize(); + + +client.on('qr', (qr) => +{ + console.log('QR RECEIVED', qr); +}); + +client.on('authenticated', (session) => +{ + console.log('AUTHENTICATED', session); + sessionCfg=session; + fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) { + if (err) + { + console.error(err); + } + }); +}); +client.on('auth_failure', (msg) => +{ + console.error('AUTHENTICATION FAILURE', msg); +}); +client.on('ready', () => +{ + console.log('READY'); +}); + +client.on('message', async (msg) => { + + onMessage(msg, client); + +}); + +client.on('disconnected', (reason) => +{ + console.log('Client was logged out', reason); +}); diff --git a/whatsapp-web.js/package.json b/whatsapp-web.js/package.json index ad71dfd..7a7dec6 100644 --- a/whatsapp-web.js/package.json +++ b/whatsapp-web.js/package.json @@ -4,7 +4,8 @@ "description": "", "main": "test.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "node website_test.js http://localhost:8004", + "start": "node index.js" }, "author": "", "license": "ISC", diff --git a/whatsapp-web.js/src/businessLogic/logic.js b/whatsapp-web.js/src/businessLogic/logic.js new file mode 100644 index 0000000..e349610 --- /dev/null +++ b/whatsapp-web.js/src/businessLogic/logic.js @@ -0,0 +1,4 @@ + +module.exports.onWG = () => { + console.log('hello world'); +} \ No newline at end of file diff --git a/whatsapp-web.js/src/models/product.js b/whatsapp-web.js/src/models/product.js new file mode 100644 index 0000000..4214921 --- /dev/null +++ b/whatsapp-web.js/src/models/product.js @@ -0,0 +1,50 @@ + +class Product { + + constructor({ id = '', name = '', desc = '', cost = 0, image = null }) { + this.id = id; + this.name = name; + this.desc = desc; + this.cost = cost; + this.image = image; + } + + getId(){ + return this.id; + } + + setName(name){ + this.name = name; + } + + getName(){ + return this.name; + } + + setDesc(desc){ + this.desc = desc; + } + + getDesc(){ + return this.desc; + } + + setCost(cost){ + this.cost = cost; + } + + getCost(){ + return this.cost; + } + + setImage(image){ + this.imageUrl = image; + } + + getImage(){ + return this.imageUrl; + } + +} + +module.exports.Product = Product; diff --git a/whatsapp-web.js/src/models/website.js b/whatsapp-web.js/src/models/website.js new file mode 100644 index 0000000..d13f47e --- /dev/null +++ b/whatsapp-web.js/src/models/website.js @@ -0,0 +1,23 @@ +const {Product} = require('./product'); + +class Website { + + /** + * @param {Map} details + */ + constructor(details){ + this.details = details; + this.products = []; + } + + /** + * + * @param {Product} product + */ + addProduct(product){ + this.products.push(product); + } + +} + +module.exports.Website = Website; \ No newline at end of file diff --git a/whatsapp-web.js/src/userInteraction/commands.js b/whatsapp-web.js/src/userInteraction/commands.js new file mode 100644 index 0000000..01dc992 --- /dev/null +++ b/whatsapp-web.js/src/userInteraction/commands.js @@ -0,0 +1,23 @@ +class Command{ + + + constructor({command, message, callback}){ + this.command = command; + this.message = message; + this.callback = callback; + } + + getCommand(){ + return this.command; + } + + getCallback(){ + return this.callback; + } + + getMessage(){ + return this.message; + } +} + +module.exports.Command = Command; diff --git a/whatsapp-web.js/src/userInteraction/messages.js b/whatsapp-web.js/src/userInteraction/messages.js new file mode 100644 index 0000000..1f39c14 --- /dev/null +++ b/whatsapp-web.js/src/userInteraction/messages.js @@ -0,0 +1,52 @@ + +const { Command } = require("./commands"); +const { onWG } = require("../businessLogic/logic"); + +/////////// +//add the commands here +/////////// +const commands = [ + + new Command({ + command: 'wg', + message : [ + `stop it and get some help by using the following command *wg help*`, + `Hope everything works well` + ] , + callback : () => { + onWG(); + } + }), + +]; + + + +module.exports= onMessage = (message, client) => { + + let command = null; + + //if the message start with wg then proceed + if(message.body.startsWith("wg")) + { + for (let c of commands){ + if(c.getCommand() == message.body) + { + command = c; + break; + } + } + + if(command != null){ + command.getCallback()(); + for (let msg of command.getMessage()) + { + client.sendMessage(message.from, msg, new Object()); + } + } + } + +}; + + +//export default onMessage; \ No newline at end of file diff --git a/whatsapp-web.js/website_test.js b/whatsapp-web.js/website_test.js index 06de5f9..53ea894 100644 --- a/whatsapp-web.js/website_test.js +++ b/whatsapp-web.js/website_test.js @@ -34,6 +34,7 @@ if (fs.existsSync(SESSION_FILE_PATH)) const client = new Client({ puppeteer: { headless: false }, session: sessionCfg }); client.initialize(); + client.on('qr', (qr) => { console.log('QR RECEIVED', qr);