+(define-class <irc-bot> (<actor>)
+ (username #:init-keyword #:username
+ #:getter irc-bot-username)
+ (realname #:init-keyword #:realname
+ #:init-value #f)
+ (server #:init-keyword #:server
+ #:getter irc-bot-server)
+ (channels #:init-keyword #:channels
+ #:getter irc-bot-channels)
+ (port #:init-keyword #:port
+ #:init-value default-irc-port
+ #:getter irc-bot-port)
+ (line-handler #:init-keyword #:line-handler
+ #:init-value (wrap-apply echo-message)
+ #:getter irc-bot-line-handler)
+ (socket #:accessor irc-bot-socket)
+ (actions #:allocation #:each-subclass
+ #:init-value (build-actions
+ (init irc-bot-init)
+ (main-loop irc-bot-main-loop)
+ (send-line irc-bot-send-line))))
+
+(define (irc-bot-realname irc-bot)
+ (or (slot-ref irc-bot 'realname)
+ (irc-bot-username irc-bot)))
+
+(define (irc-bot-init irc-bot message)
+ "Initialize the IRC bot"
+ (define socket
+ (irc-socket-setup (irc-bot-server irc-bot)
+ (irc-bot-port irc-bot)))
+ (set! (irc-bot-socket irc-bot) socket)
+ (format socket "USER ~a ~a ~a :~a~a"
+ (irc-bot-username irc-bot)
+ "*" "*" ; hostname and servername
+ (irc-bot-realname irc-bot) irc-eol)
+ (format socket "NICK ~a~a" (irc-bot-username irc-bot) irc-eol)