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}"); }
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); }
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; }