「Slack データをエクスポート」
https://qiita.com/nanbuwks/items/f400db5f5974c4958f55
にて、以下のように書きました。
- コミュニティの昔の ML(メーリングリスト) ベースのコミュニケーションのように、ログをオープンにできないか
- 公開して Google でヒットするようにしたい
- 集合知を公開し再利用できるようにしたい
- 同じ興味のある人間のコミュニティへの参加導線にしたい
その後、コミュニティのコミュニケーションチャンネルとして Slack をやめて Discord を使うようにしました。
そのために、Discord サーバのログを取得して HTML にするのをチャレンジ。
使用するツール
DiscordChatExporter を使います。
https://github.com/Tyrrrz/DiscordChatExporter
ライセンス
フリーソフトだけど、オープンソースライセンスとは異なる利用条件が必要。
Terms of use[?]
By using this project or its source code, for any purpose and in any shape or form, you grant your implicit agreement to all the following statements:You condemn Russia and its military aggression against Ukraine
You recognize that Russia is an occupant that unlawfully invaded a sovereign state
You support Ukraine's territorial integrity, including its claims over temporarily occupied territories of Crimea and Donbas
You reject false narratives perpetuated by Russian state propaganda
To learn more about the war and how you can help, click here. Glory to Ukraine!
cf., 「The Open Source Definition | Open Source Initiative」 https://opensource.org/osd
環境
今回 Linux を使います。
- Ubuntu 22.04 LTS
- DiscordChatExporter Release 2.37.1
下準備
DiscordChatExporter は .NET 7.0 を使います。
Linux でも、.NET 7.0 Runtime が必要です。
「Install .NET on Ubuntu - .NET | Microsoft Learn」
https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu
によると、
.NET 7はUbuntu フィードに含まれていないため、 22.04 Microsoft パッケージ フィードを使用する必要があります。
とのことで、このページにある手順から以下のようにインストールしました。
$ wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update
$ sudo apt-get install -y dotnet-runtime-7.0
DiscordChatExporter
ダウンロード
https://github.com/Tyrrrz/DiscordChatExporter/releases/tag/2.37.1
こちらから DiscordChatExporter.Cli.zip
をダウンロードします。
$ mkdir DiscordChatExporter.cli
$ mv DiscordChatExporter.Cli.zip DisDiscordChatExporter.cli
$ cd DiscordChatExporter.cli
$ unzip DiscordChatExporter.Cli.zip
$ ls -og
合計 3352
---------- 1 10240 1月 10 21:00 AdvancedStringBuilder.dll
---------- 1 105472 1月 10 21:00 CliFx.dll
---------- 1 6675 1月 10 21:00 DiscordChatExporter.Cli.deps.json
---------- 1 95744 1月 10 21:00 DiscordChatExporter.Cli.dll
---------- 1 111104 1月 10 21:00 DiscordChatExporter.Cli.exe
---------- 1 460 1月 10 21:00 DiscordChatExporter.Cli.exe.config
---------- 1 17960 1月 10 21:00 DiscordChatExporter.Cli.pdb
---------- 1 253 1月 10 21:00 DiscordChatExporter.Cli.runtimeconfig.json
-rw-rw-r-- 1 920601 1月 14 16:24 DiscordChatExporter.Cli.zip
---------- 1 755200 1月 10 21:00 DiscordChatExporter.Core.dll
---------- 1 82744 1月 10 21:00 DiscordChatExporter.Core.pdb
---------- 1 41472 1月 10 21:00 Gress.dll
---------- 1 31232 1月 10 21:00 JsonExtensions.dll
---------- 1 275456 1月 10 21:00 Polly.dll
---------- 1 24576 1月 10 21:00 RazorBlade.dll
---------- 1 668160 1月 10 21:00 Spectre.Console.dll
---------- 1 91648 1月 10 21:00 Superpower.dll
---------- 1 150016 1月 10 21:00 WebMarkupMin.Core.dll
この中に入っている dll を dotnet コマンドで動かします。
$ dotnet DiscordChatExporter.Cli.dll
Cannot use file stream for [/home/nanbuwks/Downloads/DiscordChatExporter.cli/DiscordChatExporter.Cli.runtimeconfig.json]: Permission denied
Invalid runtimeconfig.json
[/home/nanbuwks/Downloads/DiscordChatExporter.cli/DiscordChatExporter.Cli.runtimeconfig.json] [/home/nanbuwks/Downloads/DiscordChatExporter.cli/DiscordChatExporter.Cli.runtimeconfig.dev.json]
おや。よく見たら先程のファイルのパーミッションが 000 になってますね。
$ chmod 644 *
とすると動きました。
$ dotnet DiscordChatExporter.Cli.dll
DiscordChatExporter.Cli v2.37.1
USAGE
dotnet DiscordChatExporter.Cli.dll [options]
dotnet DiscordChatExporter.Cli.dll [command] [...]
OPTIONS
-h|--help Shows help text.
--version Shows version information.
COMMANDS
exportall Export all accessible channels.
export Export one or multiple channels.
exportdm Export all direct message channels.
exportguild Export all channels within specified guild.
channels Get the list of channels in a guild.
dm Get the list of direct message channels.
guilds Get the list of accessible guilds.
guide Explains how to obtain token, guild or channel ID.
You can run `dotnet DiscordChatExporter.Cli.dll [command] --help` to show help on a specific command.
トークンの取得
Web ブラウザから、ログを取得したいサーバとチャンネルを開きます。
デベロッパーツールを開き、「Application」→「LocalStorage」-「https:discordapp.com」の「token」の値をコピーします。
また、「Sources」→「channels/・・・」-「xxx」の属性名をコピーします。画像では99729349538... と見えている属性名です。
$ dotnet DiscordChatExporter.Cli.dll export --channel <属性名> --token <token> -f "HtmlDark" -o test
とすると、以下のように動作して test ディレクトリに HTML が保存されます。
┌────────────────────────────────────────────────────────────────────┐
│ Thank you for supporting Ukraine <3 │
│ │
│ As Russia wages a genocidal war against my country, │
│ I'm grateful to everyone who continues to │
│ stand with Ukraine in our fight for freedom. │
│ │
│ Learn more: https://tyrrrz.me/ukraine │
└────────────────────────────────────────────────────────────────────┘
Exporting 1 channel(s)...
テキストチャンネル / 雑談 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
Successfully exported 1 channel(s).
$ ls -og test
合計 392
-rw-rw-r-- 1 400981 1月 14 16:45 'OpenHardTerrace - テキストチャンネル - 雑談 [997293495687585839].html'
できた html をWebブラウザで開くとこのように表示されます。
添付画像も表示されてますね。このイメージファイルはどこにあるのかな?
$ tail -og test/OpenHardTerrace\ -\ テキストチャンネル\ -\ 雑談\ \[997293495687585839\].html
tail: 無効なオプション -- 'o'
Try 'tail --help' for more information.
nanbuwks@nanbuwks-B550M-S2H:~/Downloads/DiscordChatExporter.cli$ tail test/OpenHardTerrace\ -\ テキストチャンネル\ -\ 雑談\ \[997293495687585839\].html
・外出先からNASを利用するシーンが全くない</span> <span class=chatlog__edited-timestamp title="14-Jan-23 02:24 AM">(edited)</span></div></div></div></div></div>
<div class=chatlog__message-group><div id=chatlog__message-container-1063711606959255585 class=chatlog__message-container data-message-id=1063711606959255585><div class=chatlog__message><div class=chatlog__message-aside><img class=chatlog__avatar src=https://cdn.discordapp.com/embed/avatars/3.png alt=Avatar loading=lazy></div><div class=chatlog__message-primary><div class=chatlog__header><span class=chatlog__author title=K_Ohe#9273 data-user-id=858266041251397633>K_Ohe</span> <span class=chatlog__timestamp><a href=#chatlog__message-container-1063711606959255585>14-Jan-23 03:50 PM</a></span></div><div class="chatlog__content chatlog__markdown"><span class=chatlog__markdown-preserve>ESP32のボードがAliから1週間で届きました。
1.9inch、3.5inch、4.3inchのLCDがついていて、1100円、2100円、3100円ぐらいです。
3.5inchと4.3inchのは静電容量のタッチパネルがついています。
1.9inchと4.3inchのは最新のESP32-S3が乗っていますが、4.3inchの方は技適マークなしでした。
これは秋月で売っている技適マークなし+技適シールと同じ製造番号のものが使われているので実質的には技適ありなんですが、個人的にはOKですが、うるさい人がいそうなので、あまりおすすめできないですね。
これから使ってみます。</span></div><div class=chatlog__attachment><a href=https://cdn.discordapp.com/attachments/997293495687585839/1063711605734522990/IMG_3172.JPG> <img class=chatlog__attachment-media src=https://cdn.discordapp.com/attachments/997293495687585839/1063711605734522990/IMG_3172.JPG alt="Image attachment" title="Image: IMG_3172.JPG (4.33 MB)" loading=lazy> </a></div><div class=chatlog__attachment><a href=https://cdn.discordapp.com/attachments/997293495687585839/1063711606351085578/IMG_3173.JPG> <img class=chatlog__attachment-media src=https://cdn.discordapp.com/attachments/997293495687585839/1063711606351085578/IMG_3173.JPG alt="Image attachment" title="Image: IMG_3173.JPG (3.34 MB)" loading=lazy> </a></div><div class=chatlog__attachment><a href=https://cdn.discordapp.com/attachments/997293495687585839/1063711606850191391/IMG_3174.JPG> <img class=chatlog__attachment-media src=https://cdn.discordapp.com/attachments/997293495687585839/1063711606850191391/IMG_3174.JPG alt="Image attachment" title="Image: IMG_3174.JPG (2.65 MB)" loading=lazy> </a></div></div></div></div></div>
</div>
<div class=postamble><div class=postamble__entry>Exported 315 message(s)</div></div>
なるほど、
https://cdn.discordapp.com/attachments/997293495687585839/1063711606850191391/IMG_3174.JPG
を開くと
イメージが出てきます。
画像ファイルを手元においておきたい場合は Wget などを使うと良さそうですね。
公開する
Google Sites にコミュニティのページがありました。放置状態だったけど、これを再利用しようかな?
Discord 用の新たなページを作って公開してみました。新規ページに「埋め込む」を貼り付けます。
先に作られた html を貼り付けます。
ログがインターネットに公開されるようになりました。
問題点:
ログの画像が一気に読み込まれてしまいます。
月ごとのスレッド分けをしたりする工夫が必要でしょう。今後の課題です。