slack のフリープラン内容が変更されたことにより、90 日以上前のメッセージが9月から全削除されるらしい。
そこで、slack の公式機能を使ってメッセージをバックアップしたわけだけど、DM のバックアップはしてくれないらしい。
というわけで、なんとかして DM のバックアップをやってみた。
メモ的内容なので、ものすごくざっくり書きます。使用もあくまで自己責任で。
まず Chrome でブラウザ版 Slack を開き、DevTools を開く。
そして、Networkタブを開く。
フィルターの入力欄に「conversations.」と入力。
メッセージを保存したいチャット(DM)を開き、リロードする。
マウスホイールで最初の発言まで上にスクロールしていく。すると、DevTools の画面でログがどんどん貯まっていく。
最後まで取得しきったら、DevTools のダウンロードマークがついた「Export HAR…」ボタンを押し、HAR ファイルを保存する。
適当なフォルダを作って、そこに 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 を使ってください。
この方法、スレッド対応してないかも。
この方法は HAR ファイルからデータを抽出しているので、HAR ファイルを大事に保管しておくといいかもしれんです。