A Simple IRC Bot to handle Frequently Asked Questions
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

36 lines
1.2 KiB

#lang racket
;;TCP
;;print-from-port : port -> void
;;prints out lines from the port until there are no more lines to print.
(define (print-from-port port)
(if (char-ready? port)
(let ([nextchar (read-char port)])
(printf (if (char=? #\~ nextchar)
"~~"
(string nextchar)))
(print-from-port port))
(printf "~n")))
;;send-to-port : port -> void
;;sends direct input from the user to the port.
(define (send-to-port port)
(let ([input (read-line)])
(if (not (string=? input "n"))
(begin (display (string-append input "\r\n") port)
(flush-output port)
(printf "Sending ~a~n" input))
(printf "Not sending anything.~n"))))
;;irc-connect : string number (port port -> void) -> void
;;connects to an IRC network, and begins running the provided irc handler.
(define (irc-connect server port handler)
(call-with-values (lambda () (tcp-connect server port))
(lambda (arguments) (handler (first arguments) (second arguments)))))
(define (irc-handle in out)
(print-from-port in)
(send-to-port out)
(irc-handle in out))
;(irc-connect "localhost" 6667 irc-handle)