chiark / gitweb /
dot/ercrc.el: New command `IRCOP' for being an IRC operator.
[profile] / dot / ercrc.el
1 ;;; -*-emacs-lisp-*-
2 ;;;
3 ;;; ERC configuration
4
5 (setq erc-nick "mdw"
6       erc-user-full-name "Mark Wooding")
7
8 (if (not (memq 'truncate erc-modules))
9     (setq erc-modules (cons 'truncate erc-modules)))
10
11 (setq erc-fill-column 76
12       erc-timestamp-right-column 68
13       erc-fill-prefix "   "
14       erc-max-buffer-size (* 60 3000))
15
16 (load "~/.erc-local.el")
17
18 (setq erc-track-exclude-types '("NICK" "JOIN" "PART"))
19
20 (setq erc-auto-query 'buffer)
21
22 (defun mdw-erc-turn-off-truncate-lines ()
23   (setq truncate-lines nil
24         truncate-partial-with-windows nil
25         word-wrap t
26         wrap-prefix (concat (propertize "    " 'face 'erc-prompt-face)
27                             " ")))
28 (add-hook 'erc-mode-hook 'mdw-erc-turn-off-truncate-lines)
29
30 (setq erc-autojoin t
31       erc-autojoin-domain-only nil
32       erc-autojoin-channels-alist
33       '(("irc.ssdis.loc" "#devel" "#jukebox" "#nextgen")
34         ("cam.irc.devel.ncipher.com"
35          "#devel" "#jukebox" "#nextgen" "#sec-team")
36         ("chiark.greenend.org.uk" "#chiark")
37         ("irc.distorted.org.uk" "#distorted" "#jukebox")
38         ("irc.hstg.corp.good.com" "#hstg")))
39
40 (defvar mdw-erc-auto-greet-bots-alist nil
41   "*Alist of (SERVER-REGEXP BOT-NICK MESSAGE-FORM).
42 Evaluate MESSAGE-FORM and sent to BOT-NICK when connected to a server which
43 matches SERVER-REGEXP.")
44
45 (defvar mdw-erc-ircop-alist nil
46   "*Alist of (SERVER-REGEXP ACCT PASSWD).
47 Login details for claiming server admin rights.")
48
49 (defun mdw-define-bot-greeting (server bot greeting)
50   "Define a new bot greeting."
51   (setq mdw-erc-auto-greet-bots-alist
52         (cons (list server bot greeting)
53               (remove* server mdw-erc-auto-greet-bots-alist
54                        :test #'string= :key #'car))))
55 (defun mdw-add-ircop-credentials (server acct passwd)
56   "Define a new set of `ircop' credentials."
57   (setq mdw-erc-ircop-alist
58         (cons (list server acct passwd)
59               (remove* server mdw-erc-ircop-alist
60                        :test #'string= :key #'car)))))
61 (load "~/.erc-auth.el")
62
63 (defun mdw-assoc-regexp (regexp alist)
64   "Return the association in ALIST whose car matches REGEXP."
65   (let ((answer nil))
66     (dolist (l alist)
67       (when (string-match (car l) regexp)
68         (setq answer l)))
69     answer))
70
71 (defun mdw-erc-auto-greet-bots (server nick)
72   "Send greeting message to bots."
73   (let ((a (mdw-assoc-regexp server mdw-erc-auto-greet-bots-alist)))
74     (when a
75       (let ((bot (cadr a))
76             (message (caddr a)))
77         (erc-server-send (concat "PRIVMSG " bot " :" message))))))
78 (add-hook 'erc-after-connect 'mdw-erc-auto-greet-bots)
79
80 (defun erc-cmd-GREET ()
81   "Send greeting messages, according to `mdw-erc-auto-greet-bots-alist'."
82   (mdw-erc-auto-greet-bots erc-session-server (erc-current-nick)))
83
84 (defun erc-cmd-IRCOP ()
85   "Claim `ircop' privileges."
86   (let ((a (mdw-assoc-regexp erc-session-server mdw-erc-ircop-alist)))
87     (when a
88       (let ((acct (cadr a))
89             (passwd (caddr a)))
90         (erc-server-send (concat "OPER " acct " " passwd))))))