/
functions.js
executable file
·97 lines (94 loc) · 3.41 KB
/
functions.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
const https = require('https');
module.exports = {
//Random Object Property
randProp: function ( obj ) {
var result;
var count = 0;
for ( var prop in obj ) {
if ( Math.random() < 1 / ++count ) {
result = prop;
}
}
return result;
},
//Get Wordpress Endpoint
getEndpoint: function ( location, callback ) {
https.get( location, res => {
res.setEncoding("utf8");
let body = "";
res.on("data", data => {
body += data;
});
res.on("end", () => {
body = JSON.parse(body);
callback( body );
});
});
},
//Build clean list from json array keys
cleanKeys: function ( feed ) {
let jsonFeedKeys = Object.keys( feed ).toString();
jsonFeedKeys = jsonFeedKeys.replace(/[_-]/g, " ").split(',');
let clean = Array.from(jsonFeedKeys);
return clean;
},
//Say Whole List of Items Available
sayArray: function ( myData, penultimateWord = 'and' ) {
let result = '';
myData.forEach(function(element, index, arr) {
if (index === 0) {
result = element;
} else if (index === myData.length - 1) {
result += ` ${penultimateWord} ${element}`;
} else {
result += `, ${element}`;
}
});
return result;
},
//Resolve entities to synonyms for slots
resolveEnt: function ( slot, useId ) {
let value = slot.value;
let resolution = (slot.resolutions
&& slot.resolutions.resolutionsPerAuthority
&& slot.resolutions.resolutionsPerAuthority.length > 0)
? slot.resolutions.resolutionsPerAuthority[0]
: null;
if ( resolution && resolution.status.code == 'ER_SUCCESS_MATCH' ) {
let resolutionValue = resolution.values[0].value;
value = resolutionValue.id && useId ? resolutionValue.id : resolutionValue.name;
} else {
value = undefined;
}
return value;
},
//Build Audio Responses
buildAudio: function( audio ) {
let areaAudio = '<audio src=\"' + audio + '\" />';
return areaAudio;
},
// Card and Speech Responses
listAvailableArea: function( slotname, namearray, list ){
let returnMessage = `We currently have ${ namearray.length } ski areas avaialble in ${ slotname }. The resorts available are ${ list }`;
return returnMessage;
},
listAvailableRepromt: function( slotname ) {
let returnMessage = `Ask for the resort from ${ slotname } to listen to it.`
return returnMessage;
},
cardInfo: function ( area ) {
let cap = area.charAt(0).toUpperCase();
let remain = area.slice(1);
let capWord = cap + remain;
let returnMessage = `You listened to the ski report for ${capWord} are you going to head up to the slopes today?`;
return returnMessage;
},
cardErrorVoice: function ( area ) {
let returnMessage = `Sorry, not familiar with <emphasis level=\"strong\"> ${area} .</emphasis> <break time=\"1s\"/> Please ask again.`;
return returnMessage;
},
cardErrorText: function ( area ) {
let returnMessage = `Sorry, not familiar with ${area} . Please ask again.`;
return returnMessage;
}
};