dot/ercrc.el: New command `IRCOP' for being an IRC operator.
[profile] / dot / ercrc.el
index 30da860..a84d63f 100644 (file)
@@ -12,7 +12,6 @@
       erc-timestamp-right-column 68
       erc-fill-prefix "   "
       erc-max-buffer-size (* 60 3000))
-(erc-scrolltobottom-enable)
 
 (load "~/.erc-local.el")
 
 Evaluate MESSAGE-FORM and sent to BOT-NICK when connected to a server which
 matches SERVER-REGEXP.")
 
+(defvar mdw-erc-ircop-alist nil
+  "*Alist of (SERVER-REGEXP ACCT PASSWD).
+Login details for claiming server admin rights.")
+
 (defun mdw-define-bot-greeting (server bot greeting)
   "Define a new bot greeting."
-  (push (list server bot greeting) mdw-erc-auto-greet-bots-alist))
+  (setq mdw-erc-auto-greet-bots-alist
+       (cons (list server bot greeting)
+             (remove* server mdw-erc-auto-greet-bots-alist
+                      :test #'string= :key #'car))))
+(defun mdw-add-ircop-credentials (server acct passwd)
+  "Define a new set of `ircop' credentials."
+  (setq mdw-erc-ircop-alist
+       (cons (list server acct passwd)
+             (remove* server mdw-erc-ircop-alist
+                      :test #'string= :key #'car)))))
 (load "~/.erc-auth.el")
 
+(defun mdw-assoc-regexp (regexp alist)
+  "Return the association in ALIST whose car matches REGEXP."
+  (let ((answer nil))
+    (dolist (l alist)
+      (when (string-match (car l) regexp)
+       (setq answer l)))
+    answer))
+
 (defun mdw-erc-auto-greet-bots (server nick)
   "Send greeting message to bots."
-  (dolist (l mdw-erc-auto-greet-bots-alist)
-    (when (string-match (car l) server)
-      (let ((bot (cadr l))
-           (message (caddr l)))
+  (let ((a (mdw-assoc-regexp server mdw-erc-auto-greet-bots-alist)))
+    (when a
+      (let ((bot (cadr a))
+           (message (caddr a)))
        (erc-server-send (concat "PRIVMSG " bot " :" message))))))
 (add-hook 'erc-after-connect 'mdw-erc-auto-greet-bots)
 
 (defun erc-cmd-GREET ()
   "Send greeting messages, according to `mdw-erc-auto-greet-bots-alist'."
   (mdw-erc-auto-greet-bots erc-session-server (erc-current-nick)))
+
+(defun erc-cmd-IRCOP ()
+  "Claim `ircop' privileges."
+  (let ((a (mdw-assoc-regexp erc-session-server mdw-erc-ircop-alist)))
+    (when a
+      (let ((acct (cadr a))
+           (passwd (caddr a)))
+       (erc-server-send (concat "OPER " acct " " passwd))))))