public async Task <BotResponseCode> TryAddTrackToPlaylist(UpdateDto updateDto) { if (string.IsNullOrEmpty(updateDto.ParsedTrackId)) { return(BotResponseCode.NoAction); } var existingTrackInPlaylist = await _trackRepository.Get(updateDto.ParsedTrackId, updateDto.Chat.PlaylistId); // Check if the track already exists in the playlist. if (existingTrackInPlaylist != null) { string text; if (existingTrackInPlaylist.State == TrackState.RemovedByDownvotes) { text = $"This track was previously posted, but it was downvoted and removed from the {_spotifyLinkHelper.GetMarkdownLinkToPlaylist(updateDto.Chat.PlaylistId, "playlist")}."; } else { text = $"This track is already added to the {_spotifyLinkHelper.GetMarkdownLinkToPlaylist(updateDto.Chat.PlaylistId, "playlist")}!"; } await _sendMessageService.SendTextMessage(updateDto.Chat.Id, text); return(BotResponseCode.TrackAlreadyExists); } var spotifyClient = await _spotifyClientFactory.Create(updateDto.Chat.AdminUserId); // We can't continue if we can't use the spotify api. if (spotifyClient == null) { await _sendMessageService.SendTextMessage(updateDto.Chat.Id, "Spoti-bot is not authorized to add this track to the Spotify playlist."); return(BotResponseCode.NoAction); } // Get the track from the spotify api. var newTrack = await _spotifyClientService.GetTrack(spotifyClient, updateDto.ParsedTrackId); if (newTrack == null) { await _sendMessageService.SendTextMessage(updateDto.Chat.Id, $"Track not found in Spotify api :("); return(BotResponseCode.NoAction); } await AddTrack(spotifyClient, updateDto.ParsedUser, newTrack, updateDto.Chat.PlaylistId); // Reply that the message has been added successfully. await SendReplyMessage(updateDto, newTrack); // Add the track to my queue. await _spotifyClientService.AddToQueue(spotifyClient, newTrack); return(BotResponseCode.TrackAddedToPlaylist); }