public static new BotRule CreateRuleFromXml(ChatBotRuleGenerator generator, XmlNode node) { // get unique setters Dictionary<string, string> setters = new Dictionary<string, string>(); foreach (XmlNode subnode in node.SelectChatBotNodes("cb:Setters/cb:Set").Cast<XmlNode>().Where(n => n.Attributes["Key"] != null)) { setters[subnode.Attributes["Key"].Value] = subnode.InnerText; } return new ReplacementBotRule( generator.GetRuleName(node), generator.GetRuleWeight(node), new Regex(generator.GetRulePattern(node)), node.SelectChatBotNodes("cb:Messages/cb:Message").Cast<XmlNode>().Select(n => n.InnerText).ToArray(), setters ); }
public string GetRulePattern(XmlNode node) { foreach (XmlNode subnode in node.SelectChatBotNodes("cb:Pattern")) { return subnode.InnerText; } return ""; }
public static new BotRule CreateRuleFromXml(ChatBotRuleGenerator generator, XmlNode node) { return new PowershellBotRule( generator.GetRuleName(node), generator.GetRuleWeight(node), new Regex(generator.GetRulePattern(node)), node.SelectChatBotNodes("cb:Script").Cast<XmlNode>().First().InnerText ); }
public static new BotRule CreateRuleFromXml(ChatBotRuleGenerator generator, XmlNode node) { return new RandomAnswersBotRule( generator.GetRuleName(node), generator.GetRuleWeight(node), new Regex(generator.GetRulePattern(node)), node.SelectChatBotNodes("cb:Messages/cb:Message").Cast<XmlNode>().Select(n => n.InnerText).ToArray() ); }
public int GetRuleWeight(XmlNode node) { int weight = -100; foreach (XmlNode subnode in node.SelectChatBotNodes("cb:Weight")) { if (Int32.TryParse(subnode.InnerText.Trim(), out weight)) { return weight; } } return weight; }
public static BotRule CreateRuleFromXml(ChatBotRuleGenerator generator, XmlNode node) { BotRuleCodeCompiler brcc = new BotRuleCodeCompiler(node.SelectChatBotNodes("cb:Process").Cast<XmlNode>().First().InnerText); return new BotRule( generator.GetRuleName(node), generator.GetRuleWeight(node), new Regex(generator.GetRulePattern(node)), delegate(Match match, ChatSessionInterface session) { return brcc.Execute(match, session); } ); }
public static new BotRule CreateRuleFromXml(ChatBotRuleGenerator generator, XmlNode node) { // get unique setters List<Tuple<string, Operator, string>> conditions = new List<Tuple<string, Operator, string>>(); foreach (XmlNode subnode in node.SelectChatBotNodes("cb:Conditions/cb:Condition").Cast<XmlNode>().Where(n => n.Attributes["Key"] != null && n.Attributes["Operator"] != null)) { switch (subnode.Attributes["Operator"].Value.Trim().ToLower()) { case "equal": case "eq": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.Equal, subnode.InnerText)); break; case "equalignorecase": case "ieq": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.EqualIgnoreCase, subnode.InnerText)); break; case "notequal": case "ne": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.NotEqual, subnode.InnerText)); break; case "notequalignorecase": case "ine": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.NotEqualIgnoreCase, subnode.InnerText)); break; case "containskey": case "ck": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.ContainsKey, subnode.InnerText)); break; case "containsvalue": case "cv": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.ContainsValue, subnode.InnerText)); break; case "containsvalueignorecase": case "icv": conditions.Add(new Tuple<string, Operator, string>(subnode.Attributes["Key"].Value, Operator.ContainsValueIgnoreCase, subnode.InnerText)); break; } } return new ConditionBotRule( generator.GetRuleName(node), generator.GetRuleWeight(node), conditions, generator.Parse(node.OwnerDocument, node) ); }
public List<BotRule> Parse(XmlDocument document, XmlNode startNode=null) { List<BotRule> liste = new List<BotRule>(); if (startNode == null) { foreach (XmlNode node in document.SelectChatBotNodes("/cb:ChatBot/cb:Rules/cb:Rule")) { BotRule rule = ProcessNode(node); if (rule != null) { liste.Add(rule); } } } else { foreach (XmlNode node in startNode.SelectChatBotNodes("cb:Rules/cb:Rule")) { BotRule rule = ProcessNode(node); if (rule != null) { liste.Add(rule); } } } return liste; }