-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathirchat-400.el
142 lines (124 loc) · 4.74 KB
/
irchat-400.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
;;; -*- emacs-lisp -*-
;;;
;;; see file irchat-copyright.el for change log and copyright info
(eval-when-compile (require 'irchat-inlines))
(eval-and-compile
(require 'irchat-filter)
(require 'irchat-vars))
;;;
;;; 400 replies -- ERRORS
;;;
(defun irchat-handle-400-msgs (number parsed-sender parsed-msg prefix rest)
"Generic handler for 4?? messages. This is called if no specific handler exists"
(if (string-match "[^ ]* \\([^ :]*\\) *\\([^ :]*\\) *:\\(.*\\)" rest)
(let ((target1 (matching-substring rest 1))
(target2 (matching-substring rest 2))
(msg (matching-substring rest 3)))
(cond ((string-equal target1 "")
(irchat-w-insert irchat-400-buffer
(format "%s%s\n"
irchat-error-prefix
msg)))
((string-equal target2 "")
(irchat-w-insert irchat-400-buffer
(format "%s%s (%s)\n"
irchat-error-prefix
msg
target1)))
(t
(irchat-w-insert irchat-400-buffer
(format "%s%s %s (%s)\n"
irchat-error-prefix
target1
msg
target2))))
)
(message "IRCHAT: Strange %s reply" number)))
(defun irchat-handle-401-msg (parsed-sender parsed-msg prefix rest) ;;; ERR_NOSUCHNICK
(if (string-match "[^ ]+ \\([^ ]+\\) +:\\(.*\\)" rest)
(let ((name (matching-substring rest 1))
(error (matching-substring rest 2)))
(irchat-change-nick-of name nil)
(irchat-send "WHOWAS %s" name))
(message "IRCHAT: Strange 401 reply")))
(defun irchat-handle-406-msg (parsed-sender parsed-msg prefix rest)
(if (string-match "[^ ]+ \\([^ ]+\\) +:\\(.*\\)" rest)
(let ((nickorchan (matching-substring rest 1)))
(irchat-change-nick-of nickorchan nil)
(message "IRCHAT: No such user %s" nickorchan))))
(defun irchat-handle-412-msg (parsed-sender parsed-msg prefix rest)
(message "IRCHAT: No text to send"))
(defun irchat-iterate-nick (nick)
(let* ((fmt (format "%s_" nick))
(new (substring fmt 0 (min 9 (length fmt)))))
(if (string= nick new)
(irchat-iterate-nick (format "_%s" nick))
new)))
(defun irchat-handle-432-msg (parsed-sender parsed-msg prefix rest) ;;; ERR_ERRONEUSNICKNAME
"Handle the 432 reply (erroneus nickname)"
(save-excursion
(set-buffer irchat-Command-buffer)
(beep)
(let ((nick (cond ((string-match "^\\([^ ]+\\) +\\([^ ]+\\) +:\\(.*\\)"
rest)
(matching-substring rest 2))
((string-match "^ *\\([^ ]+\\) :.*" rest)
(matching-substring rest 1))
(t
"UNKNOWN (Could not figure out, contact developers)"))))
(if (eq irchat-nick-accepted 'ok)
(setq irchat-real-nickname irchat-old-nickname))
(message "IRCHAT: Erroneous nickname %s. Choose a new one with %s."
nick
(substitute-command-keys "\\[irchat-Command-nickname]")))))
(defun irchat-handle-433-msg (parsed-sender parsed-msg prefix rest) ;;; ERR_NICKNAMEINUSE
"Handle the 433 reply (nickname already in use)"
(if (not (eq irchat-nick-accepted 'ok))
(progn
(setq irchat-real-nickname (irchat-iterate-nick irchat-real-nickname))
(setq irchat-old-nickname irchat-real-nickname)
(irchat-send "NICK %s" irchat-real-nickname)
(setq irchat-nick-accepted 'sent))
(save-excursion
(set-buffer irchat-Command-buffer)
(beep)
(setq irchat-real-nickname irchat-old-nickname)
(let ((nick (cond ((string-match "^\\([^ ]+\\) +\\([^ ]+\\) +:\\(.*\\)"
rest)
(matching-substring rest 2))
((string-match "^ *\\([^ ]+\\) :.*" rest)
(matching-substring rest 1))
(t
"UNKNOWN (Could not figure out, contact developers)"))))
(message
"IRCHAT: Nickname %s already in use. Choose a new one with %s."
nick
(substitute-command-keys "\\[irchat-Command-nickname]"))))))
(defun irchat-handle-437-msg (parsed-sender parsed-msg prefix rest) ;;; ERR_XXX
"Handle the 437 reply (nick/channel unavailable)"
(if (not (eq irchat-nick-accepted 'ok))
(progn
(setq irchat-real-nickname (irchat-iterate-nick irchat-real-nickname))
(setq irchat-old-nickname irchat-real-nickname)
(irchat-send "NICK %s" irchat-real-nickname)
(setq irchat-nick-accepted 'sent))
(save-excursion
(set-buffer irchat-Command-buffer)
(beep)
(let ((onick irchat-old-nickname)
(wnick "UNKNOWN (Could not figure out, contact developers)"))
(if (string-match "^\\([^ ]+\\) +\\([^ ]+\\) +:\\(.*\\)" rest)
(progn
(setq onick (matching-substring rest 1))
(setq wnick (matching-substring rest 2)))
(if (string-match "^ *\\([^ ]+\\) :.*" rest)
(setq onick (matching-substring rest 1))))
(if (stringp onick)
(setq irchat-real-nickname onick))
(message
"IRCHAT: Nickname/channel %s unavailable." wnick)))))
(defun irchat-handle-482-msg (parsed-sender parsed-msg prefix rest)
(message "IRCHAT: You are not a channel operator"))
;;;
;;; eof
;;;