自分用メモ:Discord鯖をある程度原型を保ったまま移転させる方法

このたびできる限り既存の状態を保ったまま新鯖に移行する方法に挑戦してみたので、今後同じようなことがあったときのためにメモに残しました。

背景

ある事情で身内に問題が発生しまして、もういっそ新鯖に移行するか!という話になったものの、どうやら本家ではサーバーチャットやロールのインポート/エクスポートには対応していないようす。
鯖は新しくしたい…!でもチャットは俺たちの足跡…消えるのは困る…と悩んだ私は、ネットを徘徊していいとこどりの強欲な方法を探しました。
鯖内での内ゲバはよくある話だと思うんですが、こういった話はよく聞くわりに意外と、というかどこを探しても日本語ではこの手の情報は見つからなかったので、後学のため記しておこうと思います。



やること(2種類あります)

A. ロールやチャンネルも移行させたい人向け

・Discordでの自分のオーソリゼーションキーを取得
・2つのサーバーのサーバーIDを取得
・Githubのアカウント作成
・移行作業
※一歩間違えると既存の鯖が更地になるので気をつけて操作してください。

B. チャットログの移行

・自分でDiscord BOTを新規作成する
・Discord Chat Exporterの導入
・.NET 6.0のダウンロード
・Discord Chat Importerの導入


A. ロールやチャンネルを移行させたい人向け

これは自分のオーソリキーを利用してプログラムからログインし、サーバーのあらゆる情報を移転先サーバーへコピーしてしまう方法です。

ここでコピーできるもの:
・サーバーアイコン
・すべてのチャンネル
 ※チャットログ自体は移行できませんでした。
・ロール(設定していた権限も全く同じです)
・アップロードしていた絵文字

入力する順番を間違えると移転先サーバー情報を既存サーバーに上書きしてすべてが蒸発する可能性があります。また、公式が推奨している方法でもないのですべて自己責任でやってください。
二度手間にはなりますが、失敗しても良いように、A. チャットログだけ移行できたらいい人向けで記載した、Discord Chat Exporterでバックアップを取っておくといいかもしれません。

1.Discordから必要な情報を控えておく

まず、自分のオーソライゼーションキーが必要です。
ブラウザでDiscordにログインしたら、F12キーを押すと画像みたいな画面が出てきます。
Networkタブ→Fetch/XHRにチェック
ここでDiscordのチャット入力画面に1字でいいので打ち込んだら左のフレームに「typing」タブが発生するので押します。
あとはHeader'sタブ→Request Headers→Authorizationを見つけます。
これが自分のアカウントの固有キーで、後ほどこれを使うのでコピーしてメモ帳とかに残しておいてください。
このキーは定期的に変わるっぽいので都度確認したほうが良いと思います。

このキーが人にばれると簡単にログインできちゃうので大事にしてね

もう一つは、①移転先サーバー②既存サーバー 2つのサーバーIDです。
サーバーIDはDiscordの詳細設定から「開発者モード」をONにすることで見られるようになります。
設定を変更したら、①②2つのサーバーアイコンを右クリックしてください。一番下に「サーバーIDをコピー」が追加されているはずです。
どちらのIDもコピーして、どちらがどちらのものかわかるようにメモ帳に残しておいてください。


2.Githubで移行の準備を整える

これから「Github上で、Discordサーバーの移転処理を実行」していきます。
なぜこんな面倒なことをするのかというと、この移転ツールは(たぶん)TypeScript+Pythonの実行環境が必要です。プログラミングをいじってない限り私たち一般人のPCにはそんな環境はもちろんありませんので、クラウド上の仮想環境で実行させてもらう、という感じです。
これがGithubのユーザー登録をしてないとできないっぽいのであらかじめ済ませておいてください。

では、早速準備に入ります。
joaokristani/Discord-Server-Cloner-2x

作成者のGithubの配布ページにアクセスしてCodespaceを起動します。
<>CodeCodespacesタブ+(Creatte a Codespace on main)を選択し、
ワークスペースを作成します。
作成に少し時間がかかるので待っててください。
立ち上がったら準備完了です。

こんな感じの画面が出たらOKです。


3.移転を実行する

いよいよ移転の処理に入っていきます。
左フレームの.envファイルを開くと、「Token=」と記載されています。
ここに、さきにコピーしておいた自分のオーソライゼーションキーを貼り付けます。

貼り付けたら左の▷に虫がひっついてるアイコンを押し、画像の通り進めていきます。

フッターの虫を押したら、ターミナルにこのようなメニューが出てきます。
今回は1「既存サーバーにすべてを移す」を選択しました。

注意:英語版は完全な翻訳がありません。
・既存のサーバーにすべてを移す場合は1
・これからサーバーを作ってすべてを移す場合は2
・これからサーバーを作ってテンプレートを作成しコピーする場合は3
・Tokenの作成者のアカウント情報は5
・サーバーの情報を得たい場合は6(要サーバーID)
・作成者の公式Discordサーバーは7
・(ポルトガル語でよくわかりませんでした)
メニュー番号を押してください。backと打ち込むと戻ります。

最初に「Do you want configure?」と聞かれます。項目の設定をしますか?という意味なので、必要であれば1を押してください。

・一つのチャンネルに対していくつのメッセージをコピーしますか?
・JSONファイルに保存しますか?
・Beautiful JSON?(よくわかりませんでした)
・無視したい(コピーしないで良い)ものは?
 - 絵文字、チャンネル、ロール すべて残すなら空欄でOK
・tickets(おそらくニトロ)を無視しますか?
・デバッグをアクティベートしますか?(何をするかわかりませんでした)

すべて入力し終えると、こんな感じで聞かれます。
・Enter the ID of the server you want to clone:
 - コピーしたいサーバー(既存サーバー)のサーバーID:
・Enter your server ID (Server for which you have an administrator role or ownership):
 - コピー先サーバー(自分が管理権限を持っていることが条件)ID:
それぞれ、先に控えたサーバーIDを入力します。

複製が始まります。しばらく待っていると完了です。



B.チャットだけ移行できたらいい人向け

流れをざっくり書くと、自分のオーソリキーを利用してDiscord Chat Exporterでデータを抽出し、抽出したデータはBOTとDiscord Chat Importer経由で書き込むような感じです。


1.Discord Chat Exporterを導入する

ここ(https://github.com/Tyrrrz/DiscordChatExporter)からDiscord Chat Exporterをダウンロードします。
下にスクロールするとDownloadという見出しがあって、画像のようなあれがあるので自分に合ったやつを落としてください。
私はGUIとCLIの違いはよく分からんのですが、文章によればGUIは見てわかる見た目でCLIはコマンドプロンプトを使うらしいので、GUIのStable release(安定版)をダウンロードしました。

もうこの辺から頭痛い

展開したらDiscordChatExporter.exeをダブルクリックします。
アプリが立ち上がったら、さっきメモしておいたキーをペーストして「→」を押して少し待ちます。

読み込まれたら、抽出したいチャンネルを選択して右下のダウンロードボタン

ダウンロード先を決めたら、JSON形式で「EXPORT」を押します。
新鯖にインポートしたい人は必ずJSON形式を選択してください。
ホームページにやりとりを載せたい人はhtml形式が良いかも。
変換開始から少ししたらアプリの下のほうに完了ポップアップが出ます。

これでエクスポートは完了です。

エクスポートしたファイルは後ほど使うので、dropboxに共有状態でアップロードしておいてください。


2..NET 6をダウンロードする

ここ(https://dotnet.microsoft.com/en-us/download/dotnet/6.0)から自分のPCに合ったやつをダウンロードしてください。
最新版のSDKって書いてあるやつのWindows  x64を入れました。
これも流れに沿ってやればすぐ終わります。

3.BOTを起動させる

BOTでログの書き込みを実行可能にするために、いくつかPC側からの操作が必要です。
まずこちら(https://github.com/Ethorbit/Discord-Chat-Importer/releases)からDiscord Chat Importer実行ソフトをダウンロードしてください。
zipフォルダを展開します。(好きな場所で大丈夫です)
フォルダ内、Discord-Channel-Importer.exeを右クリック→パスのコピー

※Ctrl+Shift+Cでもコピーできます。

コピーしたら、Windowsのスタート画面から「コマンド プロンプト」を
開いて以下の要領で貼り付け、Enterを押します。
Discord-Channel-Importer.exeのパス(半角スペース)さきほどコピーしたOAuthのトークン
成功していれば、Logged In… と記述があります。

4.BOTからチャットログを読み込む

最後に、チャットを移行したいサーバーにBOTが入り、かつコマンドからDiscordにログインした状態で Discordを開きます。
どこでもOKなので、入力欄に以下のコマンドを入れます。(下をそのままコピペしてJSONファイルのURLとチャンネル名だけ変更してください)
!importer import (JSONファイルのURL&RAW=1) #データを入れたいチャンネル名

JSONファイルは先にdropboxに上げておいたエクスポートファイルです。
(Google Driveでも試したのですが、DropboxのURLしか認識されませんでした。)
何らかの不具合があればエラーが、問題なければインポート確認メッセージが出るので☑の方にリアクションを入れます。

エラーが出た方はGoogle Drive、出なかったほうがdropboxです。

チェックボタンを押すと、該当チャンネルにインポートされます。
投稿が完了するまでめっちゃ通知くるので予め切っておいたほうがいいかもしれません。
終わったらコマンドプロンプトは終了して大丈夫です。


まとめ

完全にそっくりそのままというわけにはいきませんが、以上が現状できるDiscordのサーバー移転の方法です。Aの方法はできると書いてあるわりになぜかチャットログがインポートできなかったのですが、なぜなのか私では確認することができませんでした。
ただ、本家では実質インポートができない現在、移転してもある程度以前の形態を保つことができるだけでも大変ありがたいです。
できればもう使う機会がないことを願いますが、もしサーバー移転やチャットログのインポート/エクスポート方法について調べている方がいたらなにかの参考になれば幸いです。
また何かわかりましたら追記しようと思います。



いいなと思ったら応援しよう!