Скачать лог Discord-чата

Command-line инструмент, чтобы скачать лог Discord-чата

21 Jun 2021


...

Discord – это довольно популярный мессенджер. Википедия: https://en.wikipedia.org/wiki/Discord_(software).

Задача

У Discord (пока?) нет функции “экспортировать лог чата”. А экспортировать историю полезно: для бекапа на случай если модератор удалит канал или сервер; чтобы превратить переписку в заметки и т.п.

Есть сторонний инструмент, чтобы решить эту задачу.

Инструмент-скачиватель

Инструмент живет здесь: https://github.com/Tyrrrz/DiscordChatExporter

Там же есть инструкции по подготовке и использованию. Инструкции длинны, но хороши.

В целом надо сделать:

  • устанить .NET рантайм правильной версии
  • скачать скрипт
  • получить пользовательский токен в Discord (или роботный, но это чуть дольше)
  • найти id Discord-чата
  • запустить скрипт с подходящими параметрами

Я использую CLI-версию, под Linux. Для Windows бывает версия с графическим интрефейсом.

Скрипт может экспортировать лог чата в разных форматах: красивый html, json, просто текст.

Подробно про подготовку

Определить, какая весрсия .NET-рантайма нужна

Посмотреть в Readme: https://github.com/Tyrrrz/DiscordChatExporter, примечание “Requires .NET runtime to be installed manually”.

По состоянию на январь 2022 года была нужна версия 6.

.NET рантайм

Инструкция по ручной установке: https://docs.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#manual-install

Коротко:

Скачать архив со страницы https://dotnet.microsoft.com/en-us/download/dotnet/6.0 (если требуемая версия больше 6 – выбрать соответствующую страницу), раздел .NET Runtime.

Файл называется в духе

Выполнить:

DOTNET_FILE=dotnet-runtime-6.0.1-linux-x64.tar.gz  #здесь подставить имя скачанного файла
export DOTNET_ROOT=$HOME/dotnet
mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT"
export PATH=$PATH:$DOTNET_ROOT

В .bashrc/.zshrc дописать:

PATH=$PATH:$HOME/dotnet
DOTNET_ROOT=$HOME/dotnet

Скачать скрипт

Скачать файл DiscordChatExporter.CLI.zip с github: https://github.com/Tyrrrz/DiscordChatExporter, CLI/stable release.

Распаковать.

Будем использовать DiscordChatExporter.Cli.dll.

Скрипт-обертка

Можно сделать скрипт-обертку и положить куда-нибудь в $PATH.

DiscordChatExporter.sh:

#!/usr/bin/sh

dotnet /full/path/to/DiscordChatExporter.Cli.dll "$@"

Узнать свой пользовательский токен в Discord

Вместо этого можно получить роботный токен, но это чуть дольше.

Работает второй метод из этого видео: https://www.youtube.com/watch?v=WWHZoa0SxCc

Коротко:

  • зайти в Discord в браузере, открыть браузерные Developer Tools, пойти в Network
  • пофильтровать запросы по слову science (используется в discord-овых url-ах)
  • смотреть заголовки запроса
  • в заголовке authorization – пользовательский токен

Узнать id чата

Открыть Discord-чат в браузере, посмотреть url. Большое число – id чата.

Если url почему-то недоступен, открыть Developer Tools, пойти в Console и запросить window.location.href, это будет url.

Примеры использования скрипта

Экспортировать лог чата в умолчальном формате (html), с умолчальным именем файла (скрипт составит его из названия и id чата):

DiscordChatExporter.sh export -t <token> -c <id чата>
# или
dotnet /full/path/to/DiscordChatExporter.Cli.dll export -t <token> -c <id чата>

То же самое, но в виде json:

DiscordChatExporter.sh export -t <token> -c <id чата> -f Json

То же самое, но в виде простого текста:

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText

Простой текст; записать в файл my-file.txt:

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt

То же самое, но с датой-временем в формате yyyy-MM-dd HH:mm:ss (время будет в таймзоне, установленной на локальном компьютере):

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt --dateformat 'yyyy-MM-dd HH:mm:ss'

То же самое, но время будет с указанием таймзоны:

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt --dateformat 'yyyy-MM-dd HH:mm:ss (UTCK)'

То же самое, но время в UTC:

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt --dateformat 'u'

То же самое, но выгрузить только сообщения начиная с 2021-05-30 02:28:14 (время в таймзоне локального компьютера):

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt --dateformat 'u' --after '2021-05-30 02:28:14'

То же самое, но выгрузить сообщения начиная с 2021-05-30 02:28:14 по UTC:

DiscordChatExporter.sh export -t <token> -c <id чата> -f PlainText -o my-file.txt --dateformat 'u' --after '2021-05-30 02:28:14Z'

Готово!

Сообщения лежат в текстовом файле.