index copy.js 8.09 KB
"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"
                }
              }
          ]
      }
    }
   
  };
};