-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
216 lines (187 loc) · 8.55 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
////////////////////////////////////////
// isgame-online-lambda
//
// Copyright (c) 2017 Jonathan Hardison
////////////////////////////////////////
var config = require('./config');
var alexa = require("alexa-app");
var Raven = require('raven');
//controllers
var gamestatusengine = require('./controllers/game-statusengine');
var gamecheckisvalid = require('./controllers/game-checkisvalid');
let configInstance = new config();
Raven.config(configInstance.ravenDSN).install();
// ALWAYS setup the alexa app and attach it to express before anything else.
var alexaApp = new alexa.app("v1alexaapi");
alexaApp.pre = function(request, response, type) {
var session = request.getSession();
if(configInstance.debugEnabled == "false")
{
//skip for debug
if(request.applicationId != "amzn1.ask.skill.ffe13be5-1255-4bf7-a243-b89bf41f373b")
{
Raven.captureException(new Error("Invalid ApplicationID: " + request.applicationId + " Type: " + type + " Request: " + request + " Session ID: " + session.applicationId));
return response.fail("Invalid applicationId");
}
}
else if(configInstance.debugEnabled == "true"){
console.log("Session APPID: " + session.applicationId);
console.log("Request APPID: " + request.applicationId);
console.log("Debug Flag: " + configInstance.debugEnabled);
console.log(request);
}
}
alexaApp.error = function(exception, request, response) {
Raven.captureException(exception);
response.say("Sorry, an issue occurred.").shouldEndSession(true);
};
alexaApp.launch(function(request, response) {
response.say("Is Game Online opened. You may ask for the status of a supported online game by saying, is Secret World Legends up? Or, what is the status of The Secret World? So, what may I do for you today?").shouldEndSession(false);
if(configInstance.debugEnabled=="true"){
console.log("Entered launch.");
}
//return false;
});
// sessionEnded /////////////////////////////////////////////////////////////////
alexaApp.sessionEnded(function(request, response) {
// cleanup the user's server-side session
// no response required
if(configInstance.debugEnabled=="true"){
console.log("Entered sessionEnded.");
}
});
// AMAZON.HelpIntent /////////////////////////////////////////////////////////////////
alexaApp.intent("AMAZON.HelpIntent",{
"slots": {},
"utterances": []
}, function(request, response) {
if(configInstance.debugEnabled=="true"){
console.log("Entered HELP.");
}
var helpoutput = "Is Game Online allows you to check status of some online video games. You may ask for the status of a supported online game by saying, is Secret World Legends up? Or, what is the status of The Secret World? So, what may I do for you today?";
response.say(helpoutput).reprompt().shouldEndSession (false);
//return false;
});
// AMAZON.StopIntent /////////////////////////////////////////////////////////////////
alexaApp.intent("AMAZON.StopIntent",{
"slots": {},
"utterances": []
}, function(request, response) {
var stopoutput = "Goodbye.";
response.say(stopoutput).shouldEndSession(true);
return;
});
// AMAZON.CancelIntent /////////////////////////////////////////////////////////////////
alexaApp.intent("AMAZON.CancelIntent",{
"slots": {},
"utterances": []
}, function(request, response) {
var canceloutput = "Goodbye.";
response.say(canceloutput).shouldEndSession(true);
return;
});
// GAME STATUS ///////////////////////////////////////////////////////////////////////
alexaApp.intent("GameStatus",
{
// "dialog": {
// type: "delegate"
// },
"slots":{
"AMAZON.VideoGame": "AMAZON.VideoGame"
},
"utterances": ["is {AMAZON.VideoGame} up",
"check on {AMAZON.VideoGame}",
"what is the status of {AMAZON.VideoGame}",
"find status of {AMAZON.VideoGame}",
"is {AMAZON.VideoGame} down",
"if {AMAZON.VideoGame} is up",
"if {AMAZON.VideoGame} is down",
"what the status of {AMAZON.VideoGame} is",
"if {AMAZON.VideoGame} is online",
"if {AMAZON.VideoGame} is offline",
"status of {AMAZON.VideoGame}",
"{AMAZON.VideoGame} state",
"is {AMAZON.VideoGame} available",
"is {AMAZON.VideoGame} operational",
"about {AMAZON.VideoGame}"]
},
function(request, response) {
try{
var gameAsked = request.slot("AMAZON.VideoGame");
if(typeof gameAsked === "undefined" || gameAsked === ""){
response.say("Tell me the name of a game you want status of.").reprompt("What game would you like status for?").shouldEndSession(false).send();
//return false;
if(configInstance.debugEnabled=="true"){
console.log("Undefined game, response sent: " + response);
}
}
else{
gameAsked = gameAsked.toLowerCase();
if(gameAsked == "stop listening"){
var canceloutput = "Goodbye.";
response.say(canceloutput).shouldEndSession(true);
return;
}
var gameIsValid = gamecheckisvalid(gameAsked);
if(gameIsValid !== null){
return gamestatusengine(gameIsValid).then(function (gamestatus) {
if(configInstance.debugEnabled){console.log(gamestatus);}
if(gamestatus.status !== null){
if(gamestatus.status == "Online")
{
var responseTextOnline = `Yes, ${gamestatus.name} is currently ${gamestatus.status}`;
response.say(responseTextOnline);
}
else if(gamestatus.status == "Offline")
{
var responseTextOffline = `No, ${gamestatus.name} is currently ${gamestatus.status}`;
response.say(responseTextOffline);
}
else if(gamestatus.status == "Partial")
{
var responseTextPartial = `Some ${gamestatus.name} services are unavailable, but not all.`;
response.say(responseTextPartial);
}
else{
var responseTextUnknown = `I'm not sure, but chances are ${gameAsked} is currently unavailable.`;
response.say(responseTextUnknown);
}
if(configInstance.debugEnabled=="true"){
console.log("Valid game loop, response sent: " + response);
}
response.shouldEndSession(true);
return response.send();
}
else
{
response.clear().say(`Sorry there was an error checking the status for ${gameAsked}`);
response.shouldEndSession(true);
if(configInstance.debugEnabled=="true"){
console.log("Error checking game, response sent: " + response);
}
Raven.captureException("Error checking status of game: " + gameAsked);
return response.send();
}
});
}
else{
response.clear().say(`Sorry, ${gameAsked} is not yet supported. We will try to add it in the future. Until then, try again with a supported game.`);
response.shouldEndSession(true);
if(configInstance.debugEnabled=="true"){
console.log("Unsupported game, response sent: " + response);
}
Raven.captureException("Unsupported game: " + gameAsked);
return response.send();
}
}
}//try
catch(e){
Raven.captureException(e);
if(configInstance.debugEnabled=="true"){
console.log("Error: " + e);
}
response.clear().say("Sorry, something went wrong. Please try your request again.").shouldEndSession(false);
}//catch
}
);
exports.handler = alexaApp.lambda();