public RedemptionView(RequestQueueIngest rqi)
 {
     Id                   = rqi.Id;
     RewardId             = rqi.RewardId;
     RequesterId          = rqi.RequesterId;
     RequesterDisplayName = rqi.RequesterDisplayName;
     IsSubOrHigher        = rqi.IsSubOrHigher;
     RawMessage           = rqi.RawMessage;
     RedemptionId         = rqi.RedemptionId;
     RequestTimestamp     = rqi.RequestTimestamp;
 }
Exemple #2
0
        public async Task <bool> SkipCurrentTtsRequest(int roomId, bool wasTimedOut = false)
        {
            RequestQueueIngest rqi = _ttsDbContext.RequestQueueIngest
                                     .Include(r => r.Reward)
                                     .FirstOrDefault(r => r.Reward.ChannelId == roomId);

            if (rqi is null)
            {
                return(false);
            }

            return(await SkipTtsRequest(roomId, rqi.RedemptionId));
        }
Exemple #3
0
        public async Task <bool> SkipTtsRequest(int roomId, string redemptoinId = null, bool wasTimedOut = false)
        {
            RequestQueueIngest rqi = _ttsDbContext.RequestQueueIngest
                                     .Include(r => r.Reward)
                                     .FirstOrDefault(r => r.RedemptionId == redemptoinId);

            if (rqi is null || rqi.Reward.ChannelId != roomId)
            {
                return(false);
            }

            // Do we need to skip the currently playing one?
            if (TtsHandler.ActiveRequests.TryGetValue(rqi.Reward.ChannelId, out string activeRedemptionId) &&
                activeRedemptionId == rqi.RedemptionId)
            {
                List <string> clients = TtsHandler.ConnectClients
                                        .Where(pair => pair.Value == roomId.ToString())
                                        .Select(pair => pair.Key)
                                        .Distinct()
                                        .ToList();
                if (clients.Any())
                {
                    await _ttsHub.Clients.Clients(clients).TtsSkipCurrent();
                }
                else
                {
                    await _ttsHandler.MoveRqiToTtsLog(rqi.RedemptionId, wasTimedOut
                                                      ?MessageType.NotPlayedTimedOut
                                                      : MessageType.Skipped
                                                      );
                }
            }
            else
            {
                await _ttsHandler.MoveRqiToTtsLog(rqi.RedemptionId, wasTimedOut
                                                  ?MessageType.NotPlayedTimedOut
                                                  : MessageType.SkippedBeforePlaying
                                                  );
            }

            return(true);
        }
        public static IEnumerable <TtsMessagePart> SplitMessage(RequestQueueIngest rqi)
        {
            List <string> messageSplit = SplitMessageToClosestWordToLimit(rqi);

            if (!rqi.Reward.IsConversation)
            {
                Voice  voice  = rqi.Reward.Voice;
                Engine engine = GetEngine(rqi, voice);

                bool useFallback = !rqi.Reward.Channel.AllowNeuralVoices && engine == Engine.Neural;

                return(new List <TtsMessagePart>
                {
                    new()
                    {
                        Message = string.Join(' ', messageSplit),
                        VoiceId = useFallback ? FallbackVoiceId : voice.Id,
                        Engine = useFallback ? FallbackEngine : engine,
                        PlaybackSpeed = rqi.Reward.DefaultPlaybackSpeed,
                        Volume = rqi.Reward.Channel.Volume
                    }
                });