[Discord Chat Exporter] Discord のチャットをバックアップするやつ

API調べようと思ったけどこれで全部完結した
Releases · Tyrrrz/DiscordChatExporter (github.com)

なお 定期的に取得したいので バッチ化できる CLI を使う

大前提:トークンを取得する

GUI版に手順の記載がある
要は Web版 Discord を開き、HTTPリクエストのヘッダ部 にある「authorization」の値を使う

よくわからん人は GUI版もダウンロードして手順を参照
英語読めんって人は頑張れ

サーバー一覧の取得

DiscordChatExporter.Cli.exe guilds -t <token>

ID, サーバー名 の順で出てくる
PowerShell のスクリプトなら分割できる

DiscordChatExporter.Cli.exe guilds -t <token> | %{ $_.Split("|")[0].trim() }

IDのみをずらずらと出力する例

チャンネルの取得

DiscordChatExporter.Cli.exe channels -g <サーバーのID> -t <token>

チャンネル一覧が出てくる
ボイスチャンネルも乗る

IDが欲しいときは先述参考

チャット内容のエクスポート

.\DiscordChatExporter.Cli.exe export -c <チャンネルID> -t <token> -o <出力先のファイルパス>

ここでやっと取得できる
ただし、これだけだとテキストしかローカルに保存されない
メディア類も確保したい場合、「–media」をつける

また、同じディレクトリに落とすとき、一度ダウンロードしたものを再ダウンロードするのは無駄なので「–reuse-media」も合わせるとよし

所属している全サーバーの全チャンネルの全チャットをエクスポートするスクリプト

ゲロ遅いし負荷かけると思うので一週間に一回ぐらいに実行するよろし
なお 以下は bat (powershell は自動化する上で管理者実行が面倒なので) だが、同じ理屈で bash などにもできると思う

@echo off
rem ---------------------------------------------------------------------------
rem DiscordChatExporter.cli.exe の実行ファイルへのフルパス
set _PATH_DISCORDEXPORTER="<DiscordChatExporter.Cli.exe へのフルパス>"

rem Token
set _DETOKEN=<トークン>

rem 出力先ファイルパス
set _PATH_OUTPUT=<出力するファイルパスのルート>

rem ---------------------------------------------------------------------------
rem for /f の制約により、必要な処置
setlocal enabledelayedexpansion

rem ---------------------------------------------------------------------------
rem サーバー一覧の取得
%_PATH_DISCORDEXPORTER% guilds -t %_DETOKEN% > temp_slist.txt

rem ---------------------------------------------------------------------------
rem サーバー一覧からチャンネル一覧を取得し、それをすべて追記する
for /f "tokens=1 delims=:|" %%s in (temp_slist.txt) do (

  echo ServerID = %%s を処理中...
  %_PATH_DISCORDEXPORTER% channels -g %%s -t %_DETOKEN% >> temp_clist.txt

)

rem ---------------------------------------------------------------------------
rem チャンネル一覧から IDと名称 両方を取得してアウトプット
for /f "tokens=1,2 delims=:|" %%c in (temp_clist.txt) do (

  echo Channel = %%c %%d を処理中

  rem 出力パスの構成
  set __PATH_OUTPUT="!_PATH_OUTPUT!\%%c_%%d"

  rem ファイルパスとして悪さをしそうなやつを置換する
  set __PATH_OUTPUT=!__PATH_OUTPUT:/=/!
  set __PATH_OUTPUT=!__PATH_OUTPUT:?=?!

  rem Exportを開始する
  %_PATH_DISCORDEXPORTER% export -c %%c -t !_DETOKEN! -o !_PATH_OUTPUT! --media --reuse-media

  rem 後処理
  set __PATH_OUTPUT=
)

rem ---------------------------------------------------------------------------
rem 後処理

del /q temp_clist.txt
del /q temp_slist.txt
set _PATH_DISCORDEXPORTER=
set _DETOKEN=
endlocal

ということをしなくて良いようにコマンドがあります

.\DiscordChatExporter.Cli.exe exportall -t <token> -o <出力先のファイルパス>

for /f の制約とかと戦ってたらこんな便利なコマンドまであって時間が無駄に・・・
こちらにも「–media」「–reuse-media」が使える

せやかて全部は取得していらんとき (サーバーを限定する)

.\DiscordChatExporter.Cli.exe exportguild -g <サーバーID> -t <token> -o <出力先のファイルパス>

こちらも同様に「–media」「–reuse-media」が使える

なのでバックアップを実用するなら、サーバー一覧は取得してIDを調べ、
exportguild を連続して実行するような bat を実行することになるであろう


Discord のバックアップを検討している人はご活用を

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Share via
Copy link