LaPanthere

Twitch TV Client Class

Jun 28th, 2013
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 6.43 KB | None | 0 0
  1. Imports System.Net.Sockets
  2. Imports System.Text.RegularExpressions
  3. Imports System.Net
  4. Imports System.Text
  5.  
  6. Public Class TwitchClient
  7.     '################################################
  8.     'Author: LaPanthere ([email protected])
  9.     'Date Completed: 28th of June 2013
  10.     'Date Updated: 28th of June 2013
  11.     'Notes: Use like any other events based class. I am not responsible for how you use this class.
  12.     'Please leave credits where due and enjoy :)
  13.     '################################################
  14.     Private ipa As IPAddress
  15.     Dim ipe As IPEndPoint
  16.     Private port As Integer
  17.     Private username As String
  18.     Private password As String
  19.     Private channel As String
  20.     Private ircSock As Socket
  21.     Private buffer(1024) As Byte
  22.  
  23.     Public Delegate Sub MessageReceived(ByVal sender As Object, ByVal e As MsgReceivedArgs)
  24.     Public Event MessageReceivedEvent As MessageReceived
  25.     Public Delegate Sub ConsoleMessageReceived(ByVal sender As Object, ByVal e As ConsoleMsgReceivedArgs)
  26.     Public Event ConsoleMessageReceivedEvent As ConsoleMessageReceived
  27.     Public Delegate Sub ClientConnected(ByVal sender As Object, ByVal e As ClientArgs)
  28.     Public Event ClientConnectedEvent As ClientConnected
  29.  
  30.     Sub New(ByVal ip As String, ByVal port As Integer)
  31.         Try
  32.             ipe = New IPEndPoint(IPAddress.Parse(GetIPFromHostname(ip)), 6667)
  33.             ircSock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
  34.         Catch ex As Exception
  35.             Debug.Print("NewErr: " & ex.Message)
  36.         End Try
  37.     End Sub
  38.  
  39.     Public Function Start(ByVal user As String, ByVal pass As String, ByVal chan As String) As Boolean
  40.         Try
  41.             username = user
  42.             password = pass
  43.             channel = chan
  44.             ircSock.BeginConnect(ipe.Address, ipe.Port, New AsyncCallback(AddressOf OnConnected), ircSock)
  45.         Catch ex As Exception
  46.             Debug.Print("StartErr: " & ex.Message)
  47.         End Try
  48.         Return True
  49.     End Function
  50.  
  51.     Private Sub OnConnected(ByVal ar As IAsyncResult)
  52.         Try
  53.             Dim client As Socket = ar.AsyncState
  54.             client.EndConnect(ar)
  55.             ircSock.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageReceived), ircSock)
  56.             SendRaw("PASS " + password)
  57.             SendRaw("USER " + username)
  58.             SendRaw("NICK " + username)
  59.             SendRaw("JOIN " + channel)
  60.             RaiseEvent ClientConnectedEvent(Me, New ClientArgs(username))
  61.         Catch ex As Exception
  62.             Debug.Print("OnConnErr: " & ex.Message)
  63.         End Try
  64.     End Sub
  65.  
  66.     Private Sub OnMessageReceived(ByVal ar As IAsyncResult)
  67.         Try
  68.             Dim client As Socket = ar.AsyncState
  69.  
  70.             Dim received() As Byte = buffer
  71.             Dim val As String = System.Text.ASCIIEncoding.ASCII.GetString(received).Replace(vbNullChar, "").Replace(vbCr, "")
  72.             Dim valuelower As String = val.ToLower()
  73.             Select Case valuelower
  74.                 Case valuelower.Contains("privmsg")
  75.                     Dim username As String = New Regex(":.+?!").Matches(val)(0).Value.Replace(":", "").Replace("!", "")
  76.                     Dim message As String = New Regex("^(:.+?" + channel + " :)").Replace(val, "").Replace(vbCr, "").Replace(vbLf, "")
  77.                     RaiseEvent MessageReceivedEvent(Me, New MsgReceivedArgs(username, message))
  78.                 Case valuelower.Contains("ping")
  79.                     SendRaw(val.Replace("PING", "PONG"))
  80.                 Case Else
  81.                     RaiseEvent ConsoleMessageReceivedEvent(Me, New ConsoleMsgReceivedArgs(val.Replace(vbCr, "").Replace(vbLf, "")))
  82.             End Select
  83.             ircSock.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageReceived), ircSock)
  84.         Catch ex As Exception
  85.             Debug.Print("MsgRecErr: " & ex.Message)
  86.         End Try
  87.     End Sub
  88.  
  89.     Public Function SendMessage(ByVal message As String, ByVal channel As String) As Boolean
  90.         Try
  91.             SendRaw("PRIVMSG " & channel & " :" & message)
  92.         Catch ex As Exception
  93.         End Try
  94.         Return True
  95.     End Function
  96.  
  97.     Public Function SendRaw(ByVal message As String) As Boolean
  98.         Try
  99.             message &= vbCr & vbLf
  100.             Dim sendBytes As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(message)
  101.             ircSock.BeginSend(sendBytes, 0, sendBytes.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageSent), ircSock)
  102.         Catch ex As Exception
  103.             Debug.Print("SendErr: " & ex.Message)
  104.             Return False
  105.         End Try
  106.         Return True
  107.     End Function
  108.  
  109.     Private Sub OnMessageSent(ByVal ar As IAsyncResult)
  110.         Dim client As Socket = ar.AsyncState
  111.         client.EndSend(ar)
  112.     End Sub
  113.  
  114.     Public Function Disconnect() As Boolean
  115.         Try
  116.             ircSock.Disconnect(False)
  117.         Catch ex As Exception
  118.             Debug.Print("DisconErr: " & ex.Message)
  119.         End Try
  120.         Return True
  121.     End Function
  122.  
  123.     Private Function GetIPFromHostname(ByVal host1 As String) As String
  124.         Dim ipfinal As String = String.Empty
  125.         Try
  126.             Dim host As IPHostEntry = Dns.GetHostEntry(host1)
  127.             Dim ipaddr As IPAddress() = host.AddressList
  128.             For Each addr As IPAddress In ipaddr
  129.                 ipfinal = addr.ToString
  130.             Next addr
  131.         Catch ex As System.Exception
  132.         End Try
  133.         Return ipfinal
  134.     End Function
  135.  
  136.     Private Function isHostname(ByVal host As String) As Boolean
  137.         Try
  138.             Dim host1 As IPHostEntry = Dns.GetHostEntry(host)
  139.         Catch ex As System.Exception
  140.             Debug.Print("IsHostErr: " & ex.Message)
  141.             Return False
  142.         End Try
  143.         Return True
  144.     End Function
  145. End Class
  146.  
  147. Public Class MsgReceivedArgs
  148.     Inherits EventArgs
  149.     Public message As String
  150.     Public user As String
  151.     Public Sub New(ByVal username As String, ByVal msg As String)
  152.         user = username
  153.         message = msg
  154.     End Sub
  155. End Class
  156.  
  157. Public Class ConsoleMsgReceivedArgs
  158.     Inherits EventArgs
  159.     Public message As String
  160.  
  161.     Public Sub New(ByVal msg As String)
  162.         message = msg
  163.     End Sub
  164. End Class
  165.  
  166. Public Class ClientArgs
  167.     Inherits EventArgs
  168.     Public user As String
  169.     Public Sub New(ByVal username As String)
  170.         user = username
  171.     End Sub
  172. End Class
Advertisement
Add Comment
Please, Sign In to add comment