Function: erc-server-JOIN

erc-server-JOIN is a byte-compiled function defined in erc-backend.el.gz.

Signature

(erc-server-JOIN PROC PARSED)

Documentation

Handle join messages.

Handler for a JOIN server response. PROC is the server process which returned the response. PARSED is the actual response as an erc-response struct. If you want to add responses don't modify this function, but rather add things to erc-server-JOIN-functions instead.

Source Code

;; Defined in /usr/src/emacs/lisp/erc/erc-backend.el.gz
(define-erc-response-handler (JOIN)
  "Handle join messages."
  nil
  (let ((chnl (erc-response.contents parsed))
        (buffer nil))
    (pcase-let ((`(,nick ,login ,host)
                 (erc-parse-user (erc-response.sender parsed))))
      ;; strip the stupid combined JOIN facility (IRC 2.9)
      (if (string-match "^\\(.*\\)\^g.*$" chnl)
          (setq chnl (match-string 1 chnl)))
      (save-excursion
        (let ((args (cond
                     ;; If I have joined a channel
                     ((erc-current-nick-p nick)
                      (let ((erc--display-context
                             (erc--server-determine-join-display-context
                              chnl erc--display-context)))
                        (setq buffer (erc--open-target chnl)))
                      (when buffer
                        (set-buffer buffer)
                        (with-suppressed-warnings
                            ((obsolete erc-add-default-channel))
                          (erc-add-default-channel chnl))
                        (setf (erc--target-channel-joined-p erc--target) t)
                        (erc-server-send (format "MODE %s" chnl)))
                      (erc-with-buffer (chnl proc)
                        (erc-channel-begin-receiving-names))
                      (erc-update-mode-line)
                      (run-hooks 'erc-join-hook)
                      (list 'JOIN-you ?c chnl))
                     (t
                      (setq buffer (erc-get-buffer chnl proc))
                      (list 'JOIN ?n nick ?u login ?h host ?c chnl)))))
          (when buffer (set-buffer buffer))
          (erc-update-channel-member chnl nick nick t nil nil nil nil nil host login)
          (unless (erc-current-nick-p nick)
            (erc--ensure-query-member nick))
          ;; on join, we want to stay in the new channel buffer
          ;;(set-buffer ob)
          (apply #'erc-display-message parsed 'notice buffer args))))))