Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System
- open System.IO
- open System.Net
- open System.Net.Sockets
- open System.Text.RegularExpressions
- open System.Net.Security
- open System.Security.Cryptography.X509Certificates
- let server = "chat.freenode.net"
- let port = 6697
- let channel = "batoto"
- let nick = "mantabot2"
- // establish and confirm a connection to the server
- let irc_client = new TcpClient()
- irc_client.Connect(server, port)
- if (irc_client.Connected = false) then Console.WriteLine("Did not connect.")
- else Console.WriteLine("Connected to " + server)
- // get the input and output streams in ssl
- //cheating verification
- let validatecheat = RemoteCertificateValidationCallback(fun _ _ _ _ -> true)
- let selectioncheat = fun _ -> System.Security.Cryptography.X509Certificates.X509Certificate()
- let certificatecheat = LocalCertificateSelectionCallback( fun _ _ _ _ -> selectioncheat)
- (*let irc_reader =
- let stream = irc_client.GetStream()
- let ssl = new SslStream(stream, true, validatecheat, certificatecheat)
- ssl*)
- let irc_writer =
- let stream = irc_client.GetStream()
- let ssl = new SslStream(stream, true, validatecheat, certificatecheat)
- ssl.AuthenticateAsClient(server)
- ssl
- //authenticate
- //irc_reader.Flush()
- //irc_reader.AuthenticateAsClient(server)
- //non ssl version, for testing
- (*
- let irc_reader =
- let stream = irc_client.GetStream()
- let read = new StreamReader( stream )
- read
- let irc_writer =
- let stream = irc_client.GetStream()
- let write = new StreamWriter( stream )
- write
- *)
- // identify with the server and join a room
- let stream = new StreamReader(irc_writer, true)
- let writer = new StreamWriter(irc_writer)
- let send (data: string) =
- writer.WriteLine(data + "\n\r")
- writer.Flush()
- Console.WriteLine("\n<{ " + data)
- Console.Write("\n}> "); Console.Write(stream.Read())
- send ("PASS " + "i_am_" + nick)
- Console.Write("\n}> "); Console.Write(stream.Read())
- send ("USER " + nick + " " + nick + " " + nick + " :mantatanta")
- Console.Write("\n}> "); Console.Write(stream.Read())
- send ("NICK " + nick)
- Console.Write("\n}> "); Console.Write(stream.Read())
- send ("JOIN " + channel)
- Console.Write("\n}> "); Console.Write(stream.Read())
- //send ("SAY :Hello")
- Console.Write("\n}> "); Console.Write(stream.Read())
- // some flow control stuff
- let irc_privmsg ( writer : StreamWriter ) ( phrase : string ) =
- writer.WriteLine( "PRIVMSG " + channel + phrase )
- let irc_get_msg ( line : string )=
- line.Substring( line.Substring(1).IndexOf(":") + 2)
- // main loop operation; homeostasis
- while stream.EndOfStream = false do
- let line = stream.ReadLine()
- Console.Write("\n}> " + line)
- if line.Contains("No ident response") then
- send ("PONG " + server)
- send ("USER " + nick + " " + nick + " " + nick + " :mantatanta")
- send ("NICK " + nick)
- if (line.Contains("PING")) then
- send ("PONG " + server)
- if (line.Contains("PRIVMSG")) then
- if (line.Contains("version") || line.Contains("VERSION")) then
- send ("PRIVMSG " + channel + " " + nick + " on " + Environment.Version.ToString())
- if (line.Contains("date") || line.Contains("DATE")) then
- send (System.DateTime.Now.ToString())
- else Console.Write(line)
- send ("PONG" + server)
- (*
- // active pattern for matching commands
- let (|Prefix|_|) (p:string) (s:string) =
- if s.StartsWith( p ) then
- Some( s.Substring(p.Length))
- else
- None
- let (msg:string) = irc_get_msg line
- // really maintainable list of patterns to match against
- match msg with
- | Prefix "No ident response" rest ->
- send ("PONG " + rest)
- send ("USER " + nick + " " + nick + " " + nick + " :mantatanta")
- send ("NICK " + nick)
- | Prefix "PING" rest ->
- send ("PONG" + rest)
- | Prefix "PRIVMSG" rest ->
- match rest with
- | "version" next ->
- *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement