+ (let* ((channel (match-string 1 string))
+ (channel-identity (riece-make-identity channel
+ riece-server-name))
+ (buffer (riece-channel-buffer channel-identity))
+ (string (copy-sequence riece-353-string))
+ (start 0)
+ users)
+ (setq riece-353-string nil)
+ (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)
+ users (cons (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)))
+ users)))
+ (setq users (nreverse users))
+ (riece-naming-assert-channel-users users channel)
+ (riece-insert-info
+ buffer
+ (concat (format "%d users: " (length 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
+ (concat (format "%d users on %s: "
+ (length users)
+ (riece-format-identity channel-identity t))
+ string))
+ "\n")))))