* riece-server.el (riece-close-server-process): Run
[riece] / lisp / riece-ctcp.el
index 8c8ba1c..5fc14e0 100644 (file)
@@ -26,8 +26,8 @@
 
 (require 'riece-version)
 (require 'riece-misc)
-(require 'riece-display)
 (require 'riece-highlight)
+(require 'riece-display)
 
 (defface riece-ctcp-action-face
   '((((class color)
 
 (defvar riece-dialogue-mode-map)
 
-(defun riece-ctcp-requires ()
-  (if (memq 'riece-highlight riece-addons)
-      '(riece-highlight)))
+(defvar riece-ctcp-enabled nil)
 
-(defun riece-ctcp-insinuate ()
-  (add-hook 'riece-privmsg-hook 'riece-handle-ctcp-request)
-  (add-hook 'riece-notice-hook 'riece-handle-ctcp-response)
-  (if (memq 'riece-highlight riece-addons)
-      (setq riece-dialogue-font-lock-keywords
-           (cons (list (concat "^" riece-time-prefix-regexp "\\("
-                               (regexp-quote riece-ctcp-action-prefix)
-                               ".*\\)$")
-                       1 riece-ctcp-action-face t t)
-                 riece-dialogue-font-lock-keywords)))
-  (define-key riece-dialogue-mode-map "\C-cv" 'riece-command-ctcp-version)
-  (define-key riece-dialogue-mode-map "\C-cp" 'riece-command-ctcp-ping)
-  (define-key riece-dialogue-mode-map "\C-ca" 'riece-command-ctcp-action)
-  (define-key riece-dialogue-mode-map "\C-cc" 'riece-command-ctcp-clientinfo))
+(defconst riece-ctcp-description
+  "CTCP (Client To Client Protocol) support")
 
 (defun riece-handle-ctcp-request (prefix string)
-  (when (and prefix string
+  (when (and riece-ctcp-enabled prefix string
             (riece-prefix-nickname prefix))
     (let* ((parameters (riece-split-parameters string))
           (targets (split-string (car parameters) ","))
                           hook prefix (car targets) message)
                        (error
                         (if riece-debug
-                            (message "Error occurred in `%S': %S" hook error))
+                            (message "Error in `%S': %S" hook error))
                         nil))
                (if function
                    (condition-case error
                        (funcall function prefix (car targets) message)
                      (error
                       (if riece-debug
-                          (message "Error occurred in `%S': %S"
+                          (message "Error in `%S': %S"
                                    function error))))))
              (condition-case error
                  (run-hook-with-args-until-success
                   after-hook prefix (car targets) message)
                (error
                 (if riece-debug
-                    (message "Error occurred in `%S': %S"
+                    (message "Error in `%S': %S"
                              after-hook error)))))
            t)))))
 
 (defun riece-handle-ctcp-version-request (prefix target string)
-  (let ((buffer (if (riece-channel-p target)
-                   (riece-channel-buffer (riece-make-identity
-                                          target riece-server-name))))
-       (user (riece-prefix-nickname prefix)))
+  (let* ((target-identity (riece-make-identity target riece-server-name))
+        (buffer (if (riece-channel-p target)
+                    (riece-channel-buffer target-identity)))
+        (user (riece-prefix-nickname prefix)))
     (riece-send-string
      (format "NOTICE %s :\1VERSION %s\1\r\n" user (riece-extended-version)))
     (riece-insert-change buffer (format "CTCP VERSION from %s\n" user))
        (format "CTCP VERSION from %s (%s) to %s"
               user
               (riece-strip-user-at-host (riece-prefix-user-at-host prefix))
-              target))
+              (riece-format-identity target-identity t)))
       "\n"))))
 
 (defun riece-handle-ctcp-ping-request (prefix target string)
-  (let ((buffer (if (riece-channel-p target)
-                   (riece-channel-buffer (riece-make-identity
-                                          target riece-server-name))))
-       (user (riece-prefix-nickname prefix)))
+  (let* ((target-identity (riece-make-identity target riece-server-name))
+        (buffer (if (riece-channel-p target)
+                    (riece-channel-buffer target-identity)))
+        (user (riece-prefix-nickname prefix)))
     (riece-send-string
      (if string
         (format "NOTICE %s :\1PING %s\1\r\n" user string)
        (format "CTCP PING from %s (%s) to %s"
               user
               (riece-strip-user-at-host (riece-prefix-user-at-host prefix))
-              target))
+              (riece-format-identity target-identity t)))
       "\n"))))
 
 (defun riece-handle-ctcp-clientinfo-request (prefix target string)
-  (let ((buffer (if (riece-channel-p target)
-                   (riece-channel-buffer (riece-make-identity
-                                          target riece-server-name))))
-       (user (riece-prefix-nickname prefix)))
+  (let* ((target-identity (riece-make-identity target riece-server-name))
+        (buffer (if (riece-channel-p target)
+                    (riece-channel-buffer target-identity)))
+        (user (riece-prefix-nickname prefix)))
     (riece-send-string
      (format "NOTICE %s :\1CLIENTINFO %s\1\r\n"
             user
        (format "CTCP CLIENTINFO from %s (%s) to %s"
               user
               (riece-strip-user-at-host (riece-prefix-user-at-host prefix))
-              target))
+              (riece-format-identity target-identity t)))
       "\n"))))
 
 (defun riece-handle-ctcp-action-request (prefix target string)
                                               " " string)) "\n"))))
 
 (defun riece-handle-ctcp-response (prefix string)
-  (when (and prefix string
+  (when (and riece-ctcp-enabled prefix string
             (riece-prefix-nickname prefix))
     (let* ((parameters (riece-split-parameters string))
           (targets (split-string (car parameters) ","))
                           hook prefix (car targets) message)
                        (error
                         (if riece-debug
-                            (message "Error occurred in `%S': %S" hook error))
+                            (message "Error in `%S': %S" hook error))
                         nil))
                (if function
                    (condition-case error
                        (funcall function prefix (car targets) message)
                      (error
                       (if riece-debug
-                          (message "Error occurred in `%S': %S"
+                          (message "Error in `%S': %S"
                                    function error))))))
              (condition-case error
                  (run-hook-with-args-until-success
                   after-hook prefix (car targets) message)
                (error
                 (if riece-debug
-                    (message "Error occurred in `%S': %S"
+                    (message "Error in `%S': %S"
                              after-hook error)))))
            t)))))
 
                 " (in " (riece-format-identity target t) ")")))
       "\n"))))
 
+(defun riece-ctcp-requires ()
+  (if (memq 'riece-highlight riece-addons)
+      '(riece-highlight)))
+
+(defun riece-ctcp-insinuate ()
+  (add-hook 'riece-privmsg-hook 'riece-handle-ctcp-request)
+  (add-hook 'riece-notice-hook 'riece-handle-ctcp-response)
+  (if (memq 'riece-highlight riece-addons)
+      (setq riece-dialogue-font-lock-keywords
+           (cons (list (concat "^" riece-time-prefix-regexp "\\("
+                               (regexp-quote riece-ctcp-action-prefix)
+                               ".*\\)$")
+                       1 riece-ctcp-action-face t t)
+                 riece-dialogue-font-lock-keywords))))
+
+(defun riece-ctcp-enable ()
+  (define-key riece-dialogue-mode-map "\C-cv" 'riece-command-ctcp-version)
+  (define-key riece-dialogue-mode-map "\C-cp" 'riece-command-ctcp-ping)
+  (define-key riece-dialogue-mode-map "\C-ca" 'riece-command-ctcp-action)
+  (define-key riece-dialogue-mode-map "\C-cc" 'riece-command-ctcp-clientinfo)
+  (setq riece-ctcp-enabled t))
+
+(defun riece-ctcp-disable ()
+  (define-key riece-dialogue-mode-map "\C-cv" nil)
+  (define-key riece-dialogue-mode-map "\C-cp" nil)
+  (define-key riece-dialogue-mode-map "\C-ca" nil)
+  (define-key riece-dialogue-mode-map "\C-cc" nil)
+  (setq riece-ctcp-enabled nil))
+
 (provide 'riece-ctcp)
 
 ;;; riece-ctcp.el ends here