Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Threading;
- using System.Net;
- using System.Net.Sockets;
- using System.IO;
- using System.Runtime.InteropServices;
- using System.Collections.Generic;
- using UnityEngine.UI;
- public class TheTwitchChat : MonoBehaviour
- {
- public string myUsername;
- public string password;
- public string streamname;
- public Text CustomMsg;
- public Text UsernameField;
- public Text OauthField;
- public IrcClient irc;
- string readData = "";
- Thread chatThread;
- bool isRunning = true;
- public Queue<ChatMessage> ChatMessages;
- void Start()
- {
- ChatMessages = new Queue<ChatMessage>();
- irc = new IrcClient("irc.chat.twitch.tv", 6667, myUsername, password);
- irc.joinRoom(streamname);
- chatThread = new Thread(getMessage);
- chatThread.Start();
- }
- void OnApplicationQuit()
- {
- isRunning = false;
- irc.leaveRoom();
- }
- void QuitBot()
- {
- isRunning = false;
- irc.leaveRoom();
- }
- void getMessage()
- {
- while (isRunning)
- {
- try
- {
- readData = irc.readMessage();
- msg();
- }
- catch
- {
- Debug.Log("break");
- break;
- }
- Thread.Sleep(50);
- }
- }
- void msg()
- {
- string[] separator = new string[] { "#" + streamname + " :" };
- string[] whisperSeparator = new string[] { myUsername + " :" };
- string[] singlesep = new string[] { ":", "!" };
- //Debug.Log(readData);
- if (readData.Contains("PRIVMSG"))
- {
- string username = readData.Split(singlesep, System.StringSplitOptions.None)[1].ToLower();
- string message = readData.Split(separator, System.StringSplitOptions.None)[1];
- ChatMessages.Enqueue(new ChatMessage(username, message));
- }
- if (readData.Contains("PING"))
- {
- irc.PingResponse();
- }
- }
- private void Update()
- {
- ReadChatMessages();
- }
- public void Test()
- {
- streamname = UsernameField.text;
- password = OauthField.text;
- QuitBot();
- Start();
- irc.sendChatMessage("If You Can See This Message If Has Worked!");
- }
- void ReadChatMessages()
- {
- while (ChatMessages.Count > 0)
- {
- ChatMessage chatMessage = ChatMessages.Dequeue();
- Debug.Log(chatMessage.Username + ": " + chatMessage.Message);
- //Chat Messages
- if (chatMessage.Username == "jaskowicz") //Set To Your Username;
- {
- if (chatMessage.Message.StartsWith("!"))
- {
- CustomMsg.GetComponent<TypeWriter>().Type(chatMessage.Message.Remove(0, 1));
- }
- if (chatMessage.Message == ":Ping")
- {
- irc.sendChatMessage("Pong");
- }
- if (chatMessage.Message == ":OpenUrl")
- {
- string[] command = chatMessage.Message.Split(new char[] { ' ' });
- Application.OpenURL(command[1]);
- }
- }
- }
- }
- }
- public class ChatMessage
- {
- public string Username;
- public string Message;
- public ChatMessage(string name, string m)
- {
- Username = name;
- Message = m;
- }
- }
- public class IrcClient
- {
- private string userName;
- private string channel;
- public TcpClient tcpClient;
- private StreamReader inputStream;
- private StreamWriter outputStream;
- public IrcClient(string ip, int port, string cUserName, string password)
- {
- userName = cUserName;
- tcpClient = new TcpClient(ip, port);
- inputStream = new StreamReader(tcpClient.GetStream());
- outputStream = new StreamWriter(tcpClient.GetStream());
- outputStream.WriteLine("PASS " + password);
- outputStream.WriteLine("NICK " + userName);
- outputStream.WriteLine("USER " + userName + " 8 * :" + userName);
- outputStream.WriteLine("CAP REQ :twitch.tv/membership");
- outputStream.WriteLine("CAP REQ :twitch.tv/commands");
- outputStream.Flush();
- }
- public void joinRoom(string channel)
- {
- this.channel = channel;
- outputStream.WriteLine("JOIN #" + channel);
- outputStream.Flush();
- }
- public void leaveRoom()
- {
- outputStream.Close();
- inputStream.Close();
- }
- public void sendIrcMessage(string message)
- {
- outputStream.WriteLine(message);
- outputStream.Flush();
- }
- public void sendChatMessage(string message)
- {
- sendIrcMessage(":" + userName + "!" + userName + "@" + userName + ".tmi.twitch.tv PRIVMSG #" + channel + " :" + message);
- }
- public void SendWhisper(string message, string target)
- {
- sendIrcMessage(":" + userName + "!" + userName + "@" + userName + ".tmi.twitch.tv PRIVMSG #" + channel + " :/w " + target + " " + message);
- }
- public void PingResponse()
- {
- sendIrcMessage("PONG tmi.twitch.tv\r\n");
- Debug.Log("PONG");
- }
- public string readMessage()
- {
- string message = "";
- message = inputStream.ReadLine();
- return message;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement