diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-bot-message.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-bot-message.el | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-bot-message.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-bot-message.el new file mode 100644 index 000000000000..1f60ff281a2b --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-bot-message.el @@ -0,0 +1,102 @@ +;;; slack-bot-message.el --- bot message class -*- lexical-binding: t; -*- + +;; Copyright (C) 2015 yuya.minami + +;; Author: yuya.minami <yuya.minami@yuyaminami-no-MacBook-Pro.local> +;; 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 <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; + +;;; Code: + +(require 'eieio) +(require 'slack-message) +(require 'slack-message-formatter) +(require 'slack-util) + +(defmethod slack-message-bot-id ((this slack-bot-message)) + (oref this bot-id)) + +(defun slack-find-bot (id team) + (with-slots (bots) team + (cl-find-if (lambda (bot) + (string= id (plist-get bot :id))) + bots))) + +(defun slack-find-bot-by-name (name team) + (with-slots (bots) team + (cl-find-if #'(lambda (bot) + (string= name (plist-get bot :name))) + bots))) + +(defmethod slack-bot-name ((m slack-bot-message) team) + (or (unless (slack-string-blankp (oref m username)) + (oref m username)) + (when (slot-boundp m 'bot-id) + (let ((bot (slack-find-bot (oref m bot-id) team))) + (plist-get bot :name))) + "Unknown Bot")) + +(defmethod slack-message-to-alert ((m slack-bot-message) team) + (let ((text (if (slot-boundp m 'text) + (oref m text)))) + (with-slots (attachments) m + (if (and text (< 0 (length text))) + (slack-message-unescape-string text team) + (let ((attachment-string (mapconcat #'slack-attachment-to-alert attachments " "))) + (slack-message-unescape-string attachment-string team)))))) + +(defmethod slack-message-sender-name ((m slack-bot-message) team) + (slack-bot-name m team)) + +(defmethod slack-message-sender-id ((m slack-bot-message)) + (oref m bot-id)) + +(defun slack-bot-image-url (bot size) + (let ((icons (plist-get bot :icons))) + (cond + ((eq size 36) (plist-get icons :image_36)) + ((eq size 48) (plist-get icons :image_48)) + ((eq size 72) (plist-get icons :image_72)) + (t (plist-get icons :image_36))))) + +(defun slack-bot-fetch-image (bot size team) + (let* ((image-url (slack-bot-image-url bot size)) + (file-path (and image-url (slack-profile-image-path image-url team)))) + (when file-path + (if (file-exists-p file-path) file-path + (slack-url-copy-file image-url file-path)) + file-path))) + +(cl-defun slack-bot-image (bot team &optional (size 36)) + (when bot + (let ((image (slack-bot-fetch-image bot size team))) + (when image + (create-image image nil nil :ascent 80))))) + +(defmethod slack-bot-find ((m slack-bot-message) team) + (or (and (slot-boundp m 'bot-id) + (slack-find-bot (slack-message-sender-id m) team)) + (slack-user-find-by-name (oref m username) team))) + +(defmethod slack-message-profile-image ((m slack-bot-message) team) + (let ((bot (slack-bot-find m team))) + (slack-bot-image bot team))) + +(provide 'slack-bot-message) +;;; slack-bot-message.el ends here |