public MessageContext Create(IInboundMessage message) { if (message == null) throw new ArgumentNullException(nameof(message)); _currentContext = new MessageContext(message); IdentifyWords(); IdentifyAreas(); IdentifyComponents(); IdentifyComponentStates(); FilterComponentIds(); return _currentContext; }
private string ProcessMessage(MessageContext messageContext) { if (messageContext.GetPatternMatch("Hi").Success) { return $"{Emoji.VictoryHand} Hi, was kann ich für Dich tun?"; } if (messageContext.GetPatternMatch("Danke").Success) { return $"{Emoji.Wink} Habe ich doch gerne gemacht."; } if (messageContext.GetPatternMatch("Wetter").Success) { return GetWeatherStatus(); } if (messageContext.GetPatternMatch("Fenster").Success) { return GetWindowStatus(); } if (!messageContext.FilteredComponentIds.Any()) { if (messageContext.IdentifiedComponentIds.Count > 0) { return $"{Emoji.Confused} Mit so vielen Anfragen kann ich nicht umgehen. Bitte nenne mir nur eine eindeutige Komponente."; } return $"{Emoji.Confused} Du musst mir schon einen Sensor oder Aktor nennen."; } if (messageContext.FilteredComponentIds.Count > 1) { return $"{Emoji.Flushed} Bitte nicht mehrere Komponenten auf einmal."; } if (messageContext.FilteredComponentIds.Count == 1) { var component = _componentService.GetComponent<IComponent>(messageContext.IdentifiedComponentIds.First()); IActuator actuator = component as IActuator; if (actuator != null) { return UpdateActuatorState(actuator, messageContext); } ISensor sensor = component as ISensor; if (sensor != null) { return GetSensorStatus(sensor); } } return $"{Emoji.Confused} Das habe ich leider nicht verstanden. Bitte stelle Deine Anfrage präziser."; }
private string UpdateActuatorState(IActuator actuator, MessageContext messageContext) { if (messageContext.IdentifiedComponentStates.Count == 0) { return $"{Emoji.Confused} Was soll ich damit machen?"; } if (messageContext.IdentifiedComponentStates.Count > 1) { return $"{Emoji.Confused} Das was du möchtest ist nicht eindeutig."; } if (!actuator.SupportsState(messageContext.IdentifiedComponentStates.First())) { return $"{Emoji.Hushed} Das wird nicht funktionieren."; } actuator.SetState(messageContext.IdentifiedComponentStates.First()); return $"{Emoji.ThumbsUp} Habe ich erledigt. Kann ich noch etwas für dich tun?"; }
private string GenerateDebugOutput(MessageContext messageContext) { var debugOutput = new StringBuilder(); debugOutput.AppendLine("<b>DEBUG:</b>"); debugOutput.AppendLine("<b>[Original message]</b>"); debugOutput.AppendLine(messageContext.OriginalMessage.Text); int counter = 1; debugOutput.AppendLine("<b>[Identified components]</b>"); foreach (var componentId in messageContext.IdentifiedComponentIds) { debugOutput.AppendLine($"{counter} - {componentId}"); counter++; } counter = 1; debugOutput.AppendLine("<b>[Identified areas]</b>"); foreach (var areaId in messageContext.IdentifiedAreaIds) { debugOutput.AppendLine($"{counter} - {areaId}"); counter++; } counter = 1; debugOutput.AppendLine("<b>[Filtered components]</b>"); foreach (var componentId in messageContext.FilteredComponentIds) { debugOutput.AppendLine($"{counter} - {componentId}"); counter++; } counter = 1; debugOutput.AppendLine("<b>[Identified component states]</b>"); foreach (var componentState in messageContext.IdentifiedComponentStates) { debugOutput.AppendLine($"{counter} - {componentState}"); counter++; } return debugOutput.ToString(); }