diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-conversations.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-conversations.el | 278 |
1 files changed, 0 insertions, 278 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-conversations.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-conversations.el deleted file mode 100644 index f752d0c14783..000000000000 --- a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-conversations.el +++ /dev/null @@ -1,278 +0,0 @@ -;;; slack-conversations.el --- -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 - -;; Author: <yuya373@yuya373> -;; Keywords: - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: - -;; - -;;; Code: -(require 'slack-request) -(require 'slack-room) - -(defconst slack-conversations-archive-url - "https://slack.com/api/conversations.archive") -(defconst slack-conversations-invite-url - "https://slack.com/api/conversations.invite") -(defconst slack-conversations-join-url - "https://slack.com/api/conversations.join") -(defconst slack-conversations-leave-url - "https://slack.com/api/conversations.leave") -(defconst slack-conversations-rename-url - "https://slack.com/api/conversations.rename") -(defconst slack-conversations-set-purpose-url - "https://slack.com/api/conversations.setPurpose") -(defconst slack-conversations-set-topic-url - "https://slack.com/api/conversations.setTopic") -(defconst slack-conversations-members-url - "https://slack.com/api/conversations.members") -(defconst slack-conversations-kick-url - "https://slack.com/api/conversations.kick") - -(cl-defun slack-conversations-success-handler (team &key on-errors on-success) - (cl-function - (lambda (&key data &allow-other-keys) - (cl-labels - ((replace-underscore-with-space (s) - (replace-regexp-in-string "_" - " " - s)) - (log-error - (_) - (slack-if-let* - ((err (plist-get data :error)) - (message (format "%s" - (replace-underscore-with-space - err)))) - (slack-log message team :level 'error)) - (slack-if-let* - ((errors (plist-get data :errors)) - (has-handler (functionp on-errors))) - (funcall on-errors errors)))) - (slack-request-handle-error - (data "conversations" #'log-error) - (slack-if-let* ((warning (plist-get data :warning))) - (slack-log (format "%s" (replace-underscore-with-space - warning)) - team - :level 'warn) - (when (functionp on-success) - (funcall on-success data)))))))) - -(defun slack-conversations-archive (room team) - (let ((id (oref room id))) - (slack-request - (slack-request-create - slack-conversations-archive-url - team - :type "POST" - :params (list (cons "channel" id)) - :success (slack-conversations-success-handler team))))) - -(defun slack-conversations-invite (room team) - (let* ((channel (oref room id)) - (user-names (slack-user-names team)) - (users nil)) - (cl-labels - ((already-selected-p - (user-name) - (cl-find-if #'(lambda (e) - (string= e - (plist-get (cdr user-name) - :id))) - users)) - (filter-selected (user-names) - (cl-remove-if #'already-selected-p - user-names))) - (cl-loop for i from 1 upto 30 - as candidates = (filter-selected user-names) - as selected = (slack-select-from-list - (candidates "Select User: ")) - while selected - do (push (plist-get selected :id) users))) - (setq users (mapconcat #'identity users ",")) - - (cl-labels - ((errors-handler - (errors) - (let ((message - (mapconcat #'(lambda (err) - (let ((msg (plist-get err :error)) - (user (plist-get err :user))) - (format "%s%s" - (replace-regexp-in-string "_" " " msg) - (or (and user (format ": %s" user)) - "")))) - errors - ", "))) - (slack-log message team :level 'error)))) - (slack-request - (slack-request-create - slack-conversations-invite-url - team - :type "POST" - :params (list (cons "channel" channel) - (cons "users" users)) - :success (slack-conversations-success-handler team - :on-errors - #'errors-handler)))))) - -(defun slack-conversations-join (room team) - (let ((channel (oref room id))) - (slack-request - (slack-request-create - slack-conversations-join-url - team - :type "POST" - :params (list (cons "channel" channel)) - :success (slack-conversations-success-handler team))))) - -(defun slack-conversations-leave (room team) - (let ((channel (oref room id))) - (slack-request - (slack-request-create - slack-conversations-leave-url - team - :type "POST" - :params (list (cons "channel" channel)) - :success (slack-conversations-success-handler team))))) - -(defun slack-conversations-rename (room team) - (let ((channel (oref room id)) - (name (read-from-minibuffer "Name: "))) - (slack-request - (slack-request-create - slack-conversations-rename-url - team - :type "POST" - :params (list (cons "channel" channel) - (cons "name" name)) - :success (slack-conversations-success-handler team))))) - -(defun slack-conversations-set-purpose (room team) - (let ((channel (oref room id)) - (purpose (read-from-minibuffer "Purpose: "))) - (cl-labels - ((on-success (data) - (let* ((channel (plist-get data :channel)) - (purpose (plist-get channel :purpose))) - (oset room purpose purpose)))) - (slack-request - (slack-request-create - slack-conversations-set-purpose-url - team - :type "POST" - :params (list (cons "channel" channel) - (cons "purpose" purpose)) - :success (slack-conversations-success-handler team - :on-success - #'on-success)))))) - -(defun slack-conversations-set-topic (room team) - (let ((channel (oref room id)) - (topic (read-from-minibuffer "Topic: "))) - (cl-labels - ((on-success (data) - (let* ((channel (plist-get data :channel)) - (topic (plist-get channel :topic))) - (oset room topic topic)))) - (slack-request - (slack-request-create - slack-conversations-set-topic-url - team - :type "POST" - :params (list (cons "channel" channel) - (cons "topic" topic)) - :success (slack-conversations-success-handler team - :on-success - #'on-success)))))) - -(defun slack-conversations-members (room team &optional cursor after-success) - (let ((channel (oref room id))) - (cl-labels - ((build-users - (members) - (cl-remove-if-not #'(lambda (user-name) - (cl-find (plist-get (cdr user-name) - :id) - members - :test #'string=)) - (slack-user-names team))) - (on-success - (&key data &allow-other-keys) - (slack-request-handle-error - (data "slack-conversations-membe") - (let* ((members (plist-get data :members)) - (meta (plist-get data :response_metadata)) - (next-cursor (plist-get meta :next_cursor))) - (when (functionp after-success) - (funcall after-success - (build-users members) - next-cursor)))))) - (slack-request - (slack-request-create - slack-conversations-members-url - team - :type "GET" - :sync t - :params (list (cons "channel" channel) - (and cursor (cons "cursor" cursor)) - ;; (cons "limit" "1") - ) - :success #'on-success))))) - -(defun slack-conversations-kick (room team) - (let ((channel (oref room id)) - (cursor nil) - (user nil) - (candidates nil)) - (cl-labels - ((on-member-success (members next-cursor) - (setq candidates members) - (setq cursor next-cursor)) - (select-member (candidates) - (funcall #'completing-read - "Select User: " candidates))) - (while (not user) - (slack-conversations-members room - team - cursor - #'on-member-success) - (let ((selected (cl-assoc (select-member (or (and (< 0 (length cursor)) - (append candidates - (cons "Next page" - 'next-page))) - candidates)) - candidates - :test #'string=))) - (when selected - (unless (eq 'next-page (cdr selected)) - (setq user (plist-get (cdr selected) :id)))))) - - (slack-request - (slack-request-create - slack-conversations-kick-url - team - :type "POST" - :params (list (cons "channel" channel) - (cons "user" user)) - :success (slack-conversations-success-handler team)))))) - -(provide 'slack-conversations) -;;; slack-conversations.el ends here |