[net-nittin-irc-cvs] CVS update: net-nittin-irc/example/cliki.lisp

Brian Mastenbrook bmastenbrook at common-lisp.net
Mon Dec 15 19:48:19 UTC 2003


Update of /project/net-nittin-irc/cvsroot/net-nittin-irc/example
In directory common-lisp.net:/tmp/cvs-serv21141

Modified Files:
	cliki.lisp 
Log Message:
Add NickServ authentication

Date: Mon Dec 15 14:48:19 2003
Author: bmastenbrook

Index: net-nittin-irc/example/cliki.lisp
diff -u net-nittin-irc/example/cliki.lisp:1.5 net-nittin-irc/example/cliki.lisp:1.6
--- net-nittin-irc/example/cliki.lisp:1.5	Sat Dec 13 18:44:33 2003
+++ net-nittin-irc/example/cliki.lisp	Mon Dec 15 14:48:19 2003
@@ -1,4 +1,4 @@
-;;;; $Id: cliki.lisp,v 1.5 2003/12/13 23:44:33 bmastenbrook Exp $
+;;;; $Id: cliki.lisp,v 1.6 2003/12/15 19:48:19 bmastenbrook Exp $
 ;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/example/cliki.lisp,v $
 
 ;;;; cliki.lisp - CLiki as an infobot; only works on SBCL.
@@ -131,9 +131,9 @@
        (symbol-macrolet ((it ,test))
          ,else))))
 
-(defparameter *cliki-attention-prefix* "cliki: ")
+(defparameter *cliki-attention-prefix* "minion: ")
 
-(defparameter *cliki-bot-help* "The CLiki bot supplies small definitions and performs lookups on CLiki. To use it, try ``cliki: term?''. To add a term for IRC, try saying ``cliki: add \"term\" as: definition''; otherwise, edit the corresponding CLiki page.")
+(defparameter *cliki-bot-help* "The minion bot supplies small definitions and performs lookups on CLiki. To use it, try ``minion: term?''. To add a term for IRC, try saying ``minion: add \"term\" as: definition''; otherwise, edit the corresponding CLiki page.")
 
 (defun cliki-lookup (term-with-question)
   (let ((first-pass (regex-replace-all "^(\\s*)([^?]+)(\\?*)$" term-with-question "\\2")))
@@ -144,11 +144,18 @@
 	      (defn (regex-replace "^add \"[^\"]+\" as: (.+)$" first-pass "\\1")))
 	  (add-small-definition term defn)
 	  "OK, done.")
-	(concatenate 'string first-pass ": "
-		     (or
-		      (if (string-equal first-pass "help") *cliki-bot-help*)
-		      (cdr (assoc first-pass *small-definitions* :test #'string-equal))
-		      (cliki-first-sentence first-pass))))))
+	(if (scan "^alias \"([^\"]+)\" as: (.+)$" first-pass)
+	    (let ((term (regex-replace "^alias \"([^\"]+)\" .*$" first-pass "\\1"))
+		  (defn (regex-replace "^alias \"[^\"]+\" as: (.+)$" first-pass "\\1")))
+	      (add-small-definition term (list defn))
+	      "OK, done.")
+	    (or
+	     (if (string-equal first-pass "help") *cliki-bot-help*)
+	     (if (scan "^(?i)do my bidding!*$" first-pass) "Yes, my master.")
+	     (concatenate 'string first-pass ": "
+			  (or (let ((term (cdr (assoc first-pass *small-definitions* :test #'string-equal))))
+				(if term (if (stringp term) term (cliki-lookup (car term)))))
+			      (cliki-first-sentence first-pass))))))))
 
 (defun valid-cliki-message (message)
   (eql (search *cliki-attention-prefix* (trailing-argument message) :test #'char-equal) 0))
@@ -161,14 +168,22 @@
     (if (valid-cliki-message message)
         (privmsg *cliki-connection* (first (arguments message)) (cliki-lookup (subseq (trailing-argument message) (length *cliki-attention-prefix*)))))))
 
+(defvar *cliki-nickserv-password* "")
+
+(defun notice-hook (message)
+  (if (and (string-equal (source message) "NickServ")
+	   (scan "owned by someone else" (trailing-argument message)))
+      (privmsg *cliki-connection* (source message) (format nil "IDENTIFY ~A" *cliki-nickserv-password*))))
+
 (defun start-cliki-bot (nick server &rest channels)
   (setf *cliki-nickname* nick)
   (setf *cliki-connection* (connect :nickname *cliki-nickname* :server server))
   (mapcar #'(lambda (channel) (join *cliki-connection* channel)) channels)
-  (add-hook *cliki-connection* 'irc::irc-privmsg-message #'msg-hook)
+  (add-hook *cliki-connection* 'irc::irc-privmsg-message 'msg-hook)
+  (add-hook *cliki-connection* 'irc::irc-notice-message 'notice-hook)
   #+sbcl (add-asynchronous-message-handler *cliki-connection*)
   #-sbcl (read-message-loop *cliki-connection*))
 
 (defun shuffle-hooks ()
   (irc::remove-hooks *cliki-connection* 'irc::irc-privmsg-message)
-  (add-hook *cliki-connection* 'irc::irc-privmsg-message #'msg-hook))
+  (add-hook *cliki-connection* 'irc::irc-privmsg-message 'msg-hook))





More information about the Net-nittin-irc-cvs mailing list