# HG changeset patch # User Michael Olson # Date 1197182447 0 # Node ID 60375ad7809cbab97b069dbafbd8fa700ed81bba # Parent 3281ac5730e159ab1e297032d011cfa2b8086d03 Sync from ERC upstream Changes include: - Add nickserv support for GRnet. - Parse 275 (secure connection) response. - Provide new hook `erc-nickserv-identified-hook' that runs when nickserv confirms that the user has successfully identified. diff -r 3281ac5730e1 -r 60375ad7809c lisp/erc/ChangeLog --- a/lisp/erc/ChangeLog Sun Dec 09 04:14:11 2007 +0000 +++ b/lisp/erc/ChangeLog Sun Dec 09 06:40:47 2007 +0000 @@ -1,9 +1,33 @@ +2007-12-09 Michael Olson + + * erc-services.el (erc-nickserv-alist): Fix regexps for GRnet. + +2007-12-09 Giorgos Keramidas (tiny change) + + * erc-backend.el, erc.el: + Parse 275 (secure connection) responses. + + * erc-services.el: Add identification hooks for GRnet, the Greek + IRC network . + 2007-12-08 David Kastrup * erc-stamp.el (erc-echo-timestamp): * erc-lang.el (language): * erc-backend.el (erc-server-connect): Fix buggy call to `message'. +2007-12-07 Edward O'Connor + + * erc-services.el: Provide a hook that runs when nickserv confirms + that the user has successfully identified. + (services, erc-nickserv-identify-mode): Add and remove + erc-nickserv-identification-autodetect from + erc-server-NOTICE-functions. + (erc-nickserv-alist): Add SUCCESS-REGEXP to each entry. + (erc-nickserv-alist-identified-regexp) + (erc-nickserv-identification-autodetect): New functions. + (erc-nickserv-identified-hook): New hook. + 2007-12-06 D. Goel * erc-match.el (erc-add-entry-to-list): Fix buggy call to `error'. diff -r 3281ac5730e1 -r 60375ad7809c lisp/erc/erc-backend.el --- a/lisp/erc/erc-backend.el Sun Dec 09 04:14:11 2007 +0000 +++ b/lisp/erc/erc-backend.el Sun Dec 09 06:40:47 2007 +0000 @@ -1538,6 +1538,16 @@ See `erc-display-server-message'." nil (erc-display-server-message proc parsed)) +(define-erc-response-handler (275) + "Display secure connection message." nil + (multiple-value-bind (nick user message) + (cdr (erc-response.command-args parsed)) + (erc-display-message + parsed 'notice 'active 's275 + ?n nick + ?m (mapconcat 'identity (cddr (erc-response.command-args parsed)) + " ")))) + (define-erc-response-handler (290) "Handle dancer-ircd CAPAB messages." nil nil) diff -r 3281ac5730e1 -r 60375ad7809c lisp/erc/erc-services.el --- a/lisp/erc/erc-services.el Sun Dec 09 04:14:11 2007 +0000 +++ b/lisp/erc/erc-services.el Sun Dec 09 06:40:47 2007 +0000 @@ -29,9 +29,10 @@ ;; are made to test if NickServ is the real NickServ for a given network or ;; server. -;; As a default, ERC has the data for the official nickname services on the -;; networks Austnet, BrasNET, Dalnet, freenode, GalaxyNet, and Slashnet. -;; You can add more by using M-x customize-variable RET erc-nickserv-alist. +;; As a default, ERC has the data for the official nickname services on +;; the networks Austnet, BrasNET, Dalnet, freenode, GalaxyNet, GRnet, +;; and Slashnet. You can add more by using M-x customize-variable RET +;; erc-nickserv-alist. ;; Usage: ;; @@ -109,7 +110,9 @@ (remove-hook 'erc-after-connect 'erc-nickserv-identify-on-connect) (remove-hook 'erc-nick-changed-functions - 'erc-nickserv-identify-on-nick-change))) + 'erc-nickserv-identify-on-nick-change) + (remove-hook 'erc-server-NOTICE-functions + 'erc-nickserv-identification-autodetect))) ;;;###autoload (defun erc-nickserv-identify-mode (mode) @@ -118,6 +121,8 @@ (list (intern (completing-read "Choose Nickserv identify mode (RET to disable): " '(("autodetect") ("nick-change") ("both")) nil t)))) + (add-hook 'erc-server-NOTICE-functions + 'erc-nickserv-identification-autodetect) (cond ((eq mode 'autodetect) (setq erc-nickserv-identify-mode 'autodetect) (add-hook 'erc-server-NOTICE-functions @@ -149,7 +154,9 @@ (remove-hook 'erc-after-connect 'erc-nickserv-identify-on-connect) (remove-hook 'erc-nick-changed-functions - 'erc-nickserv-identify-on-nick-change)))) + 'erc-nickserv-identify-on-nick-change) + (remove-hook 'erc-server-NOTICE-functions + 'erc-nickserv-identification-autodetect)))) (defcustom erc-prompt-for-nickserv-password t "Ask for the password when identifying to NickServ." @@ -176,6 +183,7 @@ (const DALnet) (const freenode) (const GalaxyNet) + (const GRnet) (const iip) (const OFTC) (const QuakeNet) @@ -192,63 +200,70 @@ '((Ars nil nil "Census" - "IDENTIFY" nil nil) + "IDENTIFY" nil nil nil) (Austnet "NickOP!service@austnet.org" "/msg\\s-NickOP@austnet.org\\s-identify\\s-" "nickop@austnet.org" - "identify" nil nil) + "identify" nil nil nil) (Azzurra "NickServ!service@azzurra.org" "/ns\\s-IDENTIFY\\s-password" "NickServ" - "IDENTIFY" nil nil) + "IDENTIFY" nil nil nil) (BitlBee nil nil "&bitlbee" - "identify" nil nil) + "identify" nil nil nil) (BRASnet "NickServ!services@brasnet.org" "/NickServ\\s-IDENTIFY\\s-senha" "NickServ" - "IDENTIFY" nil "") + "IDENTIFY" nil "" nil) (DALnet "NickServ!service@dal.net" "/msg\\s-NickServ@services.dal.net\\s-IDENTIFY\\s-" "NickServ@services.dal.net" - "IDENTIFY" nil nil) + "IDENTIFY" nil nil nil) (freenode "NickServ!NickServ@services." "/msg\\s-NickServ\\s-IDENTIFY\\s-" "NickServ" - "IDENTIFY" nil nil) + "IDENTIFY" nil nil + "Password\\s-accepted\\s--\\s-you\\s-are\\s-now\\s-recognized") (GalaxyNet "NS!nickserv@galaxynet.org" "Please\\s-change\\s-nicks\\s-or\\s-authenticate." "NS@services.galaxynet.org" - "AUTH" t nil) + "AUTH" t nil nil) + (GRnet + "NickServ!service@irc.gr" + "This\\s-nickname\\s-is\\s-registered\\s-and\\s-protected." + "NickServ" + "IDENTIFY" nil nil + "Password\\s-accepted\\s--\\s-you\\s-are\\s-now\\s-recognized.") (iip "Trent@anon.iip" "type\\s-/squery\\s-Trent\\s-identify\\s-" "Trent@anon.iip" - "IDENTIFY" nil "SQUERY") + "IDENTIFY" nil "SQUERY" nil) (OFTC "NickServ!services@services.oftc.net" "type\\s-/msg\\s-NickServ\\s-IDENTIFY\\s-password." "NickServ" - "IDENTIFY" nil nil) + "IDENTIFY" nil nil nil) (QuakeNet nil nil "Q@CServe.quakenet.org" - "auth" t nil) + "auth" t nil nil) (SlashNET "NickServ!services@services.slashnet.org" "/msg\\s-NickServ\\s-IDENTIFY\\s-password" "NickServ@services.slashnet.org" - "IDENTIFY" nil nil)) + "IDENTIFY" nil nil nil)) "Alist of NickServer details, sorted by network. Every element in the list has the form - \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER) + \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER SUCCESS-REGEXP) SYMBOL is a network identifier, a symbol, as used in `erc-networks-alist'. NICKSERV is the description of the nickserv in the form nick!user@host. @@ -258,7 +273,9 @@ USE-CURRENT indicates whether the current nickname must be used when identifying. ANSWER is the command to use for the answer. The default is 'privmsg. - This last element is optional." +SUCCESS-REGEXP is a regular expression matching the message nickserv + sends when you've successfully identified. +The last two elements are optional." :group 'erc-services :type '(repeat (list :tag "Nickserv data" @@ -292,8 +309,36 @@ (defsubst erc-nickserv-alist-ident-command (network &optional entry) (nth 6 (or entry (assoc network erc-nickserv-alist)))) +(defsubst erc-nickserv-alist-identified-regexp (network &optional entry) + (nth 7 (or entry (assoc network erc-nickserv-alist)))) + ;; Functions: +(defcustom erc-nickserv-identified-hook nil + "Run this hook when NickServ acknowledged successful identification. +Hooks are called with arguments (NETWORK NICK)." + :group 'erc-services + :type 'hook) + +(defun erc-nickserv-identification-autodetect (proc parsed) + "Check for NickServ's successful identification notice. +Make sure it is the real NickServ for this network and that it has +specifically confirmed a successful identification attempt. +If this is the case, run `erc-nickserv-identified-hook'." + (let* ((network (erc-network)) + (sender (erc-nickserv-alist-sender network)) + (success-regex (erc-nickserv-alist-identified-regexp network)) + (sspec (erc-response.sender parsed)) + (nick (car (erc-response.command-args parsed))) + (msg (erc-response.contents parsed))) + ;; continue only if we're sure it's the real nickserv for this network + ;; and it's told us we've successfully identified + (when (and sender (equal sspec sender) + (string-match success-regex msg)) + (erc-log "NickServ IDENTIFY success notification detected") + (run-hook-with-args 'erc-nickserv-identified-hook network nick) + nil))) + (defun erc-nickserv-identify-autodetect (proc parsed) "Check for a NickServ identify request everytime a notice is received. Make sure it is the real NickServ for this network and that it has diff -r 3281ac5730e1 -r 60375ad7809c lisp/erc/erc.el --- a/lisp/erc/erc.el Sun Dec 09 04:14:11 2007 +0000 +++ b/lisp/erc/erc.el Sun Dec 09 06:40:47 2007 +0000 @@ -6213,6 +6213,7 @@ (s252 . "%i operator(s) online") (s253 . "%i unknown connection(s)") (s254 . "%i channels formed") + (s275 . "%n %m") (s301 . "%n is AWAY: %r") (s303 . "Is online: %n") (s305 . "%m")