Make the GUI x-platform and adapt the CI/CD pipeline to accommodate that (#1222)

This commit is contained in:
Oleksii Holub 2024-04-28 02:24:23 +03:00 committed by GitHub
parent b9c1c47474
commit 8525917a4c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 115 additions and 229 deletions

View file

@ -10,7 +10,7 @@ Docker distribution of DiscordChatExporter provides a way to run the app in a vi
This will download the [Docker image from the registry](https://hub.docker.com/r/tyrrrz/discordchatexporter) to your computer. You can run this command again to update when a new version is released. This will download the [Docker image from the registry](https://hub.docker.com/r/tyrrrz/discordchatexporter) to your computer. You can run this command again to update when a new version is released.
```console ```console
docker pull tyrrrz/discordchatexporter:stable $ docker pull tyrrrz/discordchatexporter:stable
``` ```
Note the `:stable` tag. DiscordChatExporter images are tagged according to the following patterns: Note the `:stable` tag. DiscordChatExporter images are tagged according to the following patterns:
@ -26,19 +26,19 @@ You can see all available tags [here](https://hub.docker.com/r/tyrrrz/discordcha
To run the CLI in Docker and render help text: To run the CLI in Docker and render help text:
```console ```console
docker run --rm tyrrrz/discordchatexporter:stable $ docker run --rm tyrrrz/discordchatexporter:stable
``` ```
To export a channel: To export a channel:
```console ```console
docker run --rm -v /path/on/machine:/out tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID $ docker run --rm -v /path/on/machine:/out tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID
``` ```
If you want colored output and real-time progress reporting, pass the `-it` (interactive + pseudo-terminal) option: If you want colored output and real-time progress reporting, pass the `-it` (interactive + pseudo-terminal) option:
```console ```console
docker run --rm -it -v /path/on/machine:/out tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID $ docker run --rm -it -v /path/on/machine:/out tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID
``` ```
The `-v /path/on/machine:/out` option instructs Docker to bind the `/out` directory inside the container to a path on your host machine. Replace `/path/on/machine` with the directory you want the files to be saved at. The `-v /path/on/machine:/out` option instructs Docker to bind the `/out` directory inside the container to a path on your host machine. Replace `/path/on/machine` with the directory you want the files to be saved at.
@ -47,7 +47,7 @@ The `-v /path/on/machine:/out` option instructs Docker to bind the `/out` direct
> If you are running SELinux, you will need to add the `:z` option after `/out`, e.g.: > If you are running SELinux, you will need to add the `:z` option after `/out`, e.g.:
> >
> ```console > ```console
> docker run --rm -v /path/on/machine:/out:z tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID > $ docker run --rm -v /path/on/machine:/out:z tyrrrz/discordchatexporter:stable export -t TOKEN -c CHANNELID
> ``` > ```
> >
> For more information, refer to the [Docker docs SELinux labels for bind mounts page](https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label). > For more information, refer to the [Docker docs SELinux labels for bind mounts page](https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label).
@ -68,8 +68,8 @@ This image was designed with a user running as uid:gid of 1000:1000.
If your current user has different IDs, and you want to generate files directly editable for your user, you might want to run the container like this: If your current user has different IDs, and you want to generate files directly editable for your user, you might want to run the container like this:
```console ```console
mkdir data # or chown -R $(id -u):$(id -g) data $ mkdir data # or chown -R $(id -u):$(id -g) data
docker run -it --rm -v $PWD/data:/out --user $(id -u):$(id -g) tyrrrz/discordchatexporter:stable export -t TOKEN -g CHANNELID $ docker run -it --rm -v $PWD/data:/out --user $(id -u):$(id -g) tyrrrz/discordchatexporter:stable export -t TOKEN -g CHANNELID
``` ```
## Environment variables ## Environment variables

View file

@ -43,12 +43,8 @@ For other distros, please check the _'Install on Linux'_ menu on the left of [th
You can check which version of **.NET Runtime** is installed by running the following command in a terminal: You can check which version of **.NET Runtime** is installed by running the following command in a terminal:
```console ```console
dotnet --info $ dotnet --info
```
If the **.NET Runtime** is correctly installed, the command will output something similar to the following:
```console
.NET runtimes installed: .NET runtimes installed:
Microsoft.NETCore.App 7.0.x [C:\path\to\dotnet\shared\Microsoft.NETCore.App] Microsoft.NETCore.App 7.0.x [C:\path\to\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 7.0.x [C:\path\to\dotnet\shared\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 7.0.x [C:\path\to\dotnet\shared\Microsoft.WindowsDesktop.App]

View file

@ -15,12 +15,9 @@ The information presented on this page is valid for **all** platforms.
**DCE** has two different versions: **DCE** has two different versions:
- **Graphical User Interface** (**GUI**) - it's the preferred version for newcomers as it is easy to use. - **Graphical User Interface** (**GUI**) - it's the preferred version for newcomers as it is easy to use.
You can get it by [downloading](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) the `DiscordChatExporter.zip` file. You can get it by [downloading](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) the `DiscordChatExporter.*.zip` file.
- **Command-line Interface** (**CLI**) - offers greater flexibility and more features for advanced users, such as export scheduling, ID lists, and more specific date ranges. - **Command-line Interface** (**CLI**) - offers greater flexibility and more features for advanced users, such as export scheduling, ID lists, and more specific date ranges.
You can get it by [downloading](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) the `DiscordChatExporter.CLI.zip` file. You can get it by [downloading](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) the `DiscordChatExporter.Cli.*.zip` file.
If you're not comfortable with **Windows'** Command-line (cmd), please choose the GUI.
[**macOS**](MacOS.md), [**Linux**](Linux.md) and [**Docker**](Docker.md) users can only use the CLI version.
There are dedicated guides for each version: There are dedicated guides for each version:

View file

@ -1,32 +0,0 @@
# Linux usage instructions
## Installing .NET Runtime
Please follow the [instructions provided here](Dotnet.md).
## Downloading and using DiscordChatExporter.Cli
1. Download [DiscordChatExporter.CLI.zip](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) and extract it to a folder.
2. Open Terminal.
3. Change the working directory into the extracted folder. You can do this in Terminal by typing `cd`, then press the SPACE key, drag and drop the extracted folder into the Terminal window, and press the ENTER key.
4. Replace `TOKEN` and `CHANNEL`, then execute this command to export:
```console
./DiscordChatExporter.Cli.sh export -t TOKEN -c CHANNEL
```
If the above command throws a "Permission denied" error, use `chmod` to fix the permissions:
```console
chmod +x DiscordChatExporter.Cli.sh
```
Alternatively, if the script doesn't work, you can run the following command to run the application directly:
```console
dotnet DiscordChatExporter.Cli.dll export -t TOKEN -c CHANNEL
```
> [How to get Token and Channel IDs](Token-and-IDs.md).
There's much more you can do with DCE.CLI! Read the [CLI explained](Using-the-CLI.md) page to get started.

View file

@ -1,34 +0,0 @@
# macOS usage instructions
![Might look different depending on your macOS version](https://i.imgur.com/gA8jFjJ.png)
## Installing .NET Runtime
Please follow the [instructions provided here](Dotnet.md).
## Downloading and using DiscordChatExporter.Cli
1. Download [DiscordChatExporter.CLI.zip](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest) and extract it to a folder.
2. Search for `Terminal.app` in Spotlight (⌘+SPACE), then open it.
3. In the Terminal window, type `cd` , press the SPACE key, then drag and drop the extracted folder into the window, then press the RETURN key.
4. Execute the following command to export, replacing `TOKEN` and `CHANNEL` with your own values:
```console
./DiscordChatExporter.Cli.sh export -t TOKEN -c CHANNEL
```
If the above command throws a "Permission denied" error, use `chmod` to fix the permissions:
```console
chmod +x DiscordChatExporter.Cli.sh
```
Alternatively, if the script doesn't work, you can run the following command to run the application directly:
```console
dotnet DiscordChatExporter.Cli.dll export -t TOKEN -c CHANNEL
```
> [How to get Token and Channel IDs](Token-and-IDs.md).
There's much more you can do with DCE.CLI! Read the [CLI explained](Using-the-CLI.md) page to get started.

View file

@ -89,17 +89,17 @@ from:96\-LB
In most cases, you will need to enclose your filter in quotes (`"`) to escape characters that may have special meaning in your shell: In most cases, you will need to enclose your filter in quotes (`"`) to escape characters that may have special meaning in your shell:
```console ```console
DiscordChatExporter.Cli export [...] --filter "from:Tyrrrz has:image" $ ./DiscordChatExporter.Cli export [...] --filter "from:Tyrrrz has:image"
``` ```
If you need to include quotes inside the filter itself as well, use single quotes (`'`) for those instead: If you need to include quotes inside the filter itself as well, use single quotes (`'`) for those instead:
```console ```console
DiscordChatExporter.Cli export [...] --filter "from:Tyrrrz 'hello world'" $ ./DiscordChatExporter.Cli export [...] --filter "from:Tyrrrz 'hello world'"
``` ```
Additionally, negated filters (those that start with `-`) may cause parsing issues even when enclosed in quotes. To avoid this, use the tilde (`~`) character instead of the dash (`-`): Additionally, negated filters (those that start with `-`) may cause parsing issues even when enclosed in quotes. To avoid this, use the tilde (`~`) character instead of the dash (`-`):
```console ```console
DiscordChatExporter.Cli export [...] --filter ~from:Tyrrrz $ ./DiscordChatExporter.Cli export [...] --filter ~from:Tyrrrz
``` ```

View file

@ -2,8 +2,7 @@
## Installation & Usage ## Installation & Usage
- [Get .NET Core Runtime](Dotnet.md) (Required for CLI; Installed automatically for GUI; Not required in Docker) - [Get .NET Runtime](Dotnet.md)
- [Windows](Getting-started.md#gui-or-cli) | [macOS](MacOS.md) | [Linux](Linux.md) | [Docker](Docker.md)
- Getting started: - Getting started:
- [Using the GUI](Using-the-GUI.md) - [Using the GUI](Using-the-GUI.md)
- [Using the CLI](Using-the-CLI.md) - [Using the CLI](Using-the-CLI.md)

View file

@ -1,6 +1,6 @@
# Scheduling exports with Cron # Scheduling exports with Cron
Make sure you already have **DiscordChatExporter.CLI** and **.NET Core** properly installed ([instructions here](Linux.md)). Make sure you already have **DiscordChatExporter.CLI** downloaded and **.NET Runtime** installed.
## Creating the script ## Creating the script
@ -45,7 +45,7 @@ fi
cd $DLLFOLDER || exit 1 cd $DLLFOLDER || exit 1
# This will export your chat # This will export your chat
dotnet DiscordChatExporter.Cli.dll export -t $TOKEN -c $CHANNELID -f $EXPORTFORMAT -o $FILENAME.tmp ./DiscordChatExporter.Cli export -t $TOKEN -c $CHANNELID -f $EXPORTFORMAT -o $FILENAME.tmp
# This sets the current time to a variable # This sets the current time to a variable
CURRENTTIME=$(date +"%Y-%m-%d-%H-%M-%S") CURRENTTIME=$(date +"%Y-%m-%d-%H-%M-%S")

View file

@ -1,8 +1,6 @@
# Scheduling exports on macOS # Scheduling exports on macOS
Scheduling on macOS is a bit tricky, but it should work if you follow the instructions accordingly. Make sure you already have **DiscordChatExporter.CLI** downloaded and **.NET Runtime** installed.
Make sure you already have **DiscordChatExporter.CLI** and **.NET Core** properly installed ([instructions here](MacOS.md)).
## Creating the script ## Creating the script
@ -51,7 +49,7 @@ fi
cd $DLLFOLDER || exit 1 cd $DLLFOLDER || exit 1
# This will export your chat # This will export your chat
dotnet DiscordChatExporter.Cli.dll export -t $TOKEN -c $CHANNELID -f $EXPORTFORMAT -o $FILENAME.tmp ./DiscordChatExporter.Cli export -t $TOKEN -c $CHANNELID -f $EXPORTFORMAT -o $FILENAME.tmp
# This sets the current time to a variable # This sets the current time to a variable
CURRENTTIME=$(date +"%Y-%m-%d-%H-%M-%S") CURRENTTIME=$(date +"%Y-%m-%d-%H-%M-%S")

View file

@ -1,6 +1,7 @@
# Scheduling exports on Windows # Scheduling exports on Windows
We'll be using [DiscordChatExporter CLI](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest), PowerShell, and Task Scheduler. We'll be using [DiscordChatExporter CLI](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest), PowerShell, and Task Scheduler.
Make sure you already have **DiscordChatExporter.CLI** downloaded and **.NET Runtime** installed.
## Creating the script ## Creating the script
@ -19,7 +20,7 @@ $EXPORTFORMAT = "formathere"
cd $EXEPATH cd $EXEPATH
.\DiscordChatExporter.Cli.exe export -t $TOKEN -c $CHANNEL -f $EXPORTFORMAT -o "$FILENAME.tmp" ./DiscordChatExporter.Cli export -t $TOKEN -c $CHANNEL -f $EXPORTFORMAT -o "$FILENAME.tmp"
$Date = Get-Date -Format "yyyy-MM-dd-HH-mm" $Date = Get-Date -Format "yyyy-MM-dd-HH-mm"

View file

@ -25,7 +25,7 @@ Prerequisite step: Navigate to [discord.com](https://discord.com) and login.
3. Type 3. Type
```console ```js
(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken() (webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken()
``` ```
@ -118,7 +118,7 @@ Prerequisite step: Navigate to [discord.com](https://discord.com) and login.
1. Type 1. Type
```console ```js
(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken() (webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken()
``` ```

View file

@ -70,14 +70,7 @@ Check the following page: [Obtaining token](Token-and-IDs.md)
### When I open DCE a black window pops up quickly or nothing shows up ### When I open DCE a black window pops up quickly or nothing shows up
If you have [.NET Core Runtime correctly installed](Dotnet.md), you might have downloaded the CLi flavor, try [downloading the GUI](Getting-started.md#gui-or-cli) instead. If you have [.NET Runtime correctly installed](Dotnet.md), you might have downloaded the CLI flavor, try [downloading the GUI](Getting-started.md#gui-or-cli) instead.
### How do I run DCE on macOS or Linux?
Check the following pages:
- [macOS usage instructions](MacOS.md)
- [Linux usage instructions](Linux.md)
### How can I set DCE to export automatically at certain times? ### How can I set DCE to export automatically at certain times?
@ -133,34 +126,26 @@ Make sure you're [copying the DM Channel ID](Token-and-IDs.md#how-to-get-a-direc
## Errors ## Errors
```console ```yml
DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Authentication token is invalid. DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Authentication token is invalid.
...
``` ```
↳ Make sure the provided token is correct. ↳ Make sure the provided token is correct.
```console ```yml
DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Requested resource does not exist. DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Requested resource does not exist.
``` ```
↳ Check your channel ID, it might be invalid. [Read this if you need help](Token-and-IDs.md). ↳ Check your channel ID, it might be invalid. [Read this if you need help](Token-and-IDs.md).
```console ```yml
DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Access is forbidden. DiscordChatExporter.Domain.Exceptions.DiscordChatExporterException: Access is forbidden.
``` ```
↳ This means you don't have access to the channel. ↳ This means you don't have access to the channel.
```console ```yml
The application to execute does not exist:
```
↳ The `DiscordChatExporter.Cli.dll` file is missing. Keep the `.exe` and all the `.dll` files together. If you didn't move the files, try unzipping again.
```console
System.Net.WebException: Error: TrustFailure ... Invalid certificate received from server. System.Net.WebException: Error: TrustFailure ... Invalid certificate received from server.
...
``` ```
↳ Try running cert-sync. ↳ Try running cert-sync.

View file

@ -28,22 +28,10 @@ You can also drag and drop the folder on **every platform**.
Now we're ready to run the commands. The examples on this page follow the Windows file path format, change the file Now we're ready to run the commands. The examples on this page follow the Windows file path format, change the file
paths according to your system. paths according to your system.
On **Windows**, type the following command in your terminal of choice, then press ENTER to run it. This will list all available subcommands and options. Type the following command in your terminal of choice, then press ENTER to run it. This will list all available subcommands and options.
```console ```console
DiscordChatExporter.Cli.exe $ ./DiscordChatExporter.Cli
```
On **macOS** and **Linux**, run the following instead:
```console
./DiscordChatExporter.Cli.sh
```
If either of the above approaches don't work for you, you can also run **DiscordChatExporter** directly like this, regardless of the platform:
```console
dotnet DiscordChatExporter.Cli.dll
``` ```
> **Docker** users, please refer to the [Docker usage instructions](Docker.md). > **Docker** users, please refer to the [Docker usage instructions](Docker.md).
@ -61,18 +49,18 @@ dotnet DiscordChatExporter.Cli.dll
| guilds | Outputs the list of accessible servers | | guilds | Outputs the list of accessible servers |
| guide | Explains how to obtain token, server, and channel ID | | guide | Explains how to obtain token, server, and channel ID |
To use the commands, you'll need a token. For the instructions on how to get a token, please refer to [this page](Token-and-IDs.md), or run `dotnet DiscordChatExporter.Cli.dll guide`. To use the commands, you'll need a token. For the instructions on how to get a token, please refer to [this page](Token-and-IDs.md), or run `./DiscordChatExporter.Cli guide`.
To get help with a specific command, run: To get help with a specific command, run:
```console ```console
dotnet DiscordChatExporter.Cli.dll command --help $ ./DiscordChatExporter.Cli command --help
``` ```
For example, to figure out how to use the `export` command, run: For example, to figure out how to use the `export` command, run:
```console ```console
dotnet DiscordChatExporter.Cli.dll export --help $ ./DiscordChatExporter.Cli export --help
``` ```
## Export a specific channel ## Export a specific channel
@ -80,7 +68,7 @@ dotnet DiscordChatExporter.Cli.dll export --help
You can quickly export with DCE's default settings by using just `-t token` and `-c channelid`. You can quickly export with DCE's default settings by using just `-t token` and `-c channelid`.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555
``` ```
#### Changing the format #### Changing the format
@ -89,7 +77,7 @@ You can change the export format to `HtmlDark`, `HtmlLight`, `PlainText` `Json`
format is `HtmlDark`. format is `HtmlDark`.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -f Json $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -f Json
``` ```
#### Changing the output filename #### Changing the output filename
@ -97,7 +85,7 @@ dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -f Json
You can change the filename by using `-o name.ext`. e.g. for the `HTML` format: You can change the filename by using `-o name.ext`. e.g. for the `HTML` format:
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -o myserver.html $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -o myserver.html
``` ```
#### Changing the output directory #### Changing the output directory
@ -107,7 +95,7 @@ extension.
If any of the folders in the path have a space in its name, escape them with quotes ("). If any of the folders in the path have a space in its name, escape them with quotes (").
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports"
``` ```
#### Changing the filename and output directory #### Changing the filename and output directory
@ -117,7 +105,7 @@ Note that the filename must have an extension, otherwise it will be considered a
If any of the folders in the path have a space in its name, escape them with quotes ("). If any of the folders in the path have a space in its name, escape them with quotes (").
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports\myserver.html" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports\myserver.html"
``` ```
#### Generating the filename and output directory dynamically #### Generating the filename and output directory dynamically
@ -125,7 +113,7 @@ dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -o "C:\Discord
You can use template tokens to generate the output file path based on the server and channel metadata. You can use template tokens to generate the output file path based on the server and channel metadata.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports\%G\%T\%C.html" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -o "C:\Discord Exports\%G\%T\%C.html"
``` ```
Assuming you are exporting a channel named `"my-channel"` in the `"Text channels"` category from a server Assuming you are exporting a channel named `"my-channel"` in the `"Text channels"` category from a server
@ -152,13 +140,13 @@ You can use partitioning to split files after a given number of messages or file
For example, a channel with 36 messages set to be partitioned every 10 messages will output 4 files. For example, a channel with 36 messages set to be partitioned every 10 messages will output 4 files.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -p 10 $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -p 10
``` ```
A 45 MB channel set to be partitioned every 20 MB will output 3 files. A 45 MB channel set to be partitioned every 20 MB will output 3 files.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 -p 20mb $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 -p 20mb
``` ```
#### Downloading assets #### Downloading assets
@ -169,7 +157,7 @@ downloaded when using the plain text (TXT) export format.
A folder containing the assets will be created along with the exported chat. They must be kept together. A folder containing the assets will be created along with the exported chat. They must be kept together.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --media $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --media
``` ```
#### Reusing assets #### Reusing assets
@ -178,7 +166,7 @@ Previously downloaded assets can be reused to skip redundant downloads as long a
same folder. Using this option can speed up future exports. This option requires the `--media` option. same folder. Using this option can speed up future exports. This option requires the `--media` option.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --media --reuse-media $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --media --reuse-media
``` ```
#### Changing the media directory #### Changing the media directory
@ -187,7 +175,7 @@ By default, the media directory is created alongside the exported chat. You can
providing a path that ends with a slash. All of the exported media will be stored in this directory. providing a path that ends with a slash. All of the exported media will be stored in this directory.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --media --media-dir "C:\Discord Media" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --media --media-dir "C:\Discord Media"
``` ```
#### Changing the date format #### Changing the date format
@ -196,7 +184,7 @@ You can customize how dates are formatted in the exported files by using `--loca
locales. The default locale is `en-US`. locales. The default locale is `en-US`.
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --locale "de-DE" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --locale "de-DE"
``` ```
#### Date ranges #### Date ranges
@ -205,14 +193,14 @@ dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --locale "de-DE
Use `--before` to export messages sent before the provided date. E.g. messages sent before September 18th, 2019: Use `--before` to export messages sent before the provided date. E.g. messages sent before September 18th, 2019:
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --before 2019-09-18 $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --before 2019-09-18
``` ```
**Messages sent after a date** **Messages sent after a date**
Use `--after` to export messages sent after the provided date. E.g. messages sent after September 17th, 2019 11:34 PM: Use `--after` to export messages sent after the provided date. E.g. messages sent after September 17th, 2019 11:34 PM:
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --after "2019-09-17 23:34" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --after "2019-09-17 23:34"
``` ```
**Messages sent in a date range** **Messages sent in a date range**
@ -220,7 +208,7 @@ Use `--before` and `--after` to export messages sent during the provided date ra
September 17th, 2019 11:34 PM and September 18th: September 17th, 2019 11:34 PM and September 18th:
```console ```console
dotnet DiscordChatExporter.Cli.dll export -t "mfa.Ifrn" -c 53555 --after "2019-09-17 23:34" --before "2019-09-18" $ ./DiscordChatExporter.Cli export -t "mfa.Ifrn" -c 53555 --after "2019-09-17 23:34" --before "2019-09-18"
``` ```
You can try different formats like `17-SEP-2019 11:34 PM` or even refine your ranges down to You can try different formats like `17-SEP-2019 11:34 PM` or even refine your ranges down to
@ -234,7 +222,7 @@ formats [here](https://docs.microsoft.com/en-us/dotnet/standard/base-types/custo
To export all channels in a specific server, use the `exportguild` command and provide the server ID through the `-g|--guild` option: To export all channels in a specific server, use the `exportguild` command and provide the server ID through the `-g|--guild` option:
```console ```console
dotnet DiscordChatExporter.Cli.dll exportguild -t "mfa.Ifrn" -g 21814 $ ./DiscordChatExporter.Cli exportguild -t "mfa.Ifrn" -g 21814
``` ```
#### Including threads #### Including threads
@ -244,7 +232,7 @@ specifying which threads should be included. It has possible values of `none`, `
threads should be included. To include both active and archived threads, use `--include-threads all`. threads should be included. To include both active and archived threads, use `--include-threads all`.
```console ```console
dotnet DiscordChatExporter.Cli.dll exportguild -t "mfa.Ifrn" -g 21814 --include-threads all $ ./DiscordChatExporter.Cli exportguild -t "mfa.Ifrn" -g 21814 --include-threads all
``` ```
#### Including voice channels #### Including voice channels
@ -254,7 +242,7 @@ specifying whether to include voice channels in the export. It has possible valu
voice channels, use `--include-vc false`. voice channels, use `--include-vc false`.
```console ```console
dotnet DiscordChatExporter.Cli.dll exportguild -t "mfa.Ifrn" -g 21814 --include-vc false $ ./DiscordChatExporter.Cli exportguild -t "mfa.Ifrn" -g 21814 --include-vc false
``` ```
### Export all channels ### Export all channels
@ -262,7 +250,7 @@ dotnet DiscordChatExporter.Cli.dll exportguild -t "mfa.Ifrn" -g 21814 --include-
To export all accessible channels, use the `exportall` command: To export all accessible channels, use the `exportall` command:
```console ```console
dotnet DiscordChatExporter.Cli.dll exportall -t "mfa.Ifrn" $ ./DiscordChatExporter.Cli exportall -t "mfa.Ifrn"
``` ```
#### Excluding DMs #### Excluding DMs
@ -270,7 +258,7 @@ dotnet DiscordChatExporter.Cli.dll exportall -t "mfa.Ifrn"
To exclude DMs, add the `--include-dm false` option. To exclude DMs, add the `--include-dm false` option.
```console ```console
dotnet DiscordChatExporter.Cli.dll exportall -t "mfa.Ifrn" --include-dm false $ ./DiscordChatExporter.Cli exportall -t "mfa.Ifrn" --include-dm false
``` ```
### List channels in a server ### List channels in a server
@ -278,7 +266,7 @@ dotnet DiscordChatExporter.Cli.dll exportall -t "mfa.Ifrn" --include-dm false
To list the channels available in a specific server, use the `channels` command and provide the server ID through the `-g|--guild` option: To list the channels available in a specific server, use the `channels` command and provide the server ID through the `-g|--guild` option:
```console ```console
dotnet DiscordChatExporter.Cli.dll channels -t "mfa.Ifrn" -g 21814 $ ./DiscordChatExporter.Cli channels -t "mfa.Ifrn" -g 21814
``` ```
### List direct message channels ### List direct message channels
@ -286,7 +274,7 @@ dotnet DiscordChatExporter.Cli.dll channels -t "mfa.Ifrn" -g 21814
To list all DM channels accessible to the current account, use the `dm` command: To list all DM channels accessible to the current account, use the `dm` command:
```console ```console
dotnet DiscordChatExporter.Cli.dll dm -t "mfa.Ifrn" $ ./DiscordChatExporter.Cli dm -t "mfa.Ifrn"
``` ```
### List servers ### List servers
@ -294,5 +282,5 @@ dotnet DiscordChatExporter.Cli.dll dm -t "mfa.Ifrn"
To list all servers accessible by the current account, use the `guilds` command: To list all servers accessible by the current account, use the `guilds` command:
```console ```console
dotnet DiscordChatExporter.Cli.dll guilds -t "mfa.Ifrn" > C:\path\to\output.txt $ ./DiscordChatExporter.Cli guilds -t "mfa.Ifrn" > C:\path\to\output.txt
``` ```

View file

@ -12,8 +12,7 @@ on:
- master - master
jobs: jobs:
# Outputs from this job aren't really used, but it's here to verify that # Outputs from this job aren't really used, but it's here to verify that the Dockerfile builds correctly
# the Dockerfile builds correctly on pull requests.
pack: pack:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 10 timeout-minutes: 10

View file

@ -18,7 +18,7 @@ env:
jobs: jobs:
format: format:
runs-on: windows-latest runs-on: ubuntu-latest
timeout-minutes: 10 timeout-minutes: 10
permissions: permissions:
@ -43,7 +43,7 @@ jobs:
# Tests need access to secrets, so we can't run them against PRs because of limited trust # Tests need access to secrets, so we can't run them against PRs because of limited trust
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
runs-on: windows-latest runs-on: ubuntu-latest
timeout-minutes: 10 timeout-minutes: 10
permissions: permissions:
@ -82,7 +82,24 @@ jobs:
app: app:
- DiscordChatExporter.Cli - DiscordChatExporter.Cli
- DiscordChatExporter.Gui - DiscordChatExporter.Gui
rid:
- win-arm64
- win-x86
- win-x64
- linux-arm
- linux-arm64
- linux-musl-x64
- linux-x64
- osx-arm64
- osx-x64
include:
- app: DiscordChatExporter.Cli
asset: DiscordChatExporter.Cli
- app: DiscordChatExporter.Gui
# GUI assets aren't suffixed, unlike the CLI assets
asset: DiscordChatExporter
# Need to run on Windows because of DotnetRuntimeBootstrapper's dependency on Ressy
runs-on: windows-latest runs-on: windows-latest
timeout-minutes: 10 timeout-minutes: 10
@ -106,12 +123,13 @@ jobs:
-p:CSharpier_Bypass=true -p:CSharpier_Bypass=true
--output ${{ matrix.app }}/bin/publish/ --output ${{ matrix.app }}/bin/publish/
--configuration Release --configuration Release
--use-current-runtime --runtime ${{ matrix.rid }}
--no-self-contained
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
with: with:
name: ${{ matrix.app }} name: ${{ matrix.asset }}.${{ matrix.rid }}
path: ${{ matrix.app }}/bin/publish/ path: ${{ matrix.app }}/bin/publish/
if-no-files-found: error if-no-files-found: error
@ -148,11 +166,21 @@ jobs:
app: app:
- DiscordChatExporter.Cli - DiscordChatExporter.Cli
- DiscordChatExporter.Gui - DiscordChatExporter.Gui
rid:
- win-arm64
- win-x86
- win-x64
- linux-arm
- linux-arm64
- linux-musl-x64
- linux-x64
- osx-arm64
- osx-x64
include: include:
- app: DiscordChatExporter.Cli - app: DiscordChatExporter.Cli
asset: DiscordChatExporter.Cli asset: DiscordChatExporter.Cli
- app: DiscordChatExporter.Gui - app: DiscordChatExporter.Gui
# GUI asset isn't suffixed, unlike the CLI asset # GUI assets aren't suffixed, unlike the CLI assets
asset: DiscordChatExporter asset: DiscordChatExporter
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -166,25 +194,20 @@ jobs:
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1 uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
with: with:
name: ${{ matrix.app }} name: ${{ matrix.asset }}.${{ matrix.rid }}
path: ${{ matrix.app }}/ path: ${{ matrix.app }}/
- name: Configure permissions
# Remove this when the GUI also becomes cross-platform
if: ${{ matrix.app == 'DiscordChatExporter.Cli' }}
run: chmod +x ${{ matrix.app }}/${{ matrix.app }}.sh
- name: Create package - name: Create package
# Change into the artifacts directory to avoid including the directory itself in the zip archive # Change into the artifacts directory to avoid including the directory itself in the zip archive
working-directory: ${{ matrix.app }}/ working-directory: ${{ matrix.app }}/
run: zip -rX ../${{ matrix.asset }}.zip . run: zip -r ../${{ matrix.asset }}.${{ matrix.rid }}.zip .
- name: Upload release asset - name: Upload release asset
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: > run: >
gh release upload ${{ github.ref_name }} gh release upload ${{ github.ref_name }}
${{ matrix.asset }}.zip ${{ matrix.asset }}.${{ matrix.rid }}.zip
--repo ${{ github.event.repository.full_name }} --repo ${{ github.event.repository.full_name }}
notify: notify:

View file

@ -4,16 +4,12 @@
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<ApplicationIcon>..\favicon.ico</ApplicationIcon> <ApplicationIcon>..\favicon.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="DiscordChatExporter.Cli.sh" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CliFx" Version="2.3.5" /> <PackageReference Include="CliFx" Version="2.3.5" />
<PackageReference Include="CSharpier.MsBuild" Version="0.28.0" PrivateAssets="all" /> <PackageReference Include="CSharpier.MsBuild" Version="0.28.0" PrivateAssets="all" />
<PackageReference Include="Deorcify" Version="1.0.2" PrivateAssets="all" /> <PackageReference Include="Deorcify" Version="1.0.2" PrivateAssets="all" />
<PackageReference Include="DotnetRuntimeBootstrapper" Version="2.5.3" PrivateAssets="all" /> <PackageReference Include="DotnetRuntimeBootstrapper" Version="2.5.4" PrivateAssets="all" />
<PackageReference Include="Gress" Version="2.1.1" /> <PackageReference Include="Gress" Version="2.1.1" />
<PackageReference Include="Spectre.Console" Version="0.48.0" /> <PackageReference Include="Spectre.Console" Version="0.48.0" />
</ItemGroup> </ItemGroup>

View file

@ -1 +0,0 @@
dotnet "$(dirname "$0")/DiscordChatExporter.Cli.dll" "$@"

View file

@ -20,7 +20,7 @@
<PackageReference Include="CSharpier.MsBuild" Version="0.28.0" PrivateAssets="all" /> <PackageReference Include="CSharpier.MsBuild" Version="0.28.0" PrivateAssets="all" />
<PackageReference Include="Deorcify" Version="1.0.2" PrivateAssets="all" /> <PackageReference Include="Deorcify" Version="1.0.2" PrivateAssets="all" />
<PackageReference Include="DialogHost.Avalonia" Version="0.7.7" /> <PackageReference Include="DialogHost.Avalonia" Version="0.7.7" />
<PackageReference Include="DotnetRuntimeBootstrapper" Version="2.5.3" PrivateAssets="all" Condition="$([MSBuild]::IsOsPlatform('Windows'))" /> <PackageReference Include="DotnetRuntimeBootstrapper" Version="2.5.4" PrivateAssets="all" />
<PackageReference Include="Gress" Version="2.1.1" /> <PackageReference Include="Gress" Version="2.1.1" />
<PackageReference Include="Material.Avalonia" Version="3.5.0" /> <PackageReference Include="Material.Avalonia" Version="3.5.0" />
<PackageReference Include="Material.Icons.Avalonia" Version="2.1.0" /> <PackageReference Include="Material.Icons.Avalonia" Version="2.1.0" />

View file

@ -1,4 +1,5 @@
using System; using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Onova; using Onova;
using Onova.Exceptions; using Onova.Exceptions;
@ -9,7 +10,15 @@ namespace DiscordChatExporter.Gui.Services;
public class UpdateService(SettingsService settingsService) : IDisposable public class UpdateService(SettingsService settingsService) : IDisposable
{ {
private readonly IUpdateManager _updateManager = new UpdateManager( private readonly IUpdateManager _updateManager = new UpdateManager(
new GithubPackageResolver("Tyrrrz", "DiscordChatExporter", "DiscordChatExporter.zip"), new GithubPackageResolver(
"Tyrrrz",
"DiscordChatExporter",
// Examples:
// DiscordChatExporter.win-arm64.zip
// DiscordChatExporter.win-x64.zip
// DiscordChatExporter.linux-x64.zip
$"DiscordChatExporter.{RuntimeInformation.RuntimeIdentifier}.zip"
),
new ZipPackageExtractor() new ZipPackageExtractor()
); );

View file

@ -41,53 +41,15 @@ To learn more about the war and how you can help, [click here](https://tyrrrz.me
## Download ## Download
This application comes in two flavors: graphical user interface (**GUI**) and command-line interface (**CLI**). - **Graphical user interface** (desktop app):
The following table lists all available download options: - 🟢 **[Stable release](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest)**: look for `DiscordChatExporter.*.zip`
- 🟠 [CI build](https://github.com/Tyrrrz/DiscordChatExporter/actions/workflows/main.yml): look for `DiscordChatExporter.*.zip`
<table> - **Command-line interface** (terminal app):
<thead> - 🟢 **[Stable release](https://github.com/Tyrrrz/DiscordChatExporter/releases/latest)**: look for `DiscordChatExporter.Cli.*.zip`
<tr> - 🟠 [CI build](https://github.com/Tyrrrz/DiscordChatExporter/actions/workflows/main.yml): look for `DiscordChatExporter.Cli.*.zip`
<th></th> - 🐋 [Docker](https://hub.docker.com/r/tyrrrz/discordchatexporter): `docker pull tyrrrz/discordchatexporter`
<th>Downloads</th> - 📦 [AUR](https://aur.archlinux.org/packages/discord-chat-exporter-cli): `discord-chat-exporter-cli`
<th>Supported OS</th> - 📦 [Nix](https://search.nixos.org/packages?query=discordchatexporter-cli): `discordchatexporter-cli`
</tr>
</thead>
<tbody>
<tr>
<td><b>GUI</b></td>
<td>
<ul>
<li>🟢 <b><a href="https://github.com/Tyrrrz/DiscordChatExporter/releases/latest">Stable release</a></b> (<code>DiscordChatExporter.zip</code>)</li>
<li>🟠 <a href="https://github.com/Tyrrrz/DiscordChatExporter/actions/workflows/main.yml">CI build</a> (<code>DiscordChatExporter.Gui.zip</code>)</li>
</ul>
</td>
<td>
<ul>
<li>Windows <b>7</b> or higher</li>
</ul>
</td>
</tr>
<tr>
<td><b>CLI</b></td>
<td>
<ul>
<li>🟢 <b><a href="https://github.com/Tyrrrz/DiscordChatExporter/releases/latest">Stable release</a></b> (<code>DiscordChatExporter.Cli.zip</code></li>
<li>🟠 <a href="https://github.com/Tyrrrz/DiscordChatExporter/actions/workflows/main.yml">CI build</a> (<code>DiscordChatExporter.Cli.zip</code>)</li>
<li>🐋 <a href="https://hub.docker.com/r/tyrrrz/discordchatexporter">Docker</a> (<code>tyrrrz/discordchatexporter</code>)</li>
<li>📦 <a href="https://aur.archlinux.org/packages/discord-chat-exporter-cli">AUR</a> (<code>discord-chat-exporter-cli</code>)</li>
<li>📦 <a href="https://search.nixos.org/packages?query=discordchatexporter-cli">Nix</a> (<code>discordchatexporter-cli</code>)</li>
</ul>
</td>
<td>
<ul>
<li>Windows <b>7</b> or higher</li>
<li>macOS <b>10.13 (High Sierra)</b> or higher</li>
<li>Linux (multiple distros)</li>
</ul>
</td>
</tr>
</tbody>
</table>
> **Important**: > **Important**:
> To run **DiscordChatExporter**, you need to make sure that the **.NET 8.0 Runtime** is installed. > To run **DiscordChatExporter**, you need to make sure that the **.NET 8.0 Runtime** is installed.
@ -107,8 +69,8 @@ The following table lists all available download options:
## Features ## Features
- Graphical user interface (Windows) - Graphical and command-line interfaces
- Command-line interface (Windows, Linux, macOS) - Fully cross-platform
- Authentication via either a user or a bot token - Authentication via either a user or a bot token
- Multiple output formats: HTML (dark/light), TXT, CSV, JSON - Multiple output formats: HTML (dark/light), TXT, CSV, JSON
- Support for markdown, attachments, embeds, emoji, and other rich media features - Support for markdown, attachments, embeds, emoji, and other rich media features