From lisppaste at common-lisp.net Tue Aug 9 01:26:16 2005 From: lisppaste at common-lisp.net (Lisppaste and co.) Date: Tue, 9 Aug 2005 03:26:16 +0200 (CEST) Subject: [Cl-irc-cvs] CVS update: cl-irc/example/cliki.lisp cl-irc/example/specbot.lisp Message-ID: <20050809012616.7BB0C880DC@common-lisp.net> Update of /project/cl-irc/cvsroot/cl-irc/example In directory common-lisp.net:/home/lisppaste/cl-irc/example Modified Files: cliki.lisp specbot.lisp Log Message: Latest bugfixes Date: Tue Aug 9 03:26:15 2005 Author: lisppaste Index: cl-irc/example/cliki.lisp diff -u cl-irc/example/cliki.lisp:1.30 cl-irc/example/cliki.lisp:1.31 --- cl-irc/example/cliki.lisp:1.30 Thu Jul 28 20:31:08 2005 +++ cl-irc/example/cliki.lisp Tue Aug 9 03:26:14 2005 @@ -1,4 +1,4 @@ -;;;; $Id: cliki.lisp,v 1.30 2005/07/28 18:31:08 lisppaste Exp $ +;;;; $Id: cliki.lisp,v 1.31 2005/08/09 01:26:14 lisppaste Exp $ ;;;; $Source: /project/cl-irc/cvsroot/cl-irc/example/cliki.lisp,v $ ;;;; cliki.lisp - CLiki as an infobot; only works on SBCL. @@ -227,7 +227,9 @@ (push e max-score-items))))) (advice-db)) (if (zerop max-score) - "You can't expect automated advice for everything." + (progn + (signal 'lookup-failure) + "You can't expect automated advice for everything.") (let ((item (random-element max-score-items))) (format nil "#~A: ~A" (car item) (cdr item)))))) @@ -284,6 +286,8 @@ (http-get-recursively (cdr (assoc :location headers)))) (list status headers stream)))) +(define-condition lookup-failure (condition) ()) + (defun cliki-first-sentence (term) (let* ((cliki-url (format nil "http://www.cliki.net/~A" (encode-for-url term))) @@ -320,9 +324,15 @@ (when (scan "^([^.]|\\.\\S)+[.?!]$" first-line) (setf first-line (concatenate 'string first-line " " cliki-url)) (return-from cliki-return first-line)))) - (format nil "No definition was found in the first 5 lines of ~A" cliki-url))) + (progn + (signal 'lookup-failure) + (format nil "No definition was found in the first 5 lines of ~A" cliki-url)))) (if stream (close stream))))) - (condition (c &rest whatever) (return-from cliki-return (regex-replace-all "\\n" (format nil "An error was encountered in lookup: ~A." c) " "))))) + #+sbcl + (sb-ext:timeout (c) + (return-from cliki-return (progn (signal 'lookup-failure) + "I can't be expected to work when CLiki doesn't respond to me, can I?"))) + (serious-condition (c &rest whatever) (return-from cliki-return (progn (signal 'lookup-failure) (regex-replace-all "\\n" (format nil "An error was encountered in lookup: ~A." c) " ")))))) )) (defun shorten (url) @@ -494,7 +504,7 @@ ))))))))) (defun cliki-lookup (term-with-question &key sender channel) - (let ((first-pass (regex-replace-all "^(\\s*)([^?]+)([?.!,;]*)$" term-with-question "\\2")) + (let ((first-pass (regex-replace-all "^(\\s*)(.*[^?.!,;])([?.!,;]*)$" term-with-question "\\2")) (should-send-cant-find t)) (setf first-pass (regex-replace-all "\\s\\s+" first-pass " ")) (setf first-pass (regex-replace-all "\\s*$" first-pass "")) @@ -586,7 +596,7 @@ (nth-value 1 (scan-to-strings "^(?i)(direct|tell|show|inform|teach|give)\\s+(\\S+)\\s+(about|on|in|to|through|for|some|)\\s*(.+)$" first-pass)) (cons :forward it)) (aif - (nth-value 1 (scan-to-strings "^(?i)(look\\s+up\\s+|)\\s*(.+)\\s+(for|to|at)\\s+(\\S+)$" first-pass)) + (nth-value 1 (scan-to-strings "^(?i)(look\\s+up\\s+|say|)\\s*(.+)\\s+(for|to|at)\\s+(\\S+)$" first-pass)) (cons :backward it)) ))) (if strings @@ -599,30 +609,39 @@ (person (if (string-equal person "me") (or sender channel "you") person)) - (about (cliki-lookup term :sender sender - :channel channel))) + (do-concatenate t) + (about + (handler-bind + ((lookup-failure + #'(lambda (c) + (setf do-concatenate nil)))) + (cliki-lookup term :sender sender + :channel channel)))) (if about - (format nil "~A: ~A~A" - person - (if (scan "http:" about) - (concatenate 'string - (random-element - '("have a look at" - "please look at" - "please see" - "direct your attention towards" - "look at")) - " ") - "") - about) + (if do-concatenate + (format nil "~A: ~A~A" + person + (if (scan "http:" about) + (concatenate 'string + (random-element + '("have a look at" + "please look at" + "please see" + "direct your attention towards" + "look at")) + " ") + "") + about) + about) (setf should-send-cant-find nil))))) (if (scan "^(?i)hello(\\s|$)*" first-pass) "what's up?") (if (scan "^(?i)hi(\\s|$)*" first-pass) "what's up?") (if (scan "^(?i)yo(\\s|$)*" first-pass) "what's up?") (if (scan "^(?i)thank(s| you)(\\s|!|\\?|\\.|$)*" first-pass) - (if sender - (format nil "~A: you failed the inverse turing test!" sender) - "you failed the inverse turing test!")) + (random-element + '("you're welcome" + "no problem" + "np"))) (if (scan "^(?i)version(\\s|!|\\?|\\.|$)*" first-pass) (format nil "This is the minion bot, running on a ~A (~A) and running under ~A ~A." (machine-type) (machine-version) (lisp-implementation-type) (lisp-implementation-version))) (if (scan "^(?i)(?i)do my bidding!*$" first-pass) "Yes, my master.") @@ -675,6 +694,7 @@ (do-eliza first-pass)) ) (when should-send-cant-find + (signal 'lookup-failure) (format nil "Sorry, I couldn't find anything in the database for ``~A''.~A" first-pass (if (scan " " first-pass) " Maybe you meant to end with punctuation?" ""))) )))))))) Index: cl-irc/example/specbot.lisp diff -u cl-irc/example/specbot.lisp:1.13 cl-irc/example/specbot.lisp:1.14 --- cl-irc/example/specbot.lisp:1.13 Tue May 10 02:36:26 2005 +++ cl-irc/example/specbot.lisp Tue Aug 9 03:26:14 2005 @@ -1,4 +1,4 @@ -;;;; $Id: specbot.lisp,v 1.13 2005/05/10 00:36:26 lisppaste Exp $ +;;;; $Id: specbot.lisp,v 1.14 2005/08/09 01:26:14 lisppaste Exp $ ;;;; $Source: /project/cl-irc/cvsroot/cl-irc/example/specbot.lisp,v $ ;;;; specbot.lisp - an example IRC bot for cl-irc @@ -68,6 +68,9 @@ (elisp-lookup "elisp" "GNU Emacs Lisp Reference Manual") (clim-lookup "clim" "Common Lisp Interface Manager II Specification"))) +(defvar *spaces-allowed* + '(clim-lookup)) + (defvar *alists* nil) (defun add-simple-alist-lookup (file designator prefix description) @@ -130,7 +133,8 @@ do (aif (strip-address to-lookup :address (second type) :final t) (let ((looked-up (funcall actual-fun it))) - (if (and (<= 0 (count #\space it) 1) + (if (and (<= 0 (count #\space it) + (if (member actual-fun *spaces-allowed*) 1 0)1) (not looked-up)) (setf looked-up (format nil "Sorry, I couldn't find anything for ~A." it))) (and looked-up From lisppaste at common-lisp.net Fri Aug 19 12:15:07 2005 From: lisppaste at common-lisp.net (Lisppaste and co.) Date: Fri, 19 Aug 2005 14:15:07 +0200 (CEST) Subject: [Cl-irc-cvs] CVS update: cl-irc/example/advice Message-ID: <20050819121507.188CE8853C@common-lisp.net> Update of /project/cl-irc/cvsroot/cl-irc/example In directory common-lisp.net:/home/lisppaste/cl-irc/example Modified Files: advice Log Message: Added a new advice. Date: Fri Aug 19 14:15:01 2005 Author: lisppaste Index: cl-irc/example/advice diff -u cl-irc/example/advice:1.2 cl-irc/example/advice:1.3 --- cl-irc/example/advice:1.2 Thu Aug 5 18:54:09 2004 +++ cl-irc/example/advice Fri Aug 19 14:15:01 2005 @@ -96,4 +96,5 @@ (11964 . "I guess this just goes to show that you can lead a horse to water, but you can't make him drink it.") (11999 . "You are a stupid asshole. Shut the fuck up.") - (12000 . "Looking for a compiler bug is the second-to-last resort. The last resort is blaming bad RAM. It's never the correct hypothesis.")) + (12000 . "Looking for a compiler bug is the second-to-last resort. The last resort is blaming bad RAM. It's never the correct hypothesis.") + (12017 . "It doesn't need to be portable, it just needs to work on your system."))