
(load "ircbot.ss")
(load "kero-core.ss")

(define (bot-initialise)
  (standard-hooks)
  (add-admin '(user atehwa (username "atehwa") (hostname "aulis.sange.fi")))
  (add-hook 'privmsg 'react-to-message react-to-message)
  (add-hook 'action 'react-to-action react-to-action)
  (irc-reconnect-loop "irc.saunalahti.fi" 6662 'keromaa "Keromaa-maailma"))

;; reacting

(define (prompt-prefix-length str)
  (define me (symbol->string *irc-my-nick*))
  (let loop ((len 0))
    (cond ((and (>= len (string-length me))
		(memv (string-ref str len) '(#\space #\: #\,)))
	   (loop (+ len 1)))
	  ((>= len (string-length me)) len)
	  ((char-ci=? (string-ref str len) (string-ref me len))
	   (loop (+ len 1)))
	  (else 0))))

(define (prompted? str)
  (> (prompt-prefix-length str)
     (string-length (symbol->string *irc-my-nick*))))

(define (remove-prompt str) (substring str (prompt-prefix-length str)))

(define (react-to-message source dest message)
  (let ((originator (find-user-by-address source dest)))
    (handle-event originator
		  (if (prompted? message)
		    (parse-action originator (remove-prompt message))
		    (make-talk-event originator message)))))

(define (react-to-action source dest message)
  (let ((orig (find-user-by-address source dest))
	(name (symbol->string (irc-nick source))))
    (handle-event orig (parse-action orig (string-append name " " message)))))

