yuya373 / emacs-slack

slack client for emacs
1.1k stars 117 forks source link

Zoom links not supported (solution inside) #565

Open jumper047 opened 2 years ago

jumper047 commented 2 years ago

In my company we using slack with zoom app, which generates special blocks inside buffer with "join" button and additional stuff. I added rudimentary support for this type of blocks - it's not perfect, but I suppose it useful enough to post it here. Just add it somewhere in your slack config:

    ;; Zoom support
    (defclass slack-zoom-call-block ()
      ((type :initarg :type :type string)
       (block-id :initarg :block_id :type string)
       (name :initarg :name :type string)
       (id :initarg :id :type string)
       (join-url :initarg :join_url :type string)))

    (cl-defmethod slack-block-to-string ((this slack-zoom-call-block) &optional _option)
      (with-slots (name id join-url) this
    (format "%s\nMeeting ID: %s\n<%s|Join>"
        (propertize name 'face 'slack-mrkdwn-bold-face) id join-url)))

    (defun slack-create-zoom-call-block (payload)
      (let ((call-data (plist-get (plist-get payload :call) :v1)))
    (make-instance 'slack-zoom-call-block
               :type (plist-get payload :type)
               :block_id (plist-get payload :block_id)
               :name (plist-get call-data :name)
               :id (plist-get call-data :id)
               :join_url (plist-get call-data :join_url))))

    (defun my/slack-create-layout-block-advice (orig &rest args)
      (let ((type (plist-get (cl-first args) :type)))
    (if (string= "call" type)
        (slack-create-zoom-call-block (cl-first args))
      (apply orig args))))

    (advice-add 'slack-create-layout-block :around 'my/slack-create-layout-block-advice)