var alexa = require('alexa-app'); var request = require('request'); var dotenv = require('dotenv').config(); var CouchPotato = require('node-couchpotato'); var app = new alexa.app(); var cp = new CouchPotato({ url: dotenv.CP_URL, apikey: dotenv.CP_API_KEY, debug: true }); function buildNextMovieSuggestionPrompt(movies) { var promptData = { searchResults: movies.slice(0, 5), yesAction : 'addMovie', yesResponse: 'Added ' + movies[0].original_title + ' (' + movies[0].year + ')' + ' to your list of movies to download.' }; if (movies.length > 1) { promptData.noAction = 'suggestNextMovie'; promptData.noResponse = 'Ok, did you mean ' + movies[1].original_title + ' (' + movies[1].year + ')' + '?'; } else { promptData.noAction = 'endSession'; promptData.noResponse = 'Ok. I\'m out of suggestions. Sorry about that.'; } return promptData; } function formatMovieSearchResponse(movies, resp) { if(!movies || !movies.length) { resp.say("No movie found for " + movieName); return resp.send(); } var speechText = 'Add ' + movies[0].original_title + ' (' + movies[0].year + ')' + ' to your list?'; // console.log('movie found', speechText); // console.log('reprompt data', buildNextMovieSuggestionPrompt(movies.slice(0, 5))); resp .say(speechText) .session('promptData', buildNextMovieSuggestionPrompt(movies.slice(0, 5))) .shouldEndSession(false) .send(); } app.intent('FindMovie', function (req, resp) { var movieName = req.slot('movieName'); // console.log('search for movie in list', movieName); cp.movie.list({search: movieName, limit_offset: 5}).then(function (searchResp) { var movies = searchResp.movies; var result; var speechText; if (!movies || !movies.length) { speechText = "Couldn't find " + movieName + " queued for download. "; resp.say(speechText); // console.log('no movie found', speechText); cp.movie.search(movieName).then(function (searchResults) { formatMovieSearchResponse(searchResults, resp); }); } else { result = movies[0].info; speechText = 'It looks like ' + result.original_title + ' (' + result.year + ')' + ' is already on your list.'; // console.log('movie found', speechText); resp .say(speechText) .send(); } return false; // console.log('reprompt data', buildNextMovieSuggestionPrompt(movies.slice(0, 5))); }); return false; }); app.intent('AddMovie', function (req, resp) { var movieName = req.slot('movieName'); // console.log('search for movie', movieName); cp.movie.search(movieName).then(function (movies) { formatMovieSearchResponse(movies, resp); }); return false; }); app.intent('AMAZON.YesIntent', function (req, resp) { var promptData = req.session('promptData'); if (!promptData) { console.log('Got a AMAZON.YesIntent but no promptData. Ending session.'); return resp.send(); } if (promptData.yesAction === 'addMovie') { // console.log('promptData', promptData); var movie = promptData.searchResults[0]; // console.log('Add the movie', movie.original_title); cp.movie.add({ title: movie.titles[0], identifier: movie.imdb }).then(function () { resp .say(promptData.yesResponse) .send(); }); } else { console.log("Got an unexpected yesAction. PromptData:"); console.log(promptData); return resp.send(); } return false; }); app.intent('AMAZON.NoIntent', function (req, resp) { var promptData = req.session('promptData'); if (!promptData) { console.log('Got a AMAZON.YesIntent but no promptData. Ending session.'); return resp.send(); } if (promptData.noAction === 'endSession') { return resp.say(promptData.noResponse).send(); } else if (promptData.noAction === 'suggestNextMovie') { var movies = promptData.searchResults; return resp .say(promptData.noResponse) .session('promptData', buildNextMovieSuggestionPrompt(movies.slice(1))) .shouldEndSession(false) .send(); } else { console.log("Got an unexpected noAction. PromptData:"); console.log(promptData); return resp.send(); } return false; }); app.intent('AMAZON.CancelIntent', function (req, resp) { resp.shouldEndSession(true).send(); }); exports.handler = app.lambda();