-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
139 lines (120 loc) · 4.01 KB
/
index.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const History = require('./controllers/history')()
const Stuff = require('./controllers/stuff')()
const Constants = require('./constants');
const Templates = require('./messages/templates');
var linebot = require('linebot');
var bot = linebot({
channelId: Constants.CHANNEL_ID,
channelSecret: Constants.CHANNEL_SECRET,
channelAccessToken: Constants.CHANNEL_ACCESS_TOKEN,
});
const {
ADD_NEW_THING,
ADD_THING_PLACE,
ADD_THING_TAGS,
ADD_SUMMARY,
PICK_THING,
PICK_THING_HIST,
UPDATE_OPTIONS,
UPDATE_RECORD_OPTION,
UPDATE_ALERT_OPTION,
ALERT_OPTIONS,
ALERT_LIST_OPTION,
ALERT_ADD_OPTION,
LIST_HISTORY
} = Constants.ACTION;
var keyword;
function handle_data(userId, data, params) {
let action_data = {}
action_data[Constants.ACTIONTOKEY[keyword]] = data
if (keyword == UPDATE_OPTIONS) {
if (data == 'update location') keyword = UPDATE_RECORD_OPTION;
else if (data == 'set alert') keyword = UPDATE_ALERT_OPTION;
}
else if (keyword == ALERT_OPTIONS) {
if (data == 'list alerts') keyword = ALERT_LIST_OPTION;
else if (data == 'add alert') keyword = ALERT_ADD_OPTION;
console.log(params.time)
let a = params.time.split(":")
let time = new Date();
time.setHours(Number.parseInt(a[0]));
time.setMinutes(Number.parseInt(a[1]));
action_data[Constants.ACTIONTOKEY[keyword]] = [time];
}
History.updateAction(userId, keyword, action_data).then((ret) => {
keyword = ret;
map_keyword_to_response(userId, data);
})
}
async function map_keyword_to_response(userId, data) {
console.log("next keyword " + keyword);
let response;
switch(keyword) {
case ADD_THING_PLACE:
response = Templates(ADD_THING_PLACE);
break;
case ADD_THING_TAGS:
response = Templates(ADD_THING_TAGS);
break;
case ADD_SUMMARY:
let ret = await History.addHistory(userId)
let hist = ret;
let sum = {};
sum.type = "text";
sum.text = "Recorded: my " + hist.stuff_name + " is " + hist.stuff_position + " (" + hist.tags + ")";
response = sum;
break;
case UPDATE_OPTIONS:
response = Templates(UPDATE_OPTIONS);
break;
case ALERT_OPTIONS:
response = Templates(ALERT_OPTIONS);
break;
case LIST_HISTORY:
let his = await History.getStuffHistory(userId, data)
console.log(data)
response = Templates(LIST_HISTORY, his);
break;
default:
console.log("No such keyword");
return;
}
await bot.push(userId, response);
}
bot.on('postback', function (event) {
handle_data(event.source.userId, event.postback.data, event.postback.params);
});
bot.on('message', async function (event) {
console.log('Event:', JSON.stringify(event));
let userId = event.source.userId;
let message = event.message;
if (userId) {
if (message.text) {
let response = '';
let cmd = message.text.toLowerCase();
switch(cmd) {
case 'add new thing':
response = Templates(ADD_NEW_THING);
keyword = ADD_NEW_THING;
break;
case 'edit things':
let allObjs = await Stuff.getUserStuff(userId);
response = Templates(PICK_THING, allObjs);
keyword = PICK_THING;
break;
case 'lost something':
let allObjsH = await Stuff.getUserStuff(userId);
response = Templates(PICK_THING_HIST, allObjsH);
keyword = PICK_THING_HIST;
break;
case 'settings':
break;
default:
handle_data(userId, message.text);
}
console.log(JSON.stringify(response));
await bot.reply(event.replyToken, response);
}
}
});
bot.listen('/', Constants.SERVER_PORT);