//start listening for donations, open status window
        public void LaunchWindow(object sender, RoutedEventArgs e)
        {
            if (!Directory.Exists("output"))
            {
                DirectoryInfo di = Directory.CreateDirectory("output");
            }
            string         url = "https://www.twitchalerts.com/api/v1.0/user?access_token=" + AccessToken.Password;
            HttpWebRequest request;

            request        = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            window2.Show();
            string         url2 = "https://api.twitch.tv/kraken/channel";
            HttpWebRequest request2;

            request2        = (HttpWebRequest)WebRequest.Create(url2);
            request2.Method = "GET";
            request2.Headers["Client-ID"]     = "9tztppkgkayamw5135n4uo216fwvoy";
            request2.Headers["Authorization"] = "OAuth " + TwitchAccessToken.Password;
            try
            {
                WebResponse  resp               = request.GetResponse();
                Stream       dataStream         = resp.GetResponseStream();
                StreamReader reader             = new StreamReader(dataStream);
                string       responseFromServer = reader.ReadToEnd();
                dataStream.Close();
                string json = responseFromServer;
                User   user = JsonConvert.DeserializeObject <User>(json);
                my_username = user.GetTwitch().getName();
                my_user_id  = user.GetTwitch().GetId();
                WebResponse  resp2               = request2.GetResponse();
                Stream       dataStream2         = resp2.GetResponseStream();
                StreamReader reader2             = new StreamReader(dataStream2);
                string       responseFromServer2 = reader2.ReadToEnd();
                dataStream2.Close();
                string     json2      = responseFromServer2;
                TwitchUser twitchuser = JsonConvert.DeserializeObject <TwitchUser>(json2);

                //set up timer for streamlabs donation checker
                void updateWindow(object source, ElapsedEventArgs ev)
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        UpdateDonations(user.GetTwitch().GetId());
                    });
                }
                UpdateDonations(user.GetTwitch().GetId());
                System.Timers.Timer myTimer = new System.Timers.Timer();
                myTimer.Elapsed += new ElapsedEventHandler(updateWindow);
                myTimer.Interval = 10000;
                myTimer.Enabled  = true;
                List <string> bidwarOptions = new List <string>();
                foreach (object child in TextBoxes.Children)
                {
                    var textbox = (TextBox)child;
                    if (textbox.Text != "")
                    {
                        bidwarOptions.Add(textbox.Text);
                    }
                }

                //set up IRC listener for subs, resubs, and corrections
                void doIRC()
                {
                    IRCConfig conf = new IRCConfig();

                    conf.name     = my_username;
                    conf.nick     = my_username;
                    conf.port     = 6667;
                    conf.channel  = "#" + my_username;
                    conf.server   = "irc.chat.twitch.tv";
                    conf.password = "******" + TwitchAccessToken.Password;
                    conf.joined   = false;


                    IRCBot bot = new IRCBot(conf);

                    using (bot)
                    {
                        System.Diagnostics.Debug.WriteLine("connecting");
                        bot.Connect();
                        bot.IRCWork(user.GetTwitch().GetId(), bidwarOptions);
                    }
                }
                Thread irc = new Thread(new ThreadStart(doIRC));
                irc.Start();

                //websocket listener for bits

                /*WebSocket websocket = new WebSocket("wss://pubsub-edge.twitch.tv");
                 * websocket.Opened += new EventHandler(websocket_Opened);
                 * websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(websocket_Error);
                 * websocket.Closed += new EventHandler(websocket_Closed);
                 * websocket.MessageReceived += new EventHandler<WebSocket4Net.MessageReceivedEventArgs>(websocket_MessageReceived);
                 * websocket.Open();
                 * openListener();
                 * JavaScriptSerializer serializer = new JavaScriptSerializer();
                 * var listen = false;
                 * System.Timers.Timer pingTimer = new System.Timers.Timer();
                 * pingTimer.Elapsed += new ElapsedEventHandler(sendPing);
                 * pingTimer.Interval = 240000;
                 * pingTimer.Enabled = true;
                 * void websocket_Opened(object sender2, EventArgs e2)
                 * {
                 *  Application.Current.Dispatcher.Invoke((Action)delegate {
                 *      var tblock2 = new TextBlock();
                 *      tblock2.Text = "Established connection to bits service";
                 *      tblock2.TextWrapping = System.Windows.TextWrapping.Wrap;
                 *      window2.Logs.Children.Add(tblock2);
                 *  });
                 * }
                 * void websocket_Error(object sender2, SuperSocket.ClientEngine.ErrorEventArgs e2)
                 * {
                 *  Application.Current.Dispatcher.Invoke((Action)delegate {
                 *      var tblock3 = new TextBlock();
                 *      tblock3.Text = "Bits service error: " + e2.Exception.Message;
                 *      tblock3.TextWrapping = System.Windows.TextWrapping.Wrap;
                 *      window2.Logs.Children.Add(tblock3);
                 *  });
                 * }
                 * void websocket_Closed(object sender2, EventArgs e2)
                 * {
                 *  Application.Current.Dispatcher.Invoke((Action)delegate {
                 *      var tblock4 = new TextBlock();
                 *      tblock4.Text = "Closed bits service";
                 *      tblock4.TextWrapping = System.Windows.TextWrapping.Wrap;
                 *      window2.Logs.Children.Add(tblock4);
                 *  });
                 * }
                 * void websocket_MessageReceived(object sender2, MessageReceivedEventArgs e2)
                 * {
                 *  SocketMessage baseMessage = JsonConvert.DeserializeObject<SocketMessage>(e2.Message);
                 *  var output = "";
                 *  if (baseMessage.getType() == "PONG")
                 *  {
                 *      output = "pong";
                 *  }
                 *  else if (baseMessage.getType() == "RECONNECT")
                 *  {
                 *      websocket.Close();
                 *      websocket.Open();
                 *      output = "Reconnecting due to server restart";
                 *  }
                 *  if (baseMessage.getType() == "MESSAGE")
                 *  {
                 *      var container = JsonConvert.DeserializeObject<CheerMessageContainer>(e2.Message);
                 *      CheerMessageData data = container.getData();
                 *      try
                 *      {
                 *          if (data.getTopic() == "channel-bits-events-v1." + twitchuser.getId().ToString())
                 *          {
                 *              CheerContainer thisCheer = JsonConvert.DeserializeObject<CheerContainer>(data.getMessage());
                 *              saveCheer(thisCheer, user.GetTwitch().GetId());
                 *          }
                 *      }
                 *      catch(Exception eee)
                 *      {
                 *          output = e2.Message;
                 *      }
                 *  }
                 *  else
                 *  {
                 *      output = e2.Message;
                 *  }
                 *  Application.Current.Dispatcher.Invoke((Action)delegate {
                 *      var tblock5 = new TextBlock();
                 *      tblock5.Text = "Message from bits service: " + e2.Message;
                 *      tblock5.TextWrapping = System.Windows.TextWrapping.Wrap;
                 *      window2.Logs.Children.Add(tblock5);
                 *  });
                 * }
                 * void sendPing(object source, ElapsedEventArgs ev)
                 * {
                 *  var ping = new { type = "PING" };
                 *  websocket.Send(serializer.Serialize(ping));
                 * }
                 * async void openListener()
                 * {
                 *  await Task.Delay(TimeSpan.FromSeconds(7));
                 *  var ts = new string[1];
                 *  ts[0] = "channel-bits-events-v1." + twitchuser.getId().ToString();
                 *  var listener = new { type = "LISTEN", data = new { topics = ts, auth_token = TwitchAccessToken.Password } };
                 *  websocket.Send(serializer.Serialize(listener));
                 * }*/
            }
            catch (Exception ee)
            {
                System.Diagnostics.Debug.WriteLine(ee.Message);
                MessageBox.Show("Could not connect to StreamLabs. Try re-entering your access token. The server may also be down.");
            }
        }
示例#2
0
 public IRCBot(IRCConfig config)
 {
     this.config = config;
 }