## Using it
1. Do you already have a user token for your workspace? If not, read on below on how to get a token.
2. Make sure you have [`node` and `npm`](https://nodejs.org/en/) installed, ideally something newer than Node v14.
3. Run `slack-archive`, which will interactively guide you through the options.
```sh
npx slack-archive
```
### Parameters
```
--automatic: Don't prompt and automatically fetch all messages from all channels.
--use-previous-channel-config: Fetch messages from channels selected in previous run instead of prompting.
--channel-types Comma-separated list of channel types to fetch messages from.
(public_channel, private_channel, mpim, im)
--exclude-channels Comma-separated list of channels to exclude, in automatic mode
--no-backup: Don't create backups. Not recommended.
--no-search: Don't create a search file, saving disk space.
--no-file-download: Don't download files.
--no-slack-connect: Don't connect to Slack, just generate HTML from local data.
--force-html-generation: Force regeneration of HTML files. Useful after slack-archive upgrades.
```
## Getting a token
In order to download messages from private channels and direct messages, we will need a "user
token". Slack uses the token to identify what permissions it'll give this app. We used to be able
to just copy a token out of your Slack app, but now, we'll need to create a custom app and jump
through a few hoops.
This will be mostly painless, I promise.
### 1) Make a custom app
Head over to https://api.slack.com/apps and `Create New App`. Select `From scratch`.
Give it a name and choose the workspace you'd like to export.
Then, from the `Features` menu on the left, select `OAuth & Permission`.
As a redirect URL, enter something random that doesn't actually exist, or a domain you control. For instace:
```
https://notarealurl.com/
```
(Note that redirects will take a _very_ long time if using a domain that doesn't actually exist)
Then, add the following `User Token Scopes`:
* channels:history
* channels:read
* files:read
* groups:history
* groups:read
* im:history
* im:read
* mpim:history
* mpim:read
* remote_files:read
* users:read
Finally, head back to `Basic Information` and make a note of your app's `client
id` and `client secret`. We'll need both later.
### 2) Authorize
Make sure you have your Slack workspace `URL` (aka team name) and your app's `client id`.
Then, in a browser, open this URL - replacing `{your-team-name}` and `{your-client-id}`
with your values.
```
https://{your-team-name}.slack.com/oauth/authorize?client_id={your-client-id}&scope=client
```
Confirm everything until Slack sends you to the mentioned non-existent URL. Look at your
browser's address bar - it should contain an URL that looks like this:
```
https://notarealurl.com/?code={code}&state=
```
Copy everything between `?code=` and `&state`. This is your `code`. We'll need it in the
next step.
Next, we'll exchange your code for a token. To do so, we'll also need your `client secret`
from the first step when we created your app. In a browser, open this URL - replacing
`{your-team-name}`, `{your-client-id}`, `{your-code}` and `{your-client-secret}` with
your values.
```
https://{your-team-name}.slack.com/api/oauth.access?client_id={your-client-id}&client_secret={your-client-secret}&code={your-code}
```
Your browser should now be returning some JSON including a token. Make a note of it - that's what we'll use. Paste it in the command line, OR create a file called `.token` in the slack-archive directory (created when the command is first run) and paste it in there.
================================================
FILE: bin/slack-archive.js
================================================
#!/usr/bin/env node
import('../lib/cli.js')
================================================
FILE: package.json
================================================
{
"name": "slack-archive",
"version": "1.6.1",
"description": "Create static HTML archives for your Slack workspaces",
"scripts": {
"prettier": "npx prettier --write src/*",
"cli": "ts-node src/cli.ts",
"html": "ts-node src/create-html.tsx",
"test": "echo \"Error: no test specified\" && exit 1",
"compile": "tsc",
"watch": "tsc -w",
"prepublishOnly": "npm run compile"
},
"bin": {
"slack-archive": "./bin/slack-archive.js"
},
"type": "module",
"keywords": [
"slack",
"export",
"download"
],
"repository": {
"type": "git",
"url": "https://github.com/felixrieseberg/slack-archive.git"
},
"author": "Felix Rieseberg Public Channels
Private Channels
DMs
Group DMs
Bots
Archived Public Channels
Archived Private Channels
DMs (Deleted Users)
{channel.topic?.value}