Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.Net.Sockets
- Imports System.Text
- Imports System.Text.RegularExpressions
- Public Class TCPIRCBot
- Private client As New TcpClient
- Private i As String
- Private p As Integer
- Private username As String
- Private channel As String
- Private Running As Boolean = False
- Public Delegate Sub MessageReceived(ByVal sender As Object, ByVal e As MessageReceivedEventArgs)
- Public Event MessageReceivedEvent As MessageReceived
- Public Delegate Sub ConsoleMessageReceived(ByVal sender As Object, ByVal e As ConsoleReceivedEventArgs)
- Public Event ConsoleMessageReceivedEvent As ConsoleMessageReceived
- Public Delegate Sub ClientConnected(ByVal sender As Object, ByVal e As ClientConnectedEventArgs)
- Public Event ClientConnectedEvent As ClientConnected
- Public Sub New(ByVal ip As String, ByVal port As Integer)
- i = ip
- p = port
- End Sub
- Public Sub Start(ByVal user As String, ByVal chan As String)
- Try
- username = user
- channel = chan
- client.BeginConnect(i, p, New AsyncCallback(AddressOf OnConnected), client)
- Catch ex As Exception
- Debug.Print("SrtErr: " & ex.Message)
- End Try
- End Sub
- Private Sub OnConnected(ByVal ar As IAsyncResult)
- Dim sock As TcpClient = ar.AsyncState
- sock.EndConnect(ar)
- Running = True
- Dim th As New Threading.Thread(AddressOf ReceiveData) : th.Start()
- SendRaw("USER " & username & " " & username & "@" & username & ".com " & i & " " & username)
- SendRaw("NICK " + username)
- SendRaw("JOIN " + channel)
- RaiseEvent ClientConnectedEvent(Me, New ClientConnectedEventArgs(username))
- End Sub
- Public Sub SendRaw(ByVal data As String)
- data &= vbCr & vbLf
- Dim ns As NetworkStream = client.GetStream()
- ns.Write(Encoding.UTF8.GetBytes(data), 0, data.Length)
- ns.Flush()
- End Sub
- Public Sub SendMessage(ByVal ms As String, ByVal ch As String)
- SendRaw("PRIVMSG " & ch & " :" & ms)
- End Sub
- Private Sub ReceiveData()
- Dim ns As NetworkStream = client.GetStream
- While Running
- If ns.DataAvailable Then
- Dim buf(1024) As Byte
- ns.Read(buf, 0, 1024)
- Dim val As String = System.Text.ASCIIEncoding.ASCII.GetString(buf).Replace(vbNullChar, "").Replace(vbCr, "").Replace(vbLf, "")
- Dim valuelower As String = val.ToLower()
- If valuelower.Contains("privmsg") Then
- Dim username As String = New Regex(":.+?!").Matches(val)(0).Value.Replace(":", "").Replace("!", "")
- Dim message As String = New Regex("(?<=PRIVMSG " & channel & " :).*").Matches(val)(0).Value.Replace(vbCr, "").Replace(vbLf, "")
- RaiseEvent MessageReceivedEvent(Me, New MessageReceivedEventArgs(username, message))
- ElseIf valuelower.Contains("ping") Then
- SendRaw(val.Replace("PING", "PONG"))
- Else
- RaiseEvent ConsoleMessageReceivedEvent(Me, New ConsoleReceivedEventArgs(val.Replace(vbCr, "").Replace(vbLf, "")))
- End If
- End If
- End While
- End Sub
- Public Sub Disconnect()
- Running = False
- client.Close()
- End Sub
- End Class
- Public Class MessageReceivedEventArgs
- 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 ConsoleReceivedEventArgs
- Inherits EventArgs
- Public message As String
- Public Sub New(ByVal msg As String)
- message = msg
- End Sub
- End Class
- Public Class ClientConnectedEventArgs
- 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
Advertisement