-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
110 lines (92 loc) · 3.17 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
'use strict'
const line = require('@line/bot-sdk')
const express = require('express')
const fs = require('fs')
const file = './message.json'
// create LINE SDK config from env variables
const config = {
channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN,
channelSecret: process.env.CHANNEL_SECRET,
}
// create LINE SDK client
const client = new line.Client(config)
// create Express app
// about Express itself: https://expressjs.com/
const app = express()
let jsonData = []
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
return console.log(err)
}
jsonData = JSON.parse(data)
})
app.get('/', (req, res) => {
res.send('Hello World!')
})
// register a webhook handler with middleware
// about the middleware, please refer to doc
app.post('/webhook', line.middleware(config), (req, res) => {
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result))
.catch((err) => {
console.error(err)
res.status(500).end()
})
})
// event handler
function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
// ignore non-text-message event
return Promise.resolve(null)
}
let msg = event.message.text
let selectAnswer = 0
let replyAnswer = 'ป๋มไม่เข้าใจฮะ'
let echo = {}
jsonData.forEach(function (item, index) {
let word = item.keyword.split("_");
if (word.length > 1) {
let w = new RegExp('(?=.*' + word[0] + ')(?=.*' + word[1] + ')');
if (w.test(msg)) {
if (!item.hasOwnProperty('refer')) {
selectAnswer = Math.floor(Math.random() * item.answer.length)
replyAnswer = item.answer[selectAnswer]
}
else {
for (let subitem of jsonData) {
if (item.refer === subitem.keyword) {
selectAnswer = Math.floor(Math.random() * subitem.answer.length)
replyAnswer = subitem.answer[selectAnswer]
}
}
}
}
} else {
if (msg.includes(item.keyword)) {
if (!item.hasOwnProperty('refer')) {
selectAnswer = Math.floor(Math.random() * item.answer.length)
replyAnswer = item.answer[selectAnswer]
}
else {
for (let subitem of jsonData) {
if (item.refer === subitem.keyword) {
selectAnswer = Math.floor(Math.random() * subitem.answer.length)
replyAnswer = subitem.answer[selectAnswer]
}
}
}
}
}
})
console.log(`humen-- ${msg} | bot-- ${replyAnswer}`)
// create a echoing text message
echo = { type: 'text', text: replyAnswer }
// use reply API
return client.replyMessage(event.replyToken, echo)
}
// listen on port
const port = process.env.PORT || 3000
app.listen(port, () => {
console.log(`listening on ${port}`)
})