TOP | ブログ一覧へ

Slack の DM を無料でバックアップする [編集]

thumb

2022/07/27
カテゴリ: JavaScript | タグ: 覚書


slack のフリープラン内容が変更されたことにより、90 日以上前のメッセージが9月から全削除されるらしい。

そこで、slack の公式機能を使ってメッセージをバックアップしたわけだけど、DM のバックアップはしてくれないらしい。

というわけで、なんとかして DM のバックアップをやってみた。

メモ的内容なので、ものすごくざっくり書きます。使用もあくまで自己責任で。

必要なもの

やり方

Slack 側の作業

まず Chrome でブラウザ版 Slack を開き、DevTools を開く。

そして、Networkタブを開く。

フィルターの入力欄に「conversations.」と入力。

メッセージを保存したいチャット(DM)を開き、リロードする。

マウスホイールで最初の発言まで上にスクロールしていく。すると、DevTools の画面でログがどんどん貯まっていく。

最後まで取得しきったら、DevTools のダウンロードマークがついた「Export HAR…」ボタンを押し、HAR ファイルを保存する。

Node.js での作業

適当なフォルダを作って、そこに HAR ファイルをコピー。そして以下を実行

npm init -y
npm i fs-extra

convert.js を作成し、以下をコピペ

const fs = require("fs-extra");
const json = fs.readJsonSync("./app.slack.com.har");

const NAME = "result";

const historyApi = json.log.entries.filter((x) =>
  /conversations.history/.test(x.request.url)
);
const viewApi = json.log.entries.filter((x) =>
  /conversations.view/.test(x.request.url)
);

const users = [
  ...new Set(
    viewApi.reduce(
      (p, c) => [...p, ...JSON.parse(c.response.content.text).users],
      []
    )
  ),
];

const history = [
  ...new Set(
    historyApi.reduce(
      (p, c) => [...p, ...JSON.parse(c.response.content.text).messages],
      []
    )
  ),
]
  .map((x) => {
    const user_profile = users.find((u) => x.user === u.id).profile;
    return { ...x, user_profile };
  })
  .reverse();

fs.mkdirpSync(`./${NAME}`);
fs.writeJSONSync(`./${NAME}/1970-01-01.json`, history, { spaces: 2 });
fs.writeJSONSync("./channels.json", [{ name: NAME }], { spaces: 2 });
fs.writeJSONSync("./users.json", users, { spaces: 2 });

あとは node convert を実行すれば、JSON ファイルが出力される。

閲覧方法

SlackLogViewer を使ってください。

thayakawa-gh/SlackLogViewer - GitHub

A viewer for json files exported from Slack workspaces.

見に行く

注意

この方法、スレッド対応してないかも。

この方法は HAR ファイルからデータを抽出しているので、HAR ファイルを大事に保管しておくといいかもしれんです。



TOP | ブログ一覧へ