예제 #1
0
        public void TakeMessageForProcessing(ReceivedMessage msg)
        {
            _logger.LogInfo($"Start TakeMessageForProcessing. OperatorID - {OperatorID}");
            giveAnswer(ChatAction.Typing());

            //проверка 
            if (User.ChatId != msg.Chat.Id)
                throw new Exception("Ошибка назначения сообщения");

            var msgType = parseMessage(msg);

            //сохраниние неизвестности

            IDialogItem dialogItem = null;
            if (msgType == LogicMessageType.НеизвестныйТип)
            {
                giveAnswer(new SendingMessage("Извини, я не умею работать с такими сообщениями"));
                return;
            }
            else
            {
                switch (msgType)
                {
                    case LogicMessageType.Комманда:
                        dialogItem = _dialogItemFactory.GetItem(DialogItemType.CommandExecution);
                        break;
                    case LogicMessageType.НайтиОпределение:
                        dialogItem = _dialogItemFactory.GetItem(DialogItemType.WhatIsType);
                        break;
                    case LogicMessageType.УправлениеКалориями:
                        dialogItem = _dialogItemFactory.GetItem(DialogItemType.CaloricManagement);
                        break;
                }

                if (dialogItem != null)
                {
                    AddMessageToHistory(dialogItem);
                    dialogItem.AddInitialImpact(msg.Text);
                }

                if (dialogItem == null && msgType == LogicMessageType.ТекстовоеСообщение)
                {
                    if (_chatHistory.Any(p => !p.IsProcessed))
                    {
                        dialogItem = _chatHistory.FirstOrDefault(p => p.TryAddAddition(msg.Text));
                    }
                }

                if (dialogItem == null)
                {
                    giveAnswer(new SendingMessage("Извини, я не умею работать с такими сообщениями"));
                    return;
                }

                //отправляем на обработку
                new Task(() => ProcessCommandDialogItem(dialogItem)).Start();
            }

            _logger.LogInfo($"End TakeMessageForProcessing. OperatorID - {OperatorID}");
        }
예제 #2
0
        public void ProcessMessage(ReceivedMessage receivedMessage)
        {
            _sendingDataQueue.Enqueue(new DataToSend(receivedMessage.Chat.Id, ChatAction.Typing()));
          

            var chatOperator = _chatOperators.FirstOrDefault(p => p.User.ChatId == receivedMessage.Chat.Id);
            if (chatOperator == null)
            {
                chatOperator= ChatOperator.CreateOperotor(receivedMessage.Chat.Id,receivedMessage.From,  _sendingDataQueue, _logger);
                _chatOperators.Add(chatOperator);
            }

            chatOperator.TakeMessageForProcessing(receivedMessage);
        }
예제 #3
0
        private LogicMessageType parseMessage(ReceivedMessage message)
        {
            if (message.Type != MessageType.TextMessage)
                return LogicMessageType.НеизвестныйТип;

            message.UpdateText(message.Text.ToLower());

            
            if (message.Text.IndexOf('/') == 0)
                return LogicMessageType.Комманда;


            var typeOfMessage = (int) LogicMessageType.ТекстовоеСообщение;

            foreach (var storageType in _storageApi.GetLogicMessageTypesDictionary())
            {
                if (message.Text.IsMatch(storageType.Value))
                    typeOfMessage = storageType.Key;
            }



            return (LogicMessageType)typeOfMessage;
        }