Пример #1
0
        // this is a hot mess, trying to improve it
        public void ParseConfig()
        {
            ConfigDocument = XDocument.Load(FileName);
            XElement serversNode = ConfigDocument.Root;
            foreach (XElement serverNode in serversNode.Descendants("server"))
            {
                ServerNodes.Add(serverNode);
                try
                {
                    string updateToDB = serverNode.Attribute("updatedb").Value;
                    if (updateToDB == "true")
                    {
                        this.ConnectionString = serverNode.Attribute("ConnString").Value;
                        this.UseDB = true;
                    }
                }
                catch (Exception ex)
                {

                }
                XElement userinfo = serverNode.Descendants("userinfo").FirstOrDefault();
                BotUsername = userinfo.Descendants("nick").FirstOrDefault().Value;
                BotRealname = userinfo.Descendants("name").FirstOrDefault().Value;
                try
                {
                    OwnerIdentity = userinfo.Descendants("ownerident").FirstOrDefault().Value;
                }
                catch
                {
                    OwnerIdentity = "";
                }
                try {
                    HasOwner = Convert.ToBoolean(userinfo.Descendants("hasowner").FirstOrDefault().Value);
                }
                catch
                {
                    HasOwner = false;
                }
                try
                {
                    UsePassword = Convert.ToBoolean(userinfo.Descendants("needsserverpassword").FirstOrDefault().Value.ToString());
                }
                catch (Exception ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("ERROR: " + ex.Message);
                    Console.ForegroundColor = ConsoleColor.Gray;
                    UsePassword = false;
                }//catch (Exception ex)
                BotInfo.NickName = BotUsername;
                BotInfo.UserName = BotUsername;
                BotInfo.RealName = BotRealname;
                //BotInfo.Password = userinfo.Descendants("userpassword").FirstOrDefault().Value;
                BotInfo.Password = ServerNodes.Descendants("serverpassword").FirstOrDefault().Value;
                ServerName = serverNode.Attribute("id").Value;
                Console.WriteLine("Server pointed to: " + ServerName);
                List<TwitchStuff> StreamersList = new List<TwitchStuff>();
                TwitchStuff StreamInfo = new TwitchStuff();
                LiveMessage = serversNode.Elements("liveannouncement").FirstOrDefault().Attribute("value").Value.ToString();
                string valuecheck = serversNode.Elements("liveannouncement").FirstOrDefault().Value;
                XElement serversubnode = serversNode.Elements("streamannouncement").FirstOrDefault();
                BaseMessageStartStreaming = serversubnode.Attribute("value").Value.ToString();
                ChangeMessage = serversNode.Elements("titlechangeannouncement").FirstOrDefault().Attribute("value").Value.ToString();
                List<XElement> channelNodeElements = new List<XElement>();
                foreach (XElement channelNode in serverNode.Descendants("channel"))
                {

                    List<XElement> StreamerNodes = new List<XElement>();
                    channelNodeElements.Add(channelNode);
                    #region TODO look into better error handling for this shit lol -- Pull channel config values
                    valuecheck = "";
                    Channels channelMonitor = new Channels();
                    try
                    {
                        valuecheck = channelNode.Descendants("liveannouncement").FirstOrDefault().Attribute("value").Value.ToString();
                    }//try
                    catch
                    {
                        valuecheck = "";
                    }//catch
                    if (valuecheck != "") // custom announcements inside the channel, let's use them instead.
                    {
                        channelMonitor.LiveMessage = valuecheck;
                    }//if (valuecheck != "")

                    valuecheck = "";
                    try
                    {
                        valuecheck = channelNode.Attribute("useinfo").Value.ToString();
                    }
                    catch
                    {
                        valuecheck = "";
                    }
                    if (valuecheck != "")
                    {
                        channelMonitor.InfoCommands = Convert.ToBoolean(valuecheck);
                    }
                    try
                    {
                        valuecheck = channelNode.Attribute("").Value.ToString();
                    }
                    catch
                    {
                        valuecheck = "";
                    }
                    if (valuecheck != "")
                    {
                        channelMonitor.Mystery = Convert.ToBoolean(valuecheck);
                    }

                    try
                    {
                        valuecheck = channelNode.Descendants("streamannouncement").FirstOrDefault().Attribute("value").Value.ToString();
                    }//try
                    catch
                    {
                        valuecheck = "";
                    }//catch
                    if (valuecheck != "") // custom announcements inside the channel, let's use them instead.
                    {
                        channelMonitor.AnnounceMessage = valuecheck;
                    }//if (valuecheck != "")
                    valuecheck = "";
                    try
                    {
                        valuecheck = channelNode.Descendants("titlechangeannouncement").FirstOrDefault().Attribute("value").Value.ToString();
                    }
                    catch
                    {
                        valuecheck = "";
                    }
                    if (valuecheck != "") // custom announcements inside the channel, let's use them instead.
                    {
                        channelMonitor.ChangedMessage = valuecheck;
                    }//if (valuecheck != "")
                    channelMonitor.ChannelName = channelNode.Attribute("id").Value;
                    try
                    {
                        valuecheck = channelNode.Attribute("usewhitelist").Value.ToString();
                        channelMonitor.UseWhiteList = Convert.ToBoolean(channelNode.Attribute("usewhitelist").Value.ToString());
                    }//try
                    catch
                    {
                        channelMonitor.UseWhiteList = false;
                    }//catch
                    try
                    {
                        channelMonitor.UseBlackList = Convert.ToBoolean(channelNode.Attribute("useblacklist").Value.ToString());
                    }//try
                    catch
                    {
                        channelMonitor.UseBlackList = false;
                    }//catch
                    try
                    {
                        channelMonitor.ChannelPassword = channelNode.Attribute("password").Value.ToString();
                    }//try
                    catch
                    {
                        channelMonitor.ChannelPassword = "";
                    }//catch
                    #endregion
                    channelMonitor.Streamers = new List<string>();
                    Console.WriteLine("Adding Channel " + channelMonitor.ChannelName + " to the monitor list");
                    List<string> Streamers = new List<string>();
                    TwitchAPIInterface checkTwitch = new TwitchAPIInterface();
                    StreamersList = new List<TwitchStuff>();
                    XElement whiteListInfo = channelNode.Elements("whitelist").FirstOrDefault();
                    if (whiteListInfo != null)
                    {
                        foreach (XElement whitelistitem in whiteListInfo.Elements("game").DefaultIfEmpty())
                        {
                            string gamename = whitelistitem.Attribute("name").Value.ToString();
                            channelMonitor.WhiteList.Add(gamename);
                        }//foreach (XElement whitelistitem in whiteListInfo.Elements("game").DefaultIfEmpty())
                    }//if (whiteListInfo != null)
                    XElement blackListInfo = channelNode.Elements("blacklist").FirstOrDefault();
                    if (blackListInfo != null)
                    {
                        foreach (XElement BlackListitem in blackListInfo.Elements("game").DefaultIfEmpty())
                        {
                            string gamename = BlackListitem.Attribute("name").Value.ToString();
                            channelMonitor.BlackList.Add(gamename);
                        }//foreach (XElement BlackListitem in blackListInfo.Elements("game").DefaultIfEmpty())
                    }//if (blackListInfo != null)
                    foreach (XElement streamers in channelNode.Elements("streamers"))
                    {
                        StreamersNodes.Add(channelMonitor.ChannelName, streamers);
                    }
                    foreach (XElement streamer in channelNode.Elements("streamers").Elements("streamer").ToList())
                    {
                        StreamerNodes.Add(streamer);
                        try
                        {
                            string twitchid = streamer.Attribute("value").Value.ToString();
                            Streamers.Add(twitchid);
                            bool setnoticevalue = false;
                            try
                            {
                                setnoticevalue = Convert.ToBoolean(streamer.Attribute("setnotice").Value.FirstOrDefault());
                            }
                            catch
                            {
                                setnoticevalue = false;
                            }
                            StreamInfo = new TwitchStuff();
                            StreamInfo.setnotice = setnoticevalue;
                            if (StreamInfo.UpdateInfo(twitchid,this) != false)
                            {
                                if (StreamInfo.streamerlive == "true")
                                {

                                }
                            }
                            else
                            {
                                StreamInfo = new TwitchStuff(twitchid);
                                Console.WriteLine("Adding offline stream info for: " + StreamInfo.streamername);
                            }//else

                            channelMonitor.StreamInfo.Add(StreamInfo);
                            channelMonitor.Streamers.Add(StreamInfo.streamername);
                            if(!AllStreamers.Keys.Contains(StreamInfo.streamername))
                                AllStreamers.Add(StreamInfo.streamername, StreamInfo);
                        }//try
                        catch (Exception ex)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("ERROR: " + ex.Message);
                            Console.ForegroundColor = ConsoleColor.Gray;
                            continue;
                        }//catch (Exception ex)
                    }//foreach (XElement streamer in channelNode.Elements("streamers").Elements("streamer").ToList())
                    channelMonitor.LastLiveAnnouncement = DateTime.Now.AddMinutes(-3);
                    TwitchChannels.Add(channelMonitor);
                    List<string> raceList = new List<string>();
                    foreach (XElement race in channelNode.Elements("races").Elements("race").ToList())
                    {
                        channelMonitor.ChannelRaces.Add(race.Attribute("name").Value.ToString());
                        Console.WriteLine("Adding watch for race: " + race.Attribute("name").Value.ToString() + " for channel " + channelMonitor.ChannelName);
                    }//foreach (XElement race in channelNode.Elements("races").Elements("race").ToList())
                }//foreach (XElement channelNode in serverNode.Descendants("channel"))
            }
        }
Пример #2
0
 public bool UpdateInfo(string TwitchName, ConfigurationReader config)
 {
     bool properlyupdated = true;
     bool allstreamerspresent = false;
     try
     {
         if (config.AllStreamers.ContainsKey(TwitchName))
         {
             if (config.AllStreamers[TwitchName].lastrefresh.AddSeconds(30) >= DateTime.Now)
             {
                 allstreamerspresent = true;
             }
         }
         if (allstreamerspresent)
         {
             // This is so we don't repeatedly nail the twitch api for our own speed and whatnot
             this.streamerviewcount = config.AllStreamers[TwitchName].streamerviewcount;
             this.streamname = config.AllStreamers[TwitchName].streamname;
             this.game = config.AllStreamers[TwitchName].game;
             this.streamerlive = config.AllStreamers[TwitchName].streamerlive;
         }
         else
         {
             TwitchAPIInterface getTwitch = new TwitchAPIInterface();
             getTwitch.GetResponse(TwitchName);
             if (!String.IsNullOrEmpty(getTwitch.Error))
             {
                 properlyupdated = false;
             }
             else
             {
                 // no error
                 if (String.IsNullOrWhiteSpace(getTwitch.Data["stream"].ToString()))
                 {
                     // it appears that twitch has told us this person is not streaming.
                     this.game = "";
                     this.streamname = "";
                     this.streamerviewcount = "";
                     this.streamerlive = "false";
                 }
                 else
                 {
                     string streamname = getTwitch.Data["stream"]["channel"]["status"].ToString().Trim('\r','\n');
                     string streamviewers = getTwitch.Data["stream"]["viewers"].ToString();
                     string streamgame = getTwitch.Data["stream"]["game"].ToString();
                     this.streamerviewcount = streamviewers;
                     this.streamname = streamname;
                     this.game = streamgame;
                     this.streamerlive = "true";
                 }
             }//else
         }
         if (properlyupdated == true)
         {
             this.streamername = TwitchName;
             this.lastrefresh = DateTime.Now;
             if (config.AllStreamers.ContainsKey(TwitchName))
             {
                 config.AllStreamers[TwitchName].streamerviewcount = this.streamerviewcount;
                 config.AllStreamers[TwitchName].streamname = this.streamname;
                 config.AllStreamers[TwitchName].game = this.game;
                 config.AllStreamers[TwitchName].streamerlive = this.streamerlive;
                 config.AllStreamers[TwitchName].lastrefresh = DateTime.Now;
             }
             else
             {
                 config.AllStreamers[TwitchName] = this;
             }
             return true;
         }
         else
             return false;
     }
     catch (Exception ex)
     {
         Console.ForegroundColor = ConsoleColor.Red;
         Console.WriteLine("ERROR: " + ex.Message);
         Console.ForegroundColor = ConsoleColor.Gray;
         return false;
     }
 }