Пример #1
0
        public async Task InteractRoute(object sender, ReceivedMessageArgs e)
        {
            // check user eligibility
            if (!Conf.CheckUserEligibility(e))
            {
                return;
            }
            Bridge.ALog("规则检查通过,正在朗读用户交互事件");

            string result;

            switch (e.Message.MsgType)
            {
            case MsgTypeEnum.UserEnter:
                result = ProcessInteract(e.Message, Vars.CurrentConf.OnInteractEnter);
                break;

            case MsgTypeEnum.LiveShare:
                result = ProcessInteract(e.Message, Vars.CurrentConf.OnInteractShare);
                break;

            default: return;
            }

            await TTSPlayer.UnifiedPlay(result);
        }
Пример #2
0
        private DomainMessagesHandlerBase GetHandler(ReceivedMessageArgs messageObject)
        {
            if (TransactionMessagesHandler.Actions.Contains(messageObject.Action))
            {
                return(_transactionHanlder);
            }


            switch (messageObject.Topic)
            {
            case Topics.Users:
                return(_usersMessagesHandler);

            case Topics.Projects:
                return(_projectsMessageHandler);

            case Topics.ProjectMembers:
                return(_projectMembersMessageHandler);

            case Topics.Labels:
                return(_labelsMessageHandler);

            case Topics.Lists:
                return(_listsMessageHandler);

            default:
                throw new NotFoundException($"Topic {messageObject.Topic} is not known");
            }
        }
        private async void Received(object sender, ReceivedMessageArgs e)
        {
            Interlocked.Increment(ref m_processing);
            var body = e.Body;
            var json = await DecompressAsync(body);

            var jo       = JObject.Parse(json);
            var entities = jo.SelectToken("$.attached").Select(t => t.ToString().DeserializeFromJson <Entity>()).ToList();

            try
            {
                var tasks = from xc in entities.Where(x => null != x)
                            let type = xc.GetType()
                                       where !ExcludeTypes.Contains(type.Name)
                                       select ProcessMessageAsync(xc);

                await Task.WhenAll(tasks);

                m_channel.BasicAck(e.DeliveryTag, false);
            }
            catch (Exception exc)
            {
                this.WriteMessage("Error in {0}", this.GetType().Name);
                this.WriteError(exc);
                m_channel.BasicReject(e.DeliveryTag, false);
            }
            finally
            {
                Interlocked.Decrement(ref m_processing);
            }
        }
Пример #4
0
        public async Task GiftRoute(object sender, ReceivedMessageArgs e)
        {
            // check user eligibility
            if (!Conf.CheckUserEligibility(e))
            {
                return;
            }
            // check gift eligibility
            if (!Conf.CheckGiftEligibility(e))
            {
                return;
            }
            Bridge.ALog("规则检查通过,准备朗读");
            if (Vars.CurrentConf.VoiceReplyFirst)
            {
                var hitAnyRule = await TTSPlayer.PlayVoiceReply(e.Message);

                if (!hitAnyRule || !Vars.CurrentConf.IgnoreIfHitVoiceReply)
                {
                    await TTSPlayer.UnifiedPlay(ProcessGift(e));
                }
            }
            else
            {
                var hitAnyRule = Vars.CurrentConf.VoiceReplyRules.Any(x => x.Matches(e.Message));
                if (!hitAnyRule || !Vars.CurrentConf.IgnoreIfHitVoiceReply)
                {
                    await TTSPlayer.UnifiedPlay(ProcessGift(e));
                }
                await TTSPlayer.PlayVoiceReply(e.Message);
            }
        }
 public static bool CheckKeywordEligibility(ReceivedMessageArgs e)
 {
     if (!CheckKeywordEligibility(e.Message.CommentText))
     {
         Bridge.ALog("忽略:弹幕已命中屏蔽规则");
         return(false);
     }
     return(true);
 }
Пример #6
0
 public static bool CheckGiftEligibility(ReceivedMessageArgs e)
 {
     if (!CheckGiftEligibility(e.Message.GiftName))
     {
         Bridge.ALog("忽略:礼物已命中屏蔽规则");
         return(false);
     }
     return(true);
 }
        private void HandleUserMessage(ReceivedMessageArgs messageObject)
        {
            Console.WriteLine($"User message received");

            switch (messageObject.Action)
            {
            case MessageActions.Created:
            case MessageActions.Updated:
                var message = JsonConvert.DeserializeObject <UserCreatedUpdatedMessage>(messageObject.Message);
                var model   = _mapper.Map <UserCreatedUpdatedMessage, UserModel>(message);
                using (var scope = _serviceProvider.CreateScope())
                {
                    var requestsRepository = scope.ServiceProvider.GetRequiredService <RequestsRepository>();
                    var usersRepository    = scope.ServiceProvider.GetRequiredService <UsersRepository>();
                    if (!requestsRepository.IsHandledOrSaveRequestAsync(message.Id, GetRequestIdInvalidationDate()).GetAwaiter().GetResult())
                    {
                        try
                        {
                            usersRepository.CreateOrUpdateUserAsync(model).GetAwaiter().GetResult();
                        }
                        catch (Exception)
                        {
                            requestsRepository.DeleteRequestIdAsync(message.Id).GetAwaiter().GetResult();
                            throw;
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Already handled: {message.Id}");
                    }
                }
                // PerformSafetyOnBgThread(async () =>
                // {
                //     using(var scope = _serviceProvider.CreateScope())
                //     {
                //         var requestsRepository = scope.ServiceProvider.GetRequiredService<RequestsRepository>();
                //         var usersRepository = scope.ServiceProvider.GetRequiredService<UsersRepository>();
                //         if(!await requestsRepository.IsHandledOrSaveRequestAsync(message.Id, GetRequestIdInvalidationDate()))
                //         {
                //             await usersRepository.CreateOrUpdateUserAsync(model);
                //         }
                //         else
                //         {
                //             Console.WriteLine($"Already handled: {message.Id}");
                //         }
                //     }
                // }, messageObject, TaskScheduler.FromCurrentSynchronizationContext());
                break;

            case MessageActions.Deleted:
                //do nothing for now...
                break;

            default:
                throw new NotFoundException($"Topic {messageObject.Topic} is not known");
            }
        }
Пример #8
0
        private void HandleTasksMessage(ReceivedMessageArgs messageObject)
        {
            Console.WriteLine($"Tasks message received");
            switch (messageObject.Action)
            {
            case MessageActions.Created:
            case MessageActions.Updated:
                TaskModel   model = default(TaskModel);
                BaseMessage baseMessage;
                if (messageObject.Action == MessageActions.Created)
                {
                    var message = JsonConvert.DeserializeObject <TaskCreatedMessage>(messageObject.Message);
                    baseMessage = message;
                    model       = _mapper.Map <TaskCreatedMessage, TaskModel>(message);
                }
                else
                {
                    var message = JsonConvert.DeserializeObject <TaskCreatedMessage>(messageObject.Message);
                    baseMessage = message;
                    model       = _mapper.Map <TaskCreatedMessage, TaskModel>(message);
                }


                using (var scope = _serviceProvider.CreateScope())
                {
                    var requestsRepository = scope.ServiceProvider.GetRequiredService <RequestsRepository>();
                    var projectsRepository = scope.ServiceProvider.GetRequiredService <TasksRepository>();
                    if (!requestsRepository.IsHandledOrSaveRequestAsync(baseMessage.Id, GetRequestIdInvalidationDate()).GetAwaiter().GetResult())
                    {
                        try
                        {
                            projectsRepository.CreateOrUpdateTaskAsync(model).GetAwaiter().GetResult();
                        }
                        catch (Exception)
                        {
                            requestsRepository.DeleteRequestIdAsync(baseMessage.Id).GetAwaiter().GetResult();
                            throw;
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Already handled: {baseMessage.Id}");
                    }
                }
                break;

            case MessageActions.Deleted:
                //do nothing for now...
                break;

            default:
                throw new NotFoundException($"Action {messageObject.Action} is not known");
            }
        }
Пример #9
0
        public async void OnReceivedDanmaku(object sender, ReceivedMessageArgs e)
        {
            if (!IsNAudioReady)
            {
                return;
            }
            switch (e.Message.MsgType)
            {
            case MsgTypeEnum.Comment:
                await CommentRoute(sender, e);

                break;

            case MsgTypeEnum.GiftSend:
                if (Vars.CurrentConf.GiftsThrottle)
                {
                    ALog($"礼物合并已启用,正在合并礼物: 来自 {e.Message.UserName} ({e.Message.UserID}) 的 {e.Message.GiftCount} 个 {e.Message.GiftName}");
                    Vars.Debouncer.Add(new UserGift
                                       (
                                           e.Message.UserName,
                                           e.Message.UserID,
                                           e.Message.GiftName,
                                           e.Message.GiftCount
                                       ));
                }
                else
                {
                    await GiftRoute(sender, e);
                }
                break;

            case MsgTypeEnum.LiveStatusToggle:
                if (e.Message.LiveStatus == 1)
                {
                    await LiveStartRoute(sender, e);
                }
                else if (e.Message.LiveStatus == 0)
                {
                    await LiveEndRoute(sender, e);
                }
                break;

            case MsgTypeEnum.UserEnter:
                await InteractRoute(sender, e);

                break;

            case MsgTypeEnum.LiveShare:
                await InteractRoute(sender, e);

                break;
            }
        }
        protected override void OnMessageReceived(ReceivedMessageArgs messageObject)
        {
            switch (messageObject.Topic)
            {
            case Topics.Projects:
                HandleProjectMessage(messageObject);
                break;

            default:
                throw new NotFoundException($"Topic {messageObject.Topic} is not known");
            }
        }
Пример #11
0
        private async void GiftDebouncedEvent(object sender, UserGift e)
        {
            ALog($"合并礼物: 来自 {e.User} ({e.UserId}) 的 {e.Qty} 个 {e.Gift},直接路由到礼物路线...");
            var constructedArgs = new ReceivedMessageArgs();

            constructedArgs.Message           = new MessageModel();
            constructedArgs.Message.GiftName  = e.Gift;
            constructedArgs.Message.GiftCount = e.Qty;
            constructedArgs.Message.UserName  = e.User;
            constructedArgs.Message.UserID    = e.UserId;
            constructedArgs.Message.MsgType   = MsgTypeEnum.GiftSend;
            await GiftRoute(null, constructedArgs);
        }
        private void HandleTaskMesasge(ReceivedMessageArgs messageObject)
        {
            Console.WriteLine($"Tasks message received");
            switch (messageObject.Action)
            {
            case TransactionMessageActions.MoveTask_MoveMembersRequested:
            case TransactionMessageActions.MoveTask_Complete:
            case TransactionMessageActions.MoveTask_Rollback:
                Console.WriteLine("Move task transaction message");
                using (var scope = _serviceProvider.CreateScope())
                {
                    var    handler = scope.ServiceProvider.GetRequiredService <MoveTaskTransactionHandler>();
                    string result  = handler.HandleMessageAsync(messageObject).GetAwaiter().GetResult();
                    Console.WriteLine(result);
                }

                break;
            }
        }
Пример #13
0
        private DomainMessagesHandlerBase GetHandler(ReceivedMessageArgs messageObject)
        {
            switch (messageObject.Topic)
            {
            case Topics.Projects:
                return(_projectsMessageHandler);

            case Topics.ProjectMembers:
                return(_projectMembersMessageHandler);

            case Topics.Labels:
                return(_labelsMessageHandler);

            case Topics.Tasks:
                return(_tasksMessageHandler);

            default:
                throw new NotFoundException($"Topic {messageObject.Topic} is not known");
            }
        }
 public static bool CheckUserEligibility(ReceivedMessageArgs e)
 {
     if (Vars.CurrentConf.BlockUID)
     {
         if (!CheckUserEligibility(e.Message.UserID.ToString()))
         {
             Bridge.ALog("忽略:用户已命中 UID 规则");
             return(false);
         }
     }
     else
     {
         if (!CheckUserEligibility(e.Message.UserName))
         {
             Bridge.ALog("忽略:用户已命中用户名规则");
             return(false);
         }
     }
     return(true);
 }
Пример #15
0
        private void MsgQueueMgr_Received(object sender, ReceivedMessageArgs args)
        {
            switch (args.Message())
            {
            case HelperLib.NotifMessages.NOTIF_STOP:
                Globals.WriteToDebugFile("TaskMonitor: Received shutdown notification");
                _shutdown = true;
                _resetEvent.Set();
                break;

            case HelperLib.NotifMessages.NOTIF_SCAN:
                Globals.WriteToDebugFile("TaskMonitor: Received rescan notification");
                if (!_initDone)
                {
                    Globals.WriteToDebugFile("TaskMonitor: Skiping rescan"); return;
                }
                LoadTasks();
                _resetEvent.Set();
                break;
            }
        }
        private void HandleProjectMessage(ReceivedMessageArgs messageObject)
        {
            Console.WriteLine($"Project message received");
            switch (messageObject.Action)
            {
            case MessageActions.Created:
            case MessageActions.Updated:
                var message = JsonConvert.DeserializeObject <ProjectCreatedUpdatedMessage>(messageObject.Message);
                var model   = _mapper.Map <ProjectCreatedUpdatedMessage, ProjectModel>(message);
                using (var scope = _serviceProvider.CreateScope())
                {
                    var requestsRepository = scope.ServiceProvider.GetRequiredService <RequestsRepository>();
                    var projectsRepository = scope.ServiceProvider.GetRequiredService <ProjectsRepository>();
                    if (!requestsRepository.IsHandledOrSaveRequestAsync(message.Id, GetRequestIdInvalidationDate()).GetAwaiter().GetResult())
                    {
                        try
                        {
                            projectsRepository.CreateOrUpdateProjectAsync(model).GetAwaiter().GetResult();
                        }
                        catch (Exception)
                        {
                            requestsRepository.DeleteRequestIdAsync(message.Id).GetAwaiter().GetResult();
                            throw;
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Already handled: {message.Id}");
                    }
                }
                break;

            case MessageActions.Deleted:
                //do nothing for now...
                break;
            }
        }
Пример #17
0
        private void Class1_ReceivedMessage(object sender, ReceivedMessageArgs e)
        {
            string Info;
            string Roomid = RoomId.ToString();

            switch (e.Message.MsgType)
            {
            case MsgTypeEnum.LiveStatusToggle:
            {
                if (e.Message.LiveStatus == 1)
                {
                    Log(Roomid + "已开播");
                }
                else if (e.Message.LiveStatus == 0)
                {
                    Log(Roomid + "已下播");
                }
                break;
            }

            case MsgTypeEnum.Comment:
            {
                if (Settings.DanmuLog)
                {
                    Info = "【弹幕】" + DateTime.Now.ToString("HH:mm:ss.fff") + " : " + e.Message.UserName + " 说:" + e.Message.CommentText;
                    Output("Log", Info, Roomid);
                }
                else
                {
                    Info = "{\"TimeStamp\":\"" + DateTime.Now.ToString("HH:mm:ss.fff") + "\", \"Uname\":\"" + e.Message.UserName + "\", \"Comment\":\"" + e.Message.CommentText + "\", \"Type\":\"弹幕\", \"SCTime\":0}";
                    Output("Data", Info, Roomid);
                }
                break;
            }
            }
        }
Пример #18
0
 public async Task LiveStartRoute(object sender, ReceivedMessageArgs e)
 {
     await TTSPlayer.UnifiedPlay(Vars.CurrentConf.OnLiveStart, true);
 }
Пример #19
0
 public static string ProcessDanmaku(ReceivedMessageArgs e) => ProcessDanmaku(e.Message);
Пример #20
0
 public static bool CheckDanmakuLength(ReceivedMessageArgs e)
 {
     return(CheckDanmakuLength(e.Message.CommentText));
 }
Пример #21
0
 public static string ProcessDanmaku(ReceivedMessageArgs e, string template) => ProcessDanmaku(e.Message, template);
Пример #22
0
        private void HandleTasksMessage(ReceivedMessageArgs messageObject)
        {
            Console.WriteLine($"Tasks message received");
            switch (messageObject.Action)
            {
            case MessageActions.Created:
            case MessageActions.Updated:
                TaskModel   model = default(TaskModel);
                BaseMessage baseMessage;
                if (messageObject.Action == MessageActions.Created)
                {
                    var message = JsonConvert.DeserializeObject <TaskCreatedMessage>(messageObject.Message);
                    baseMessage = message;
                    model       = _mapper.Map <TaskCreatedMessage, TaskModel>(message);
                }
                else
                {
                    var message = JsonConvert.DeserializeObject <TaskCreatedMessage>(messageObject.Message);
                    baseMessage = message;
                    model       = _mapper.Map <TaskCreatedMessage, TaskModel>(message);
                }


                using (var scope = _serviceProvider.CreateScope())
                {
                    var requestsRepository = scope.ServiceProvider.GetRequiredService <RequestsRepository>();
                    var projectsRepository = scope.ServiceProvider.GetRequiredService <TasksRepository>();
                    if (!requestsRepository.IsHandledOrSaveRequestAsync(baseMessage.Id, GetRequestIdInvalidationDate()).GetAwaiter().GetResult())
                    {
                        try
                        {
                            projectsRepository.CreateOrUpdateTaskAsync(model).GetAwaiter().GetResult();
                        }
                        catch (Exception)
                        {
                            requestsRepository.DeleteRequestIdAsync(baseMessage.Id).GetAwaiter().GetResult();
                            throw;
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Already handled: {baseMessage.Id}");
                    }
                }
                break;

            case MessageActions.Deleted:
                //do nothing for now...
                break;

            case TransactionMessageActions.MoveTask_HandleHoursRequested:
            case TransactionMessageActions.MoveTask_Complete:
            case TransactionMessageActions.MoveTask_Rollback:
                Console.WriteLine("Move task transaction message");
                using (var scope = _serviceProvider.CreateScope())
                {
                    var    handler = scope.ServiceProvider.GetRequiredService <MoveTaskTransactionHandler>();
                    string result  = handler.HandleMessageAsync(messageObject).GetAwaiter().GetResult();
                    Console.WriteLine(result);
                }

                break;
            }
        }
Пример #23
0
 public static string Preprocess(string format, ReceivedMessageArgs e) => Preprocess(format, e.Message);
Пример #24
0
 public static string ProcessGift(ReceivedMessageArgs e) => ProcessGift(e.Message, Vars.CurrentConf.OnGift);
Пример #25
0
 public static string ProcessGift(ReceivedMessageArgs e, string template) => ProcessGift(e.Message, template);
Пример #26
0
 protected override void OnMessageReceived(ReceivedMessageArgs messageObject)
 {
     GetHandler(messageObject)
     .HandleMessage(messageObject);
 }