Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Threading;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.IO;
  7. using System.Runtime.InteropServices;
  8. using System.Collections.Generic;
  9. using UnityEngine.UI;
  10.  
  11. public class TheTwitchChat : MonoBehaviour
  12. {
  13.  
  14. public string myUsername;
  15. public string password;
  16. public string streamname;
  17.  
  18. public Text CustomMsg;
  19. public Text UsernameField;
  20. public Text OauthField;
  21.  
  22. public IrcClient irc;
  23. string readData = "";
  24. Thread chatThread;
  25. bool isRunning = true;
  26.  
  27. public Queue<ChatMessage> ChatMessages;
  28.  
  29. void Start()
  30. {
  31. ChatMessages = new Queue<ChatMessage>();
  32. irc = new IrcClient("irc.chat.twitch.tv", 6667, myUsername, password);
  33. irc.joinRoom(streamname);
  34. chatThread = new Thread(getMessage);
  35. chatThread.Start();
  36. }
  37.  
  38. void OnApplicationQuit()
  39. {
  40. isRunning = false;
  41. irc.leaveRoom();
  42. }
  43.  
  44. void QuitBot()
  45. {
  46. isRunning = false;
  47. irc.leaveRoom();
  48. }
  49.  
  50. void getMessage()
  51. {
  52. while (isRunning)
  53. {
  54. try
  55. {
  56. readData = irc.readMessage();
  57. msg();
  58. }
  59. catch
  60. {
  61. Debug.Log("break");
  62. break;
  63. }
  64. Thread.Sleep(50);
  65. }
  66. }
  67.  
  68. void msg()
  69. {
  70. string[] separator = new string[] { "#" + streamname + " :" };
  71. string[] whisperSeparator = new string[] { myUsername + " :" };
  72. string[] singlesep = new string[] { ":", "!" };
  73.  
  74. //Debug.Log(readData);
  75. if (readData.Contains("PRIVMSG"))
  76. {
  77. string username = readData.Split(singlesep, System.StringSplitOptions.None)[1].ToLower();
  78. string message = readData.Split(separator, System.StringSplitOptions.None)[1];
  79.  
  80. ChatMessages.Enqueue(new ChatMessage(username, message));
  81. }
  82.  
  83. if (readData.Contains("PING"))
  84. {
  85. irc.PingResponse();
  86. }
  87. }
  88.  
  89. private void Update()
  90. {
  91. ReadChatMessages();
  92. }
  93.  
  94. public void Test()
  95. {
  96. streamname = UsernameField.text;
  97. password = OauthField.text;
  98. QuitBot();
  99. Start();
  100. irc.sendChatMessage("If You Can See This Message If Has Worked!");
  101. }
  102.  
  103. void ReadChatMessages()
  104. {
  105. while (ChatMessages.Count > 0)
  106. {
  107. ChatMessage chatMessage = ChatMessages.Dequeue();
  108. Debug.Log(chatMessage.Username + ": " + chatMessage.Message);
  109. //Chat Messages
  110. if (chatMessage.Username == "jaskowicz") //Set To Your Username;
  111. {
  112. if (chatMessage.Message.StartsWith("!"))
  113. {
  114. CustomMsg.GetComponent<TypeWriter>().Type(chatMessage.Message.Remove(0, 1));
  115. }
  116. if (chatMessage.Message == ":Ping")
  117. {
  118. irc.sendChatMessage("Pong");
  119. }
  120. if (chatMessage.Message == ":OpenUrl")
  121. {
  122. string[] command = chatMessage.Message.Split(new char[] { ' ' });
  123. Application.OpenURL(command[1]);
  124. }
  125. }
  126.  
  127. }
  128. }
  129. }
  130.  
  131. public class ChatMessage
  132. {
  133. public string Username;
  134. public string Message;
  135.  
  136. public ChatMessage(string name, string m)
  137. {
  138. Username = name;
  139. Message = m;
  140. }
  141. }
  142.  
  143. public class IrcClient
  144. {
  145. private string userName;
  146. private string channel;
  147.  
  148. public TcpClient tcpClient;
  149. private StreamReader inputStream;
  150. private StreamWriter outputStream;
  151.  
  152. public IrcClient(string ip, int port, string cUserName, string password)
  153. {
  154. userName = cUserName;
  155. tcpClient = new TcpClient(ip, port);
  156. inputStream = new StreamReader(tcpClient.GetStream());
  157. outputStream = new StreamWriter(tcpClient.GetStream());
  158.  
  159. outputStream.WriteLine("PASS " + password);
  160. outputStream.WriteLine("NICK " + userName);
  161. outputStream.WriteLine("USER " + userName + " 8 * :" + userName);
  162. outputStream.WriteLine("CAP REQ :twitch.tv/membership");
  163. outputStream.WriteLine("CAP REQ :twitch.tv/commands");
  164. outputStream.Flush();
  165. }
  166.  
  167. public void joinRoom(string channel)
  168. {
  169. this.channel = channel;
  170. outputStream.WriteLine("JOIN #" + channel);
  171. outputStream.Flush();
  172. }
  173.  
  174. public void leaveRoom()
  175. {
  176. outputStream.Close();
  177. inputStream.Close();
  178. }
  179.  
  180. public void sendIrcMessage(string message)
  181. {
  182. outputStream.WriteLine(message);
  183. outputStream.Flush();
  184. }
  185.  
  186. public void sendChatMessage(string message)
  187. {
  188. sendIrcMessage(":" + userName + "!" + userName + "@" + userName + ".tmi.twitch.tv PRIVMSG #" + channel + " :" + message);
  189. }
  190.  
  191. public void SendWhisper(string message, string target)
  192. {
  193. sendIrcMessage(":" + userName + "!" + userName + "@" + userName + ".tmi.twitch.tv PRIVMSG #" + channel + " :/w " + target + " " + message);
  194. }
  195.  
  196. public void PingResponse()
  197. {
  198. sendIrcMessage("PONG tmi.twitch.tv\r\n");
  199. Debug.Log("PONG");
  200. }
  201.  
  202. public string readMessage()
  203. {
  204. string message = "";
  205. message = inputStream.ReadLine();
  206. return message;
  207. }
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement