Giter Site home page Giter Site logo

emacs-slack's Introduction

MELPA Build Status

Emacs Slack

GNU Emacs client for Slack.


Preview

You can see some gifs on the wiki.

Dependencies

Configuration

How to get token

;; I'm using use-package and el-get and evil

(el-get-bundle slack)
(use-package slack
  :commands (slack-start)
  :init
  (setq slack-buffer-emojify t) ;; if you want to enable emoji, default nil
  (setq slack-prefer-current-team t)
  :config
  (slack-register-team
   :name "emacs-slack"
   :default t
   :client-id "aaaaaaaaaaa.00000000000"
   :client-secret "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
   :token "xoxs-sssssssssss-88888888888-hhhhhhhhhhh-jjjjjjjjjj"
   :subscribed-channels '(test-rename rrrrr)
   :full-and-display-names t)

  (slack-register-team
   :name "test"
   :client-id "3333333333.77777777777"
   :client-secret "cccccccccccccccccccccccccccccccc"
   :token "xoxs-yyyyyyyyyy-zzzzzzzzzzz-hhhhhhhhhhh-llllllllll"
   :subscribed-channels '(hoge fuga))

  (evil-define-key 'normal slack-info-mode-map
    ",u" 'slack-room-update-messages)
  (evil-define-key 'normal slack-mode-map
    ",c" 'slack-buffer-kill
    ",ra" 'slack-message-add-reaction
    ",rr" 'slack-message-remove-reaction
    ",rs" 'slack-message-show-reaction-users
    ",pl" 'slack-room-pins-list
    ",pa" 'slack-message-pins-add
    ",pr" 'slack-message-pins-remove
    ",mm" 'slack-message-write-another-buffer
    ",me" 'slack-message-edit
    ",md" 'slack-message-delete
    ",u" 'slack-room-update-messages
    ",2" 'slack-message-embed-mention
    ",3" 'slack-message-embed-channel
    "\C-n" 'slack-buffer-goto-next-message
    "\C-p" 'slack-buffer-goto-prev-message)
   (evil-define-key 'normal slack-edit-message-mode-map
    ",k" 'slack-message-cancel-edit
    ",s" 'slack-message-send-from-buffer
    ",2" 'slack-message-embed-mention
    ",3" 'slack-message-embed-channel))

(use-package alert
  :commands (alert)
  :init
  (setq alert-default-style 'notifier))

How to get client ID

  1. Log into the Slack team you're interested in with a web browser
  2. Open DevTools
  3. Open Network tab
  4. Take the _x_id from Query String Parameters

How to get token (the easy way)

1. From Request Payload

  1. Log into the Slack team you're interested in with a web browser
  2. Open DevTools
  3. Open Network tab
  4. Search for (Ctrl-F) "xoxs-" and copy token from Request Payload

2. With a legacy token

  1. Go to "https://api.slack.com/custom-integrations/legacy-tokens".
  2. Create token for the teams you want to have integrate with.

How to get token (the harder yet officially sanctioned way)

1. Get client-id and client-secret

  1. Go to "https://api.slack.com/apps".
  2. Click "Create New App".
  3. Fill "App Name" and "Development Slack Team" and click "Create App".
  4. "Client ID" and "Client Secret" are listed in the "App Credentials" section.

2. Configure Redirect URL

  1. Click "Permissions" in the "Add features and functionality" of "Building Apps for Slack" section.
  2. Fill in the "Redirect URLs" section (slack-emacs defaults to: "http://localhost:8080").
  3. click "Save URLs".

3. Get token

  1. Call slack-register-team with above "Client ID" and "Client Secret" (ignore the "Token" prompt [i.e., just hit enter.]).
  2. Emacs' prompt will display: "Enter the code your browser displayed: ".
  3. Code appears in the browser's address bar like "http://localhost:8080?code=181818181818.1819919191&state=", enter this code in the previous Emacs' prompt.
  4. Once you activate emacs-slack, token appears in the URL like: "https://api.slack.com/apps/{APPID}/oauth".
  5. Save your token and pass it to the slack-register-team function along with the "Client ID" and "Client Secret".

Note

emacs-slack uses websocket to communicate with Slack, and need request to rtm.start method (you can also test your settings in that page's "Tester" tab to make sure things have been configured correctly). this request needs "client" scope when authorize and Slack does not yet have "client" scope in new OAuth scope. make sure slack-oauth2-auth requesting with "client" scope and prevent token migration. token_migration

How to use

I recommend to chat with slackbot for tutorial using slack-im-select.

Some terminology in the slack- functions:

  • im: An IM (instant message) is a direct message between you and exactly one other Slack user.

  • channel: A channel is a Slack channel which you are a member of

  • group. Any chat (direct message or channel) which isn't an IM is a group.

  • slack-register-team

    • set team configuration and create team.
    • :name, :client-id, and :client-secret are needed for arguments
  • slack-change-current-team

    • change slack-current-team var
  • slack-start

    • do authorize and initialize
  • slack-ws-close

    • turn off websocket connection
  • slack-group-select

    • select group from list
  • slack-im-select

    • select direct message from list
  • slack-channel-select

    • select channel from list
  • slack-group-list-update

    • update group list
  • slack-im-list-update

    • update direct message list
  • slack-channel-list-update

    • update channel list
  • slack-message-embed-mention

    • use to mention to user
  • slack-message-embed-channel

    • use to mention to channel
  • slack-file-upload

    • uploads a file
    • the command allows to choose many channels via select loop. In order to finish the loop input an empty string. For helm that's C+RET or M+TET. In case of Ivy it's C+M+j.

Notification

See alert.

emacs-slack's People

Contributors

yuya373 avatar ryuslash avatar event avatar syohex avatar rememberyou avatar malabarba avatar unhammer avatar mschuldt avatar asok avatar jasoncyu avatar justinbarclay avatar turbomack avatar nasa9084 avatar accidentalrebel avatar jkdufair avatar jcazevedo avatar juergenhoetzel avatar mdoza avatar matthew-piziak avatar anaisbetts avatar kidd avatar halcyon avatar tejasbubane avatar yuki-inoue avatar jpablobr avatar supermomonga avatar

Watchers

Kushal Kumaran avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.