Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.Net.Sockets
- Imports System.Text.RegularExpressions
- Imports System.Net
- Imports System.Text
- Public Class TwitchClient
- '################################################
- 'Author: LaPanthere ([email protected])
- 'Date Completed: 28th of June 2013
- 'Date Updated: 28th of June 2013
- 'Notes: Use like any other events based class. I am not responsible for how you use this class.
- 'Please leave credits where due and enjoy :)
- '################################################
- Private ipa As IPAddress
- Dim ipe As IPEndPoint
- Private port As Integer
- Private username As String
- Private password As String
- Private channel As String
- Private ircSock As Socket
- Private buffer(1024) As Byte
- Public Delegate Sub MessageReceived(ByVal sender As Object, ByVal e As MsgReceivedArgs)
- Public Event MessageReceivedEvent As MessageReceived
- Public Delegate Sub ConsoleMessageReceived(ByVal sender As Object, ByVal e As ConsoleMsgReceivedArgs)
- Public Event ConsoleMessageReceivedEvent As ConsoleMessageReceived
- Public Delegate Sub ClientConnected(ByVal sender As Object, ByVal e As ClientArgs)
- Public Event ClientConnectedEvent As ClientConnected
- Sub New(ByVal ip As String, ByVal port As Integer)
- Try
- ipe = New IPEndPoint(IPAddress.Parse(GetIPFromHostname(ip)), 6667)
- ircSock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- Catch ex As Exception
- Debug.Print("NewErr: " & ex.Message)
- End Try
- End Sub
- Public Function Start(ByVal user As String, ByVal pass As String, ByVal chan As String) As Boolean
- Try
- username = user
- password = pass
- channel = chan
- ircSock.BeginConnect(ipe.Address, ipe.Port, New AsyncCallback(AddressOf OnConnected), ircSock)
- Catch ex As Exception
- Debug.Print("StartErr: " & ex.Message)
- End Try
- Return True
- End Function
- Private Sub OnConnected(ByVal ar As IAsyncResult)
- Try
- Dim client As Socket = ar.AsyncState
- client.EndConnect(ar)
- ircSock.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageReceived), ircSock)
- SendRaw("PASS " + password)
- SendRaw("USER " + username)
- SendRaw("NICK " + username)
- SendRaw("JOIN " + channel)
- RaiseEvent ClientConnectedEvent(Me, New ClientArgs(username))
- Catch ex As Exception
- Debug.Print("OnConnErr: " & ex.Message)
- End Try
- End Sub
- Private Sub OnMessageReceived(ByVal ar As IAsyncResult)
- Try
- Dim client As Socket = ar.AsyncState
- Dim received() As Byte = buffer
- Dim val As String = System.Text.ASCIIEncoding.ASCII.GetString(received).Replace(vbNullChar, "").Replace(vbCr, "")
- Dim valuelower As String = val.ToLower()
- Select Case valuelower
- Case valuelower.Contains("privmsg")
- Dim username As String = New Regex(":.+?!").Matches(val)(0).Value.Replace(":", "").Replace("!", "")
- Dim message As String = New Regex("^(:.+?" + channel + " :)").Replace(val, "").Replace(vbCr, "").Replace(vbLf, "")
- RaiseEvent MessageReceivedEvent(Me, New MsgReceivedArgs(username, message))
- Case valuelower.Contains("ping")
- SendRaw(val.Replace("PING", "PONG"))
- Case Else
- RaiseEvent ConsoleMessageReceivedEvent(Me, New ConsoleMsgReceivedArgs(val.Replace(vbCr, "").Replace(vbLf, "")))
- End Select
- ircSock.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageReceived), ircSock)
- Catch ex As Exception
- Debug.Print("MsgRecErr: " & ex.Message)
- End Try
- End Sub
- Public Function SendMessage(ByVal message As String, ByVal channel As String) As Boolean
- Try
- SendRaw("PRIVMSG " & channel & " :" & message)
- Catch ex As Exception
- End Try
- Return True
- End Function
- Public Function SendRaw(ByVal message As String) As Boolean
- Try
- message &= vbCr & vbLf
- Dim sendBytes As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(message)
- ircSock.BeginSend(sendBytes, 0, sendBytes.Length, SocketFlags.None, New AsyncCallback(AddressOf OnMessageSent), ircSock)
- Catch ex As Exception
- Debug.Print("SendErr: " & ex.Message)
- Return False
- End Try
- Return True
- End Function
- Private Sub OnMessageSent(ByVal ar As IAsyncResult)
- Dim client As Socket = ar.AsyncState
- client.EndSend(ar)
- End Sub
- Public Function Disconnect() As Boolean
- Try
- ircSock.Disconnect(False)
- Catch ex As Exception
- Debug.Print("DisconErr: " & ex.Message)
- End Try
- Return True
- End Function
- Private Function GetIPFromHostname(ByVal host1 As String) As String
- Dim ipfinal As String = String.Empty
- Try
- Dim host As IPHostEntry = Dns.GetHostEntry(host1)
- Dim ipaddr As IPAddress() = host.AddressList
- For Each addr As IPAddress In ipaddr
- ipfinal = addr.ToString
- Next addr
- Catch ex As System.Exception
- End Try
- Return ipfinal
- End Function
- Private Function isHostname(ByVal host As String) As Boolean
- Try
- Dim host1 As IPHostEntry = Dns.GetHostEntry(host)
- Catch ex As System.Exception
- Debug.Print("IsHostErr: " & ex.Message)
- Return False
- End Try
- Return True
- End Function
- End Class
- Public Class MsgReceivedArgs
- Inherits EventArgs
- Public message As String
- Public user As String
- Public Sub New(ByVal username As String, ByVal msg As String)
- user = username
- message = msg
- End Sub
- End Class
- Public Class ConsoleMsgReceivedArgs
- Inherits EventArgs
- Public message As String
- Public Sub New(ByVal msg As String)
- message = msg
- End Sub
- End Class
- Public Class ClientArgs
- Inherits EventArgs
- Public user As String
- Public Sub New(ByVal username As String)
- user = username
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment