下記の理由でメッセージの取得をSlackWebAPIからではなく、エクスポートデータから参照する仕様となっています
- メッセージの総数によってはAPIを叩く回数が膨大になるため、できるだけAPIを叩く回数を減らして、移行時間を短縮するため
- メッセージのデータ取得が途中で失敗した場合、一から取得し直さなければいけないAll or Nothingになる手間を無くすため
- メッセージにユーザーID以外のユーザー情報が含まれないため、ユーザー情報を取得するためにAPIを叩く回数が増えるため ※1
※1 conversations.historyのAPIで取得できるメッセージは、ユーザー情報がユーザーIDのみのため、ユーザー名などのユーザー情報を取得するためにはusers.infoのAPIで取得する必要があります
SlackBotはユーザー情報を取得し、メッセージの送信者情報を照合するために使用されています
これはエクスポートデータのusers.jsonのユーザのIDと、メッセージに記載されているユーザーのIDが異なり、
エクスポートデータだけではメッセージの送信者情報が照合できない可能性があるためです
特にBotは雛形となるアプリから生成されるため、ワークスペースにデプロイし直すとBotとしては別扱いとなるのか、新しいIDが振られるようになっています
未確認ですが、ユーザーも解除済みユーザーのアカウントを復活させると、IDが新しく振られる可能性があります
移行のオプション機能として、下記の機能があります
メッセージファイルをビルドする前に、.dist/user.jsonファイルにDiscordのユーザーIDやユーザー名を手動で設定することで機能します
- メッセージ内のメンションなどのユーザ名の変更
- 移行したPrivateチャンネルへのユーザーの自動join
Privateチャンネルの移行は、全てのチャンネルのエクスポートデータから移行した場合のみ可能です
通常のエクスポートデータにはPrivateチャンネルは含まれていないため、Slackに全てのチャンネルと会話のデータエクスポートを申請する必要があります
申請を行うためには、申請者がSlackのビジネスプラス以上のプランかつワークスペースのオーナーの権限である必要があります
Slackは後からPrivate→Publicチャンネルに変更不可となっており、実質的にSlackのプロ以下のプランではPrivateチャンネルのエクスポートはできません
Slackにアップロードできる最大ファイルサイズは最大1GBですが、Discordにアップロードできる最大ファイルサイズは最大100MBで、サーバーブーストレベルに応じて変わります
そのため、Slackのメッセージの添付ファイルのサイズによっては、Discordにアップロードできないファイルが存在する可能性があります
回避策として、Discordのアップロードできる最大ファイルサイズを超える添付ファイルはファイルURLをメッセージに記載し、それ以外のファイルはDiscordにアップロードする仕様となっています
なお、Slackのワークスペースを削除した場合、添付ファイルのファイルURLにアクセスできなくなると思われますので、注意してください
メッセージファイルをビルド時もしくはメッセージをデプロイ時に、メッセージにDiscordにアップロードできる最大ファイルサイズを超える添付ファイルがある場合、下記の警告を出力します
より多くの添付ファイルを移行したい場合は、Discordにアップロードできる最大ファイルサイズの上限を解放するために、サーバーのブーストを検討してください
⚠️ Message has attachments that exceed Discord's maximum file size.
Attachments that exceed Discord's maximum file size will be appended to the message as a file URL.
Consider releasing the maximum file upload size limit with Discord's server boost.
Discordにはチャンネルのアーカイブ機能がないため、アーカイブされたチャンネルはARCHIVEカテゴリーにまとめ、それ以外のチャンネルはCHANNELカテゴリーにまとめる仕様となっています
Discordに表示されるメッセージの形式は下記のようになっています
<画像アイコン> <絵文字アイコン><ユーザー名(Bot名)> <メッセージの投稿時間(HH:mm)>
------------------------------------------------\n
<メッセージ内容>
<メッセージの投稿日時(YYYY/MM/DD HH:mm)>
絵文字アイコンは下記のようにメッセージを送信したSlackユーザーのユーザータイプを示します
| 絵文字アイコン | ユーザータイプ |
|---|---|
| 🟢 | アクティブユーザー |
| 🔵 | 解除済みユーザー |
| 🤖 | Bot |
メッセージは見やすいように、Discordの埋め込みの機能を利用した形となっています
埋め込みのカラーはSlackのユーザーカラーを反映しています
Discordの埋め込み機能の仕様上、添付ファイルと埋め込みを同じメッセージで送信した場合、添付ファイルは埋め込みの上に表示されます
そのため添付ファイルは、埋め込みのメッセージの次に新しいメッセージとして送信することで、埋め込みのメッセージ下に表示させるようにしています
メッセージに含まれるユーザーの画像アイコンは、Discordにユーザー情報を出力するチャンネル#mds-userを作成し、そのチャンネルにユーザーの画像ファイルをアップロードしてURLを参照させる仕様になっています
Slackのユーザーの画像ファイルのURLを参照させるのではなく、Discordのチャンネルにユーザーの画像ファイルをホストさせることで、
Slackに依存せず、何らかの問題でSlackのユーザーの画像ファイルが参照できなくなった場合に、ユーザーの画像アイコンが表示されないなどの問題を回避するためです
チャンネル#mds-userは、Discordの仕様上、CDNにアップロードされたファイルを消えない)ようなので、移行完了後は削除しても問題ありません