- (if (string-match " *$" string)
- (setq string (substring string 0 (match-beginning 0))))
- (setq users (split-string string))
- (while users
- (if (eq (aref (car users) 0) ?@)
- (progn
- (riece-naming-assert-join (substring (car users) 1) channel)
- (riece-channel-toggle-operator
- channel (substring (car users) 1) t))
- (if (eq (aref (car users) 0) ?+)
- (progn
- (riece-naming-assert-join (substring (car users) 1) channel)
- (riece-channel-toggle-speaker
- channel (substring (car users) 1) t))
- (riece-naming-assert-join (car users) channel)))
- (setq users (cdr users)))
- (riece-redisplay-buffers))))
+ (while (string-match
+ (concat "\\([@+]\\)?\\(" riece-user-regexp "\\) *")
+ string start)
+ (put-text-property (match-beginning 2) (match-end 2)
+ 'riece-identity
+ (riece-make-identity (match-string 2 string)
+ riece-server-name)
+ string)
+ (setq start (match-end 0)
+ user (if (match-beginning 1)
+ (if (eq (aref string (match-beginning 1)) ?@)
+ (list (match-string 2 string) ?o)
+ (if (eq (aref string (match-beginning 1)) ?+)
+ (list (match-string 2 string) ?v)))
+ (list (match-string 2 string)))
+ riece-353-users (cons user riece-353-users)))
+ (let* ((channel-identity (riece-make-identity channel
+ riece-server-name))
+ (buffer (riece-channel-buffer channel-identity)))
+ (riece-insert-info buffer (concat "Users: " string "\n"))
+ (riece-insert-info
+ (if (and riece-channel-buffer-mode
+ (not (eq buffer riece-channel-buffer)))
+ (list riece-dialogue-buffer riece-others-buffer)
+ riece-dialogue-buffer)
+ (concat
+ (riece-concat-server-name
+ (format "Users on %s: %s"
+ (riece-format-identity channel-identity t) string))
+ "\n"))))))
+
+(defun riece-handle-322-message (prefix number name string)
+ (if (string-match "^\\([^ ]+\\) \\([0-9]+\\) :" string)
+ (let* ((channel (match-string 1 string))
+ (visible (match-string 2 string))
+ (topic (substring string (match-end 0))))
+ (riece-channel-set-topic (riece-get-channel channel) topic)
+ (let* ((channel-identity (riece-make-identity channel
+ riece-server-name))
+ (buffer (riece-channel-buffer channel-identity)))
+ (riece-insert-info buffer (concat visible " users, topic: "
+ topic "\n"))
+ (riece-insert-info
+ (if (and riece-channel-buffer-mode
+ (not (eq buffer riece-channel-buffer)))
+ (list riece-dialogue-buffer riece-others-buffer)
+ riece-dialogue-buffer)
+ (concat
+ (riece-concat-server-name
+ (format "%s: %s users, topic: %s"
+ (riece-format-identity channel-identity t) visible topic))
+ "\n"))))))