Blame view

index.js 5.53 KB
b9184255   Surasit Yerpui   update Code Reweb...
1
"use strict";
a8dde2dd   Surasit Yerpui   firstcommit
2

b9184255   Surasit Yerpui   update Code Reweb...
3
const line = require("@line/bot-sdk");
889c144c   Surasit Yerpui   SW RICH MENU
4
const express = require("express");
b9184255   Surasit Yerpui   update Code Reweb...
5
6
7
const config = require("./config.json");
const bodyParser = require("body-parser");
const axios = require("axios");
889c144c   Surasit Yerpui   SW RICH MENU
8
const fs = require("fs");
b9184255   Surasit Yerpui   update Code Reweb...
9
10
11
12
13
14
15
16
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);
a8dde2dd   Surasit Yerpui   firstcommit
17

a8dde2dd   Surasit Yerpui   firstcommit
18
const app = express();
b9184255   Surasit Yerpui   update Code Reweb...
19
20
21
22
23
24

// 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
a8dde2dd   Surasit Yerpui   firstcommit
25
  if (!Array.isArray(req.body.events)) {
b9184255   Surasit Yerpui   update Code Reweb...
26
    return res.status(500).end();
a8dde2dd   Surasit Yerpui   firstcommit
27
  }
a8dde2dd   Surasit Yerpui   firstcommit
28
29
30
  console.log('req.body.events !',req.body.events)
  // handle events separately
  Promise.all(
b9184255   Surasit Yerpui   update Code Reweb...
31
    req.body.events.map((event) => {
a8dde2dd   Surasit Yerpui   firstcommit
32
33
34
35
36
37
38
39
40
41
      console.log("event", event);
      // check verify webhook event
      if (
        event.replyToken === "00000000000000000000000000000000" ||
        event.replyToken === "ffffffffffffffffffffffffffffffff"
      ) {
        return;
      }
      return handleEvent(event);
    })
b9184255   Surasit Yerpui   update Code Reweb...
42
  )
a8dde2dd   Surasit Yerpui   firstcommit
43
44
45
46
47
48
49
50
51
    .then(() => res.end())
    .catch((err) => {
      console.error(err);
      res.status(500).end();
    });
});

const handleEvent = (event) => {
  let payload = {
b9184255   Surasit Yerpui   update Code Reweb...
52
53
54
55
56
57
    type: "text",
    text: "Hello From PUI",
  };

  if (event.type == "message" && event.message.type == "text") {
    let selecttext = String(event.message.text).toLowerCase();
a8dde2dd   Surasit Yerpui   firstcommit
58
    let get_text = ContentService.mockText()[selecttext];
b9184255   Surasit Yerpui   update Code Reweb...
59
60
61
62
63
64
65
66
67
68
69
70
    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);
};

a8dde2dd   Surasit Yerpui   firstcommit
71
app.use(bodyParser.json());
b9184255   Surasit Yerpui   update Code Reweb...
72
73
app.get("/", (req, res) => {
  res.json({ line: "ok" });
889c144c   Surasit Yerpui   SW RICH MENU
74
});
a8dde2dd   Surasit Yerpui   firstcommit
75

b9184255   Surasit Yerpui   update Code Reweb...
76
app.post("/push", (req, res) => {
a8dde2dd   Surasit Yerpui   firstcommit
77
78
  let body = req.body;
  let { user_id, message } = body;
b9184255   Surasit Yerpui   update Code Reweb...
79
  console.log("push =>> body ::", body);
889c144c   Surasit Yerpui   SW RICH MENU
80
  if (!message) {
a8dde2dd   Surasit Yerpui   firstcommit
81
82
    message = {
      type: "text",
b9184255   Surasit Yerpui   update Code Reweb...
83
      text: `Push Message! to ${user_id}`,
f4bbcb63   Surasit Yerpui   เพิ่ม ตัวอย่าง ac...
84
    };
b9184255   Surasit Yerpui   update Code Reweb...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  }
  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)}`,
    },
a8dde2dd   Surasit Yerpui   firstcommit
99
    {
a8dde2dd   Surasit Yerpui   firstcommit
100
      type: "text",
b9184255   Surasit Yerpui   update Code Reweb...
101
102
103
      text: `use multicast Message2! to ${JSON.stringify(user_ids)}`,
    },
  ];
a8dde2dd   Surasit Yerpui   firstcommit
104

b9184255   Surasit Yerpui   update Code Reweb...
105
106
107
108
109
  client.multicast(user_ids, message);
  res.json(message);
});

app.post("/multicast", (req, res) => {
889c144c   Surasit Yerpui   SW RICH MENU
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
  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);
b9184255   Surasit Yerpui   update Code Reweb...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
  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"]);
f4bbcb63   Surasit Yerpui   เพิ่ม ตัวอย่าง ac...
145
        console.log("content-length:", res.headers["content-length"]);
eb28d472   Surasit Yerpui   update Service
146
        console.log("Content-Type:", res.headers["Content-Type"]);
b9184255   Surasit Yerpui   update Code Reweb...
147
148
149
150
151
152
153
154
        console.log("res.headers ::", res.headers);

        request(uri, {
          headers: {
            Authorization:
              "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
          },
        })
eb28d472   Surasit Yerpui   update Service
155
          .pipe(fs.createWriteStream(filename))
889c144c   Surasit Yerpui   SW RICH MENU
156
157
          .on("close", callback);
      });
b9184255   Surasit Yerpui   update Code Reweb...
158
159
160
161
162
163
    };

    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`;
a8dde2dd   Surasit Yerpui   firstcommit
164
    console.log("message_id ::", message_id);
b9184255   Surasit Yerpui   update Code Reweb...
165
166
167
168
    console.log("file_name ::", file_name);

    axios
      .get(URI, {
eb28d472   Surasit Yerpui   update Service
169
        headers: {
b9184255   Surasit Yerpui   update Code Reweb...
170
171
172
173
          Authorization:
            "Bearer be/XHjQ+gMoypZE78Us7hk0h6PA04TyfpQciMOq+B/OVPmumozdhGzYUwopDgsOMCM7RymTK8m++q20GSj3c6B7gZkgEmuGYEYPvc6j+4as6X5bu7tEg+KAZKMfBVDnk+ekpAorC7FMwVPyt2frGRQdB04t89/1O/w1cDnyilFU=",
        },
      })
eb28d472   Surasit Yerpui   update Service
174
175
      .then(function (response) {
        // handle success
889c144c   Surasit Yerpui   SW RICH MENU
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
        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" });
      });
b9184255   Surasit Yerpui   update Code Reweb...
192
193
194
  } catch (error) {
    console.error("errorxx ::", error);
  }
eb28d472   Surasit Yerpui   update Service
195
});
b9184255   Surasit Yerpui   update Code Reweb...
196

eb28d472   Surasit Yerpui   update Service
197
const port = config.port;
b9184255   Surasit Yerpui   update Code Reweb...
198
199
200
app.listen(port, () => {
  console.log(`listening on ${port}`);
});
eb28d472   Surasit Yerpui   update Service

b9184255   Surasit Yerpui   update Code Reweb...

a8dde2dd   Surasit Yerpui   firstcommit

b9184255   Surasit Yerpui   update Code Reweb...

889c144c   Surasit Yerpui   SW RICH MENU

b9184255   Surasit Yerpui   update Code Reweb...

a8dde2dd   Surasit Yerpui   firstcommit

b9184255   Surasit Yerpui   update Code Reweb...