예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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")
                {
                }
            }
        }