JockoTM

BotTcp.cs

Mar 23rd, 2016
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net.Sockets;
  4. using System.IO;
  5.  
  6. namespace TwitchBot
  7. {
  8.  
  9.     public class ChatBot
  10.     {
  11.         public string user = TwitchBot.Program.leil;
  12.         public string pass = TwitchBot.Program.lel;
  13.         TcpClient tcpClient;
  14.         StreamReader reader;
  15.         StreamWriter writer;
  16.  
  17.         public string userName, password, channelName, prefixForSendingChatMessages;
  18.         DateTime lastMessageSendTime;
  19.  
  20.         Queue<string> sendMessageQueue;
  21.  
  22.         public ChatBot()
  23.         {
  24.             sendMessageQueue = new Queue<string>();
  25.             this.userName = File.ReadAllText("username.txt").ToLower();
  26.             this.channelName = userName;
  27.             this.password = pass = File.ReadAllText("password.txt");
  28.             prefixForSendingChatMessages = String.Format(":{0}!{0}@{0}.tmi.twitch.tv PRIVMSG #{1} :", userName, channelName);
  29.  
  30.             Reconnect();
  31.         }
  32.  
  33.         public void SendTwitchMessage(string message)
  34.         {
  35.             sendMessageQueue.Enqueue(message);
  36.         }
  37.  
  38.         void Reconnect()
  39.         {
  40.             tcpClient = new TcpClient("irc.twitch.tv", 6667);
  41.             reader = new StreamReader(tcpClient.GetStream());
  42.             writer = new StreamWriter(tcpClient.GetStream());
  43.             writer.AutoFlush = true;
  44.  
  45.             writer.WriteLine(String.Format("PASS {0}\r\nNICK {1}\r\nUser {1} 8 * :{1}", password, userName));
  46.             //writer.WriteLine("CAP REQ :twitch.tv/membership");
  47.             writer.WriteLine("JOIN #" + channelName);
  48.             lastMessageSendTime = DateTime.Now;
  49.         }
  50.  
  51.         public void Update()
  52.         {
  53.             if (!tcpClient.Connected)
  54.             {
  55.                 Reconnect();
  56.             }
  57.  
  58.             TryReceiveMessages();
  59.             TrySendingMessages();
  60.         }
  61.  
  62.      
  63.         void TryReceiveMessages()
  64.         {
  65.             if (tcpClient.Available > 0)
  66.             {
  67.                 var message = reader.ReadLine();
  68.  
  69.                 Console.WriteLine(String.Format("\r\nNew message: {0}", message));
  70.  
  71.                 var iCollon = message.IndexOf(":", 1);
  72.                 if (iCollon > 0)
  73.                 {
  74.                     var command = message.Substring(1, iCollon);
  75.                     if (command.Contains("PRIVMSG #"))
  76.                     {
  77.                         var iBang = command.IndexOf("!");
  78.                         if (iBang > 0)
  79.                         {
  80.                             var speaker = command.Substring(0, iBang);
  81.                             var chatMessage = message.Substring(iCollon + 1);
  82.  
  83.                             ReceiveMessage(speaker, chatMessage);
  84.                         }
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.  
  90.         void ReceiveMessage(string speaker, string message)
  91.         {
  92.             Console.WriteLine(String.Format("\r\n{0}: {1}", speaker, message));
  93.  
  94.             if (message.StartsWith("!hi"))
  95.             {
  96.                 SendTwitchMessage(String.Format("Hello, {0}", speaker));
  97.             }
  98.  
  99.            
  100.         }
  101.  
  102.         void TrySendingMessages()
  103.         {
  104.             if (DateTime.Now - lastMessageSendTime > TimeSpan.FromSeconds(2))
  105.             {
  106.                 if (sendMessageQueue.Count > 0)
  107.                 {
  108.                     var message = sendMessageQueue.Dequeue();
  109.                     writer.WriteLine(String.Format("{0}{1}", prefixForSendingChatMessages, message));
  110.                     lastMessageSendTime = DateTime.Now;
  111.                 }
  112.             }
  113.         }
  114.     }
  115. }
Add Comment
Please, Sign In to add comment