"use strict"; const line = require("@line/bot-sdk"); const express = require("express"); const config = require("./config.json"); const bodyParser = require("body-parser"); const axios = require("axios"); const fs = require("fs"); const request = require("request"); const moment = require("moment"); const flexMsg = require("./flexMsg"); const ContentService = require("./services/ContentService"); const LineService = require("./services/LineService"); // create LINE SDK client const client = new line.Client(config); const app = express(); // webhook callback let debugMode = false; app.use("/webhook", line.middleware(config)); app.post("/webhook", (req, res) => { // req.body.events should be an array of events if (!Array.isArray(req.body.events)) { return res.status(500).end(); } console.log('req.body.events !',req.body.events) // handle events separately Promise.all( req.body.events.map((event) => { console.log("event", event); // check verify webhook event if ( event.replyToken === "00000000000000000000000000000000" || event.replyToken === "ffffffffffffffffffffffffffffffff" ) { return; } return handleEvent(event); }) ) .then(() => res.end()) .catch((err) => { console.error(err); res.status(500).end(); }); }); const handleEvent = (event) => { let payload = { type: "text", text: "Hello From PUI", }; if (event.type == "message" && event.message.type == "text") { let selecttext = String(event.message.text).toLowerCase(); let get_text = ContentService.mockText()[selecttext]; if (get_text) { payload = get_text; } } else { payload.text = "Other Message =>>>" + JSON.stringify(event); } console.log("SEND TO ==> " + JSON.stringify(payload)); return client.replyMessage(event.replyToken, payload); }; app.use(bodyParser.json()); app.get("/", (req, res) => { res.json({ line: "ok" }); }); app.post("/push", (req, res) => { let body = req.body; let { user_id, message } = body; console.log("push =>> body ::", body); if (!message) { message = { type: "text", text: `Push Message! to ${user_id}`, }; } client.pushMessage(user_id, message); res.json(message); }); app.post("/multicast", (req, res) => { let body = req.body; let { user_ids } = body; console.log("body ::", body); let message = [ { type: "text", text: `use multicast Message1! to ${JSON.stringify(user_ids)}`, }, { type: "text", text: `use multicast Message2! to ${JSON.stringify(user_ids)}`, }, ]; client.multicast(user_ids, message); res.json(message); }); app.post("/multicast", (req, res) => { let body = req.body; let { user_ids } = body; console.log("body ::", body); let message = [ { type: "text", text: `use multicast Message1! to ${JSON.stringify(user_ids)}`, }, { type: "text", text: `use multicast Message2! to ${JSON.stringify(user_ids)}`, }, ]; client.multicast(user_ids, message); res.json(message); }); app.post("/broadcast", async (req, res) => { let body = req.body; let { messages } = body; console.log("body ::", body); let resx = await LineService.Broadcast(messages); console.log("resx", resx); res.json({ message: "OK" }); }); app.post("/save", bodyParser.json(), async (req, res) => { console.log("saveFile!"); try { const downloadFile = function (uri, filename, callback) { request.head(uri, function (err, res, body) { console.log("content-type:", res.headers["content-type"]); console.log("content-length:", res.headers["content-length"]); console.log("Content-Type:", res.headers["Content-Type"]); console.log("res.headers ::", res.headers); request(uri, { headers: { Authorization: "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=", }, }) .pipe(fs.createWriteStream(filename)) .on("close", callback); }); }; let unquie_file = moment().format("YYYY-MM-DD_HHmmssss"); let file_name = `filesave_${unquie_file}`; let message_id = req.body.message_id; let URI = `https://api-data.line.me/v2/bot/message/${message_id}/content`; console.log("message_id ::", message_id); console.log("file_name ::", file_name); axios .get(URI, { headers: { Authorization: "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=", }, }) .then(function (response) { // handle success console.log("axios =>>", response.headers["content-type"]); let sp = response.headers["content-type"].split("/"); let type = sp[sp.length - 1]; let full_file_name = file_name + "." + type; console.log("full_file_name =", full_file_name); downloadFile(URI, full_file_name, function () { console.log("done!"); res.json({ LoadFlieName: "Success" }); }); }) .catch(function (error) { // handle error console.log(error); console.error("errorxx ::", error); res.json({ error: "error" }); }); } catch (error) { console.error("errorxx ::", error); } }); const port = config.port; app.listen(port, () => { console.log(`listening on ${port}`); });