Advertisement
LaPanthere

IRC Bot Class

Jul 26th, 2013
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 3.97 KB | None | 0 0
  1. Imports System.Net.Sockets
  2. Imports System.Text
  3. Imports System.Text.RegularExpressions
  4.  
  5. Public Class TCPIRCBot
  6.     Private client As New TcpClient
  7.     Private i As String
  8.     Private p As Integer
  9.     Private username As String
  10.     Private channel As String
  11.     Private Running As Boolean = False
  12.  
  13.     Public Delegate Sub MessageReceived(ByVal sender As Object, ByVal e As MessageReceivedEventArgs)
  14.     Public Event MessageReceivedEvent As MessageReceived
  15.     Public Delegate Sub ConsoleMessageReceived(ByVal sender As Object, ByVal e As ConsoleReceivedEventArgs)
  16.     Public Event ConsoleMessageReceivedEvent As ConsoleMessageReceived
  17.     Public Delegate Sub ClientConnected(ByVal sender As Object, ByVal e As ClientConnectedEventArgs)
  18.     Public Event ClientConnectedEvent As ClientConnected
  19.  
  20.     Public Sub New(ByVal ip As String, ByVal port As Integer)
  21.         i = ip
  22.         p = port
  23.     End Sub
  24.  
  25.     Public Sub Start(ByVal user As String, ByVal chan As String)
  26.         Try
  27.             username = user
  28.             channel = chan
  29.             client.BeginConnect(i, p, New AsyncCallback(AddressOf OnConnected), client)
  30.         Catch ex As Exception
  31.             Debug.Print("SrtErr: " & ex.Message)
  32.         End Try
  33.     End Sub
  34.  
  35.     Private Sub OnConnected(ByVal ar As IAsyncResult)
  36.         Dim sock As TcpClient = ar.AsyncState
  37.         sock.EndConnect(ar)
  38.         Running = True
  39.         Dim th As New Threading.Thread(AddressOf ReceiveData) : th.Start()
  40.         SendRaw("USER " & username & " " & username & "@" & username & ".com " & i & " " & username)
  41.         SendRaw("NICK " + username)
  42.         SendRaw("JOIN " + channel)
  43.         RaiseEvent ClientConnectedEvent(Me, New ClientConnectedEventArgs(username))
  44.     End Sub
  45.  
  46.     Public Sub SendRaw(ByVal data As String)
  47.         data &= vbCr & vbLf
  48.         Dim ns As NetworkStream = client.GetStream()
  49.         ns.Write(Encoding.UTF8.GetBytes(data), 0, data.Length)
  50.         ns.Flush()
  51.     End Sub
  52.  
  53.     Public Sub SendMessage(ByVal ms As String, ByVal ch As String)
  54.         SendRaw("PRIVMSG " & ch & " :" & ms)
  55.     End Sub
  56.  
  57.     Private Sub ReceiveData()
  58.         Dim ns As NetworkStream = client.GetStream
  59.         While Running
  60.             If ns.DataAvailable Then
  61.                 Dim buf(1024) As Byte
  62.                 ns.Read(buf, 0, 1024)
  63.                 Dim val As String = System.Text.ASCIIEncoding.ASCII.GetString(buf).Replace(vbNullChar, "").Replace(vbCr, "").Replace(vbLf, "")
  64.                 Dim valuelower As String = val.ToLower()
  65.                 If valuelower.Contains("privmsg") Then
  66.                     Dim username As String = New Regex(":.+?!").Matches(val)(0).Value.Replace(":", "").Replace("!", "")
  67.                     Dim message As String = New Regex("(?<=PRIVMSG " & channel & " :).*").Matches(val)(0).Value.Replace(vbCr, "").Replace(vbLf, "")
  68.                     RaiseEvent MessageReceivedEvent(Me, New MessageReceivedEventArgs(username, message))
  69.                 ElseIf valuelower.Contains("ping") Then
  70.                     SendRaw(val.Replace("PING", "PONG"))
  71.                 Else
  72.                     RaiseEvent ConsoleMessageReceivedEvent(Me, New ConsoleReceivedEventArgs(val.Replace(vbCr, "").Replace(vbLf, "")))
  73.                 End If
  74.             End If
  75.         End While
  76.     End Sub
  77.  
  78.     Public Sub Disconnect()
  79.         Running = False
  80.         client.Close()
  81.     End Sub
  82. End Class
  83.  
  84. Public Class MessageReceivedEventArgs
  85.     Inherits EventArgs
  86.     Public message As String
  87.     Public user As String
  88.     Public Sub New(ByVal username As String, ByVal msg As String)
  89.         user = username
  90.         message = msg
  91.     End Sub
  92. End Class
  93.  
  94. Public Class ConsoleReceivedEventArgs
  95.     Inherits EventArgs
  96.     Public message As String
  97.  
  98.     Public Sub New(ByVal msg As String)
  99.         message = msg
  100.     End Sub
  101. End Class
  102.  
  103. Public Class ClientConnectedEventArgs
  104.     Inherits EventArgs
  105.     Public user As String
  106.     Public Sub New(ByVal username As String)
  107.         user = username
  108.     End Sub
  109. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement