[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/erc/erc-services.el,v
From: |
Michael W. Olson |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/erc/erc-services.el,v |
Date: |
Sun, 09 Dec 2007 06:40:49 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Michael W. Olson <mwolson> 07/12/09 06:40:48
Index: erc-services.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/erc/erc-services.el,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- erc-services.el 26 Jul 2007 05:26:52 -0000 1.7
+++ erc-services.el 9 Dec 2007 06:40:47 -0000 1.8
@@ -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
"address@hidden"
"/address@hidden<password>"
"address@hidden"
- "identify" nil nil)
+ "identify" nil nil nil)
(Azzurra
"address@hidden"
"/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
"address@hidden"
"/NickServ\\s-IDENTIFY\\s-senha"
"NickServ"
- "IDENTIFY" nil "")
+ "IDENTIFY" nil "" nil)
(DALnet
"address@hidden"
"/address@hidden<password>"
"address@hidden"
- "IDENTIFY" nil nil)
+ "IDENTIFY" nil nil nil)
(freenode
"address@hidden"
"/msg\\s-NickServ\\s-IDENTIFY\\s-<password>"
"NickServ"
- "IDENTIFY" nil nil)
+ "IDENTIFY" nil nil
+ "Password\\s-accepted\\s--\\s-you\\s-are\\s-now\\s-recognized")
(GalaxyNet
"address@hidden"
"Please\\s-change\\s-nicks\\s-or\\s-authenticate."
"address@hidden"
- "AUTH" t nil)
+ "AUTH" t nil nil)
+ (GRnet
+ "address@hidden"
+ "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
"address@hidden"
"type\\s-/squery\\s-Trent\\s-identify\\s-<password>"
"address@hidden"
- "IDENTIFY" nil "SQUERY")
+ "IDENTIFY" nil "SQUERY" nil)
(OFTC
"address@hidden"
"type\\s-/msg\\s-NickServ\\s-IDENTIFY\\s-password."
"NickServ"
- "IDENTIFY" nil nil)
+ "IDENTIFY" nil nil nil)
(QuakeNet
nil nil
"address@hidden"
- "auth" t nil)
+ "auth" t nil nil)
(SlashNET
"address@hidden"
"/msg\\s-NickServ\\s-IDENTIFY\\s-password"
"address@hidden"
- "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 address@hidden
@@ -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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/erc/erc-services.el,v,
Michael W. Olson <=