private static IChannelConfig LoadChannelConfig(BotFactory fac, XElement chElem) { var conf = new BotFactory.ChannelConfig(chElem.Attribute("id").Value); foreach (var elem in chElem.Elements()) { if (elem.Name.LocalName == "JoinEvent") { conf.AddReaction(JoinEventPattern.Instance, LoadReaction(fac, elem)); } else if (elem.Name.LocalName == "MessageEvent") { IEventPattern pattern; var regexAttr = elem.Attribute("regex"); if (regexAttr != null) { pattern = new RegexMessagePattern(regexAttr.Value); } else { pattern = NullEventPattern.Instance; } conf.AddReaction(pattern, LoadReaction(fac, elem)); } } return(conf); }
private static IReaction LoadReaction(BotFactory fac, XElement rxElem) { var reaction = new BotFactory.Reaction(); foreach (var node in rxElem.Nodes()) { if (node.NodeType == XmlNodeType.Text) { reaction.AddAction( new SendMessageAction( ((XText)node).Value .Trim() .Replace('\n', ' '), // rxElem.Attribute("raw") != null false ) ); } else if (node.NodeType == XmlNodeType.Element) { var actionElem = (XElement)node; var pluginId = actionElem.Name.NamespaceName; var pluginAlias = actionElem.GetPrefixOfNamespace(actionElem.Name.Namespace); IBotPlugin plugin; if (fac.loadedPlugins.ContainsKey(pluginAlias)) { plugin = fac.loadedPlugins[pluginAlias]; } else { plugin = fac.plugins[pluginId](); fac.loadedPlugins[pluginAlias] = plugin; } reaction.AddAction( plugin.Action( actionElem.Name.LocalName, AttrDict(actionElem.Attributes()) ) ); } } return(reaction); }
public static void LoadConfig(this BotFactory fac, XElement botConfig) { fac.loadedProvider = fac.providers[botConfig.Name.LocalName](); foreach (var elem in botConfig.Elements()) { if (elem.Name.Namespace == "") { if (elem.Name.LocalName == "Auth") { fac.loadedAuth = AttrDict(elem.Attributes()); } else if (elem.Name.LocalName == "Channel") { fac.loadedChannels.Add(LoadChannelConfig(fac, elem)); } } else if (elem.Name.LocalName == "Load") { } } }