summaryrefslogtreecommitdiff
path: root/elisp/erbot/erbot-lispy.el
diff options
context:
space:
mode:
Diffstat (limited to 'elisp/erbot/erbot-lispy.el')
-rw-r--r--elisp/erbot/erbot-lispy.el89
1 files changed, 89 insertions, 0 deletions
diff --git a/elisp/erbot/erbot-lispy.el b/elisp/erbot/erbot-lispy.el
new file mode 100644
index 0000000..a63ba4c
--- /dev/null
+++ b/elisp/erbot/erbot-lispy.el
@@ -0,0 +1,89 @@
+;;; erbot-lispy.el --- ErBot integration in Lispy
+;; Time-stamp: <2006-04-20 14:14:33 deego>
+;; Emacs Lisp Archive entry
+;; Filename: erbot-lispy.el
+;; Package: erbot
+;; Authors: Yann Hodique <hodique@lifl.fr>
+;; Version: 0.0
+;; URL: http://www.emacswiki.org/cgi-bin/wiki.pl?ErBot
+
+;; Lispy can be found at http://mtpforge.melting-pot.org/projects/lispy
+
+;; Installation
+;; put an additional (require 'erbot-lispy) in you erbot's .emacs
+;; *before* running (erbot-install)
+;; then launch a lispy session
+
+(require 'lispy)
+(require 'erbot)
+
+(defvar backup-buffer nil)
+
+(defun erbot-lispy-remote (line)
+ (let* ((nick nil)
+ (tgt nil)
+ (msg nil))
+
+ (cond
+ ((string-match "^<Mtp> \\(\\w+\\) tells you: \\(.*\\)$" line)
+ (setq nick (match-string 1 line))
+ (setq tgt nick)
+ (setq msg (match-string 2 line)))
+ ((string-match (format "^<\\(Mtp\\|%s\\)>.*$" lispy-remote-user) line)
+ nil)
+ ((string-match "^<\\(\\w+\\)> \\(.*\\)$" line)
+ (setq nick (match-string 1 line))
+ (setq tgt "#chan")
+ (setq msg (match-string 2 line)))
+ )
+ (setq backup-buffer (current-buffer))
+ (when (and lispy-connected nick)
+ (progn
+ (setq erbot-end-user-nick-latest nick)
+ (setq fs-tgt tgt)
+ (setq erbn-tgt tgt)
+
+ (setq fs-nick nick)
+ (setq erbn-nick nick)
+
+ (let ((msgg
+ (erbeng-main msg nil nick tgt nil (list nick nick nick))))
+
+ (cond
+ (erbot-quiet-p nil)
+ ((and erbot-quiet-target-p-function
+ (funcall erbot-quiet-target-p-function tgt nick msg))
+ nil)
+ (t (erbot-lispy-reply msgg tgt)))
+ ))))
+ nil
+ )
+
+(defun erbot-lispy-reply (main-reply tgt)
+ (unless (stringp main-reply)
+ (setq main-reply (format "%S" main-reply)))
+ (let ((reply (erbot-frob-with-init-string main-reply)))
+ (unless
+ (or
+ (null erbot-reply-p)
+ (equal main-reply 'noreply)
+ (equal main-reply "noreply"))
+ ;; now we are actually gonna reply.
+ (setq reply (fs-limit-lines reply))
+ (set-buffer backup-buffer)
+ (let ((lines (split-string reply "\n")))
+ (mapc
+ (lambda (line)
+ (lispy-message (concat (if (string-match "^#" tgt)
+ (if (erbot-lispy-safe-p line) "" " ")
+ (format "tell %s " tgt)) line "\n")))
+ lines)))))
+
+;; Mtp does not use prefixed commands, activate the right ones via aliases
+(defun erbot-lispy-safe-p (msg)
+ (string-match "^/" line))
+
+(defadvice erbot-install (after ad-erbot-install-lispy-after act)
+ (add-hook 'lispy-post-insert-hook 'erbot-lispy-remote))
+
+(provide 'erbot-lispy)