"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"); // create LINE SDK client const client = new line.Client(config); const app = express(); // webhook callback 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(); } // 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(); }); }); // simple reply function const replyText = (token, texts) => { texts = Array.isArray(texts) ? texts : [texts]; return client.replyMessage( token, texts.map((text) => ({ type: "text", text })) ); }; const tolow = (str) => { return str.toLowerCase(); }; const handleEvent = (event) => { let payload = { type: "text", text: "Hello From PUI", }; if (event.message.type == "text") { let selecttext = tolow(event.message.text); let get_text = mockText()[selecttext]; if (get_text) { payload = get_text; } } else { payload.text = "Other Message =>>>" + JSON.stringify(event); } return client.replyMessage(event.replyToken, payload); }; app.use(bodyParser.json()); app.get("/", (req, res) => { res.json({ line: "ok" }); }); app.get("/push", bodyParser.json(), (req, res) => { let message = { type: "text", text: `use Push Message! to `, }; client.pushMessage("Uaac2ca5a02feab67a18d5521b572b5aa", message); res.json(message); }); 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); } }); app.post("/saveNew", bodyParser.json(), async (req, res) => { console.log("saveFile!"); try { let stream = await client.getMessageContent("14955535936627"); console.log("stream!", stream); } catch (error) { console.error(error); } res.json({ OK: "OK" }); }); app.post("/push", (req, res) => { let body = req.body; let { user_id } = body; console.log("body ::", body); let message = { type: "text", text: `use 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); }); const port = config.port; app.listen(port, () => { console.log(`listening on ${port}`); }); const GenContentFlex = (content) => { return { flex1: { type: "flex", altText: "GenContentFlex!", contents: content, }, }; }; const genMsgContent = flexMsg.GenContentFlex; const flexs = flexMsg.flexs; // console.log(genMsgContent()); const mockText = () => { return { flex0: flexs.flex0, flex1: flexs.flex1, bub1: flexs.bub1, bub2: flexs.bub2, bub3: flexs.bub3, bub4: flexs.bub4, bub5: flexs.bub5, bub6: flexs.bub6, confirm:{ "type": "template", "altText": "this is a confirm template", "template": { "type": "confirm", "text": "Are you sure?", "actions": [ { "type": "message", "label": "Yes", "text": "yes" }, { "type": "message", "label": "No", "text": "no" } ] } }, location: { type: "text", // ① text: "Select your favorite food category or send me your location!", quickReply: { // ② items: [ { type: "action", // ③ imageUrl: "https://example.com/sushi.png", action: { type: "message", label: "Sushi", text: "Sushi", }, }, { type: "action", imageUrl: "https://example.com/tempura.png", action: { type: "message", label: "Tempura", text: "Tempura", }, }, { type: "action", // ④ action: { type: "location", label: "Send location", }, }, ], }, }, // image_carousel: { "type": "template", "altText": "this is a image carousel template", "template": { "type": "image_carousel", "columns": [ { "imageUrl": "https://example.com/bot/images/item1.jpg", "action": { "type": "postback", "label": "Buy", "data": "action=buy&itemid=111" } }, { "imageUrl": "https://example.com/bot/images/item2.jpg", "action": { "type": "message", "label": "Yes", "text": "yes" } }, { "imageUrl": "https://example.com/bot/images/item3.jpg", "action": { "type": "uri", "label": "View detail", "uri": "http://example.com/page/222" } } ] } } }; };