Esempio n. 1
0
        public async Task <SkillResponse> Run(SkillRequest skillRequest, ILambdaContext context)
        {
            var userId = skillRequest.Context.System.User.UserId;

            if (skillRequest.GetRequestType() == typeof(LaunchRequest))
            {
                const string msg = "Hey. What can I do for you?";
                return(ResponseBuilder.Ask(msg, new Reprompt("Sorry. I don't know what you mean.")));
            }

            if (skillRequest.GetRequestType() == typeof(SessionEndedRequest))
            {
                const string msg = "See you later";
                return(ResponseBuilder.Tell(msg));
            }

            if (skillRequest.GetRequestType() == typeof(SkillEventRequest))
            {
                // todo: check enable / disable
                var eventRequest = (SkillEventRequest)skillRequest.Request;
                if (eventRequest.Type == "AlexaSkillEvent.SkillDisabled")
                {
                }
            }

            var actualIntentRequest = (IntentRequest)skillRequest.Request;
            var handler             = _handlers.FirstOrDefault(x => x.Name == actualIntentRequest.Intent.Name);

            if (handler == null)
            {
                return(TellWithoutEnding("Sorry. I don't know what you mean."));
            }

            var user = await _userStorageService.GetAsync(userId);

            if (user == null)
            {
                user = new SpotifyUser(userId);
                await _userStorageService.SaveAsync(user);
            }

            try
            {
                await handler.VerifySession(skillRequest);

                await handler.BuildSpotifySession(skillRequest);

                return(await handler.HandleIntent(skillRequest, actualIntentRequest, context));
            }
            catch (Exception ex)
            {
                if (ex is AccessTokenMissingException)
                {
                    return(ResponseBuilder.Tell("AccessToken is missing. Please link your account"));
                }

                return(ResponseBuilder.Tell(ex.Message));
            }
        }
Esempio n. 2
0
        public override async Task <SkillResponse> HandleIntent(SkillRequest skillRequest, IntentRequest intentRequest,
                                                                ILambdaContext context)
        {
            var user = await _userStorageService.GetAsync(skillRequest.Context.System.User.UserId);

            var devices = await SpotifyClient.GetDevicesAsync();

            if (devices.HasError())
            {
                return(TellWithoutEnding("There was an error getting your devices"));
            }

            var response = new StringBuilder();

            response.Append("You have the following devices available: \n");
            var index = 0;

            if (user.AvailableDevices.Any())
            {
                index = user.AvailableDevices.Max(x => x.Index);
            }

            foreach (var availableDevice in devices.Devices)
            {
                var device = user.AvailableDevices.FirstOrDefault(x => x.Id == availableDevice.Id);
                if (device != null)
                {
                    response.Append("\n");
                    response.Append($"Number: {device.Index} - {device.Name}");
                    response.Append("\n");
                    continue;
                }

                index++;
                response.Append("\n");
                response.Append($"Number: {index} - {availableDevice.Name}");
                response.Append("\n");

                var spotifyDevice =
                    new SpotifyDevice(availableDevice.Id, availableDevice.Name.ToLower(), index);
                user.AvailableDevices.Add(spotifyDevice);
            }

            await _userStorageService.SaveAsync(user);

            return(TellWithoutEnding(response.ToString()));
        }
Esempio n. 3
0
        public override async Task <SkillResponse> HandleIntent(SkillRequest skillRequest, IntentRequest intentRequest,
                                                                ILambdaContext context)
        {
            var user = await _userStorageService.GetAsync(skillRequest.Context.System.User.UserId);

            var deviceSlotIndex = int.Parse(intentRequest.Intent.Slots["DeviceSlot"].Value);
            var foundDevice     = user.AvailableDevices.FirstOrDefault(x => x.Index == deviceSlotIndex);

            if (foundDevice == null)
            {
                return(TellWithoutEnding($"Could not find device with index {deviceSlotIndex}"));
            }

            await SpotifyClient.TransferPlaybackAsync(foundDevice.Id, true);

            user.CurrentPlayingDevice = foundDevice;
            await _userStorageService.SaveAsync(user);

            return(TellWithoutEnding($"Playing on {foundDevice.Name} now"));
        }