UNPKG

cast-web-api

Version:

Web API for Google Cast enabled devices.

132 lines (116 loc) 3.23 kB
var GoogleAssistant = null; try { GoogleAssistant = require('google-assistant'); } catch (e) { console.log('GoogleAssistant require error: '+e); } const Events = require('events'); const path = require('path'); const config = { auth: { keyFilePath: path.resolve(__dirname, '../../config/client_secret.json'), savedTokensPath: path.resolve(__dirname, '../../config/tokens.json'), }, conversation: { lang: 'en-US', } }; class Assistant extends Events { constructor() { super(); this.assistant = false; this._ready = false; } getAssistantReady() { let that = this; return new Promise(function (resolve, reject) { if (GoogleAssistant) { if (that._ready) { resolve(that.assistant); } else { try { that.assistant = new GoogleAssistant(config.auth); that._ready = false; that.assistant.on('ready', function() { that._ready = true; resolve(that.assistant); }); that.assistant.on('error', error => { that._ready = false; // Correct??? reject(error); }); } catch (e) { reject('Assistant exception: '+e); } } } else { reject('google-assistant package is not installed'); } }) } broadcast(message) { return new Promise( (resolve, reject) => { this.getAssistantReady() .then(assistant => { config.conversation.textQuery = 'Broadcast '+message; assistant.start(config.conversation); assistant.on('started', conversation => { conversation.on('response', (text) => { console.log('response: '+text); resolve('Assistant response: ' + text); }); conversation.on('ended', (error, continueConversation) => { console.log('ended error: ' + error + ', continueConversation: '+continueConversation); if (error) { reject('Conversation ended, error: ' + error); } else { conversation.end(); resolve('Conversation complete, continueConversation: '+continueConversation); } }); conversation.on('error', (error) => { console.log('error:'+error); reject('Conversation error: ' + error); }); }); }) .catch(error => { reject(error); }); }); }; command(command) { let that = this; return new Promise( (resolve, reject) => { that.getAssistantReady() .then(assistant => { config.conversation.textQuery = command; assistant.start(config.conversation); assistant.on('started', conversation => { conversation.on('response', text => { resolve('Assistant response: ' + text); }); conversation.on('ended', (error, continueConversation) => { console.log('ended'); if (error) { reject('Conversation ended, error: ' + error); } else { conversation.end(); resolve('Conversation complete, continueConversation: '+continueConversation); } }); conversation.on('error', (error) => { reject('Conversation error: ' + error); }); }); }) .catch(error => { reject(error); }); }); }; get status() { return { assistant:(this.assistant !== false), ready:this._ready } ; }; } module.exports = Assistant;