codingprojecttutorial

Whatsapp bot advanced

A. Connect to database MySQL

    // inisalisasi
    const mysql = require('mysql');
    const conn = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '',
        database: 'database_name'
    }) 
    
    // connect to database
    conn.connect(function(err){
        if(err){ 
            throw err;
        }  
        console.log('db connected'); 
    })  

    function sqlRun(sql){
        return new Promise(function (resolve, reject){
            conn.query(sql, function (err, result){  

                if(err){
                    resolve(null);  
                } else if(result==''){ 
                     // masalah tidak null tapi kosong 
                    resolve(null);  
                } else{   
                    Object.keys(result).forEach(function(key) {
                        var row = result[key];
                        var xyz = row  
                        resolve(xyz) ;
                    });   
                } 
            })
        })      
    }    
    
    async function getData(){ 
        sql = `SELECT column_name FROM table_name`
        var data = await sqlRun(sql)
        
        if(data !== null){ 
             console.log(data['column_name']) 
        }
   }
   
   getData()

B. Set interval code excecution

    var minutes = 3, the_interval = minutes * 60 * 1000; 
    // this code will run every 3 minutes"); 
    setInterval(function() {   
        getData() 
    }, the_interval);

C. API Comsumtion

API Client di wa bot

const axios = require('axios');
var API_URL = 'https://domain.com/'
var API_KEY = 'api_key'  //jika ada

function stockGudangFull(){
    axios.get(API_URL+"stok_gudang",
    {
        params: { 'X-API-KEY': API_KEY }
    })
    .then( res => {   
        var date_stock= res.data.message.data_stock  
    })
    .catch(error => {
        console.log(error);
    })
}

API Host di web server

function stok_gudang_get(){   
    $data = array( 
        'data_stock'    => $this->M_Stok->stok_resume()->result(), 
    );
    $this->response([ 
        'status' => true,
        'message' => $data 
    ], RestController::HTTP_OK);     
}

D. html to image

buat folder images di folder root project.

// handling image
const nodeHtmlToImage = require('node-html-to-image') 
const puppeteer = { args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--no-first-run', '--headless', '--no-zygote', '--disable-gpu' ], headless: true, ignoreHTTPSErrors: true };

//get html
var dataHalfKab  = _stockKabHalfView(data)

//html to image
async function generateImage(){
  await nodeHtmlToImage({
     output: 'images/stock.png',
     html: dataHalfKab,
     puppeteerArgs: puppeteer,
     selector : '#tbl_1_0'
  }).then(() =>  
    //send image to wabot
      client.sendMessage(group_pic,  MessageMedia.fromFilePath('./images/stock_half_kab.png'), { caption: "Kabupaten" }  )
  ) 
}
 
  
//html style
function _style(){
    return style = 
    `<style>
        table {
            font-family: arial, sans-serif;
            border-collapse: collapse;
            width: 100%;
        } 
        .number{
        text-align: right;
        }
    </style>`
}

//html view
function _stockKabHalfView(data){
    
    let dataResult = '';
    var style = _style()
    
    dataResult += `<!DOCTYPE html>
        <html>
        <head>`+style+`</head>
        <body>
          <table id='tbl_1_0'>
            <thead>   
              <tr>
                <th class="tableth">No</th>
                <th class="tableth">Cluster</th>
                <th class="tableth">Kabupaten</th>
                <th class="tableth">TGL_Update</th>   
              </tr> 
            </thead>
        <tbody> `
        
    var no=0
    data.forEach(item =>{   
        no++ 
        dataResult += ` 
            <tr>
                <td class=" tabletd"><center>`+no+`</center></td>
                <td class=" tabletd">`+item.cluster_name+`</td>
                <td class=" tabletd">`+item.kabupaten+`</td>
                <td class=" tabletd">`+item.Tgl_Update+`</td>  
            </tr>`
    })
    
    dataResult += `   </tbody>
                    </table> 
                </body>  
            </html>`
                  
    return dataResult
}

Related Articles

Back to top button
Index