Apply same logic to --before

This commit is contained in:
Leonardo Mosquera 2025-03-03 18:06:11 -03:00
parent 20ca762da3
commit e68604b964
2 changed files with 874 additions and 15 deletions

View file

@ -37,8 +37,9 @@ public class ChannelExporter(DiscordClient discord)
);
}
// Check if the 'after' boundary is valid
if (request.After is not null && !request.Channel.MayHaveMessagesAfter(request.After.Value))
// Check if the 'before' and 'after' boundaries are valid
if ((request.Before is not null && !request.Channel.MayHaveMessagesBefore(request.Before.Value)) ||
(request.After is not null && !request.Channel.MayHaveMessagesAfter(request.After.Value)))
{
Console.Error.WriteLine(
$"NOTE: Channel '{request.Channel.Name}' "
@ -47,19 +48,6 @@ public class ChannelExporter(DiscordClient discord)
);
}
// Check if the 'before' boundary is valid
if (
request.Before is not null
&& !request.Channel.MayHaveMessagesBefore(request.Before.Value)
)
{
throw new DiscordChatExporterException(
$"Channel '{request.Channel.Name}' "
+ $"of guild '{request.Guild.Name}' "
+ $"does not contain any messages within the specified period."
);
}
// Build context
var context = new ExportContext(discord, request);
await context.PopulateChannelsAndRolesAsync(cancellationToken);

871
tags Normal file
View file

@ -0,0 +1,871 @@
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
!_TAG_PROC_CWD /zfs/data/src/ajenos/Tyrrrz/DiscordChatExporter/ //
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
!_TAG_PROGRAM_VERSION 5.9.0 //
$schema DiscordChatExporter.Cli.Tests/xunit.runner.json /^ "$schema": "https:\/\/xunit.net\/schema\/current\/xunit.runner.schema.json",$/;" s
Active DiscordChatExporter.Cli/Commands/Shared/ThreadInclusionMode.cs /^ Active,$/;" e enum:ThreadInclusionMode file:
Active DiscordChatExporter.Gui/Models/ThreadInclusionMode.cs /^ Active,$/;" e enum:ThreadInclusionMode file:
Add DiscordChatExporter.Gui/Utils/DisposableCollector.cs /^ public void Add(IDisposable item)$/;" m class:DisposableCollector
After DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public Snowflake? After { get; init; }$/;" p class:ExportCommandBase
After DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public Snowflake? After { get; }$/;" p class:ExportRequest
AggregateMatcher DiscordChatExporter.Core/Markdown/Parsing/AggregateMatcher.cs /^internal class AggregateMatcher<TContext, TValue>($/;" m
All DiscordChatExporter.Cli/Commands/Shared/ThreadInclusionMode.cs /^ All,$/;" e enum:ThreadInclusionMode file:
All DiscordChatExporter.Gui/Models/ThreadInclusionMode.cs /^ All,$/;" e enum:ThreadInclusionMode file:
And DiscordChatExporter.Core/Exporting/Filtering/BinaryExpressionKind.cs /^ And,$/;" e enum:BinaryExpressionKind file:
Apng DiscordChatExporter.Core/Discord/Data/StickerFormat.cs /^ Apng = 2,$/;" e enum:StickerFormat file:
App DiscordChatExporter.Gui/App.axaml.cs /^ public App()$/;" m class:App
App DiscordChatExporter.Gui/App.axaml.cs /^public class App : Application, IDisposable$/;" c
AppendIfNotEmpty DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^ public static StringBuilder AppendIfNotEmpty(this StringBuilder builder, char value) =>$/;" m class:StringExtensions
Application DiscordChatExporter.Core/Discord/Data/Application.cs /^public partial record Application$/;" p
Application DiscordChatExporter.Core/Discord/Data/Application.cs /^public partial record Application(Snowflake Id, string Name, ApplicationFlags Flags)$/;" m
ApplicationAutoModerationRuleCreateBadge DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ ApplicationAutoModerationRuleCreateBadge = 64,$/;" e enum:ApplicationFlags file:
ApplicationCommandBadge DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ ApplicationCommandBadge = 8388608,$/;" e enum:ApplicationFlags file:
ApplicationFlags DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^public enum ApplicationFlags$/;" g
Assembly DiscordChatExporter.Gui/Program.cs /^ private static Assembly Assembly { get; } = Assembly.GetExecutingAssembly();$/;" p class:Program
AssetsDirPath DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public string? AssetsDirPath$/;" p class:ExportCommandBase
AssetsDirPath DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public string AssetsDirPath { get; }$/;" p class:ExportRequest
AsyncCollectionExtensions DiscordChatExporter.Core/Utils/Extensions/AsyncCollectionExtensions.cs /^public static class AsyncCollectionExtensions$/;" c
Attachment DiscordChatExporter.Core/Discord/Data/Attachment.cs /^public partial record Attachment$/;" p
Attachment DiscordChatExporter.Core/Discord/Data/Attachment.cs /^public partial record Attachment($/;" m
AttachmentTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake AttachmentTestCases { get; } = Snowflake.Parse("885587741654536192")/;" p class:ChannelIds
AutoLinkNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> AutoLinkNodeMatcher =$/;" f class:MarkdownParser file:
AvailableLocales DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public IReadOnlyList<string> AvailableLocales { get; } =$/;" p class:SettingsViewModel
AvailableThemes DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public IReadOnlyList<ThemeVariant> AvailableThemes { get; } = Enum.GetValues<ThemeVariant>()/;" p class:SettingsViewModel
AvailableThreadInclusionModes DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public IReadOnlyList<ThreadInclusionMode> AvailableThreadInclusionModes { get; } =$/;" p class:SettingsViewModel
AvaloniaClockIdentifier DiscordChatExporter.Gui/Utils/Internationalization.cs /^ public static string AvaloniaClockIdentifier => Is24Hours ? "24HourClock" : "12HourClock";$/;" f class:Internationalization
AvaloniaExtensions DiscordChatExporter.Gui/Utils/Extensions/AvaloniaExtensions.cs /^internal static class AvaloniaExtensions$/;" c
Before DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public Snowflake? Before { get; init; }$/;" p class:ExportCommandBase
Before DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public Snowflake? Before { get; }$/;" p class:ExportRequest
BinaryExpressionKind DiscordChatExporter.Core/Exporting/Filtering/BinaryExpressionKind.cs /^internal enum BinaryExpressionKind$/;" g
BinaryExpressionMessageFilter DiscordChatExporter.Core/Exporting/Filtering/BinaryExpressionMessageFilter.cs /^internal class BinaryExpressionMessageFilter($/;" m
BinaryExtensions DiscordChatExporter.Core/Utils/Extensions/BinaryExtensions.cs /^public static class BinaryExtensions$/;" c
Bold DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Bold,$/;" e enum:FormattingKind file:
BoldFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> BoldFormattingNodeMatcher =$/;" f class:MarkdownParser file:
Bot DiscordChatExporter.Core/Discord/TokenKind.cs /^ Bot,$/;" e enum:TokenKind file:
Build DiscordChatExporter.Core/Utils/UrlBuilder.cs /^ public string Build()$/;" m class:UrlBuilder
BuildAvaloniaApp DiscordChatExporter.Gui/Program.cs /^ public static AppBuilder BuildAvaloniaApp() =>$/;" m class:Program
ButtonsCount DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ public int ButtonsCount => (IsDefaultButtonVisible ? 1 : 0) + (IsCancelButtonVisible ? 1 : 0/;" f class:MessageBoxViewModel
By editing the settings file .docs/Token-and-IDs.md /^#### By editing the settings file$/;" t subsection:Obtaining Token and Channel IDs""How to get a User Token""Through the desktop app / enabling web developer tools
CLI .docs/Troubleshooting.md /^## CLI$/;" s chapter:Troubleshooting
CLI Caveats .docs/Message-filters.md /^## CLI Caveats$/;" s chapter:Message filters
CLI commands .docs/Using-the-CLI.md /^## CLI commands$/;" s chapter:Using the CLI
CSV .docs/Getting-started.md /^### CSV$/;" S section:Getting started""File formats
Call DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ Call = 3,$/;" e enum:MessageKind file:
Can DCE add new messages to an existing export? .docs/Troubleshooting.md /^### Can DCE add new messages to an existing export?$/;" S section:Troubleshooting""General questions
Can DCE download images? .docs/Troubleshooting.md /^### Can DCE download images?$/;" S section:Troubleshooting""General questions
Can DCE export messages that have already been deleted? .docs/Troubleshooting.md /^### Can DCE export messages that have already been deleted?$/;" S section:Troubleshooting""General questions
Can DCE export multiple formats at once? .docs/Troubleshooting.md /^### Can DCE export multiple formats at once?$/;" S section:Troubleshooting""General questions
Can DCE export private chats? .docs/Troubleshooting.md /^### Can DCE export private chats?$/;" S section:Troubleshooting""General questions
Can DCE recreate the exported chats in Discord? .docs/Troubleshooting.md /^### Can DCE recreate the exported chats in Discord?$/;" S section:Troubleshooting""General questions
Can DCE reupload exported messages to another channel? .docs/Troubleshooting.md /^### Can DCE reupload exported messages to another channel?$/;" S section:Troubleshooting""General questions
Can the exported chats be shared? .docs/Troubleshooting.md /^### Can the exported chats be shared?$/;" S section:Troubleshooting""General questions
CanExport DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private bool CanExport() =>$/;" m class:DashboardViewModel file:
CanPullChannels DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private bool CanPullChannels() => !IsBusy && _discord is not null && SelectedGuild is not nu/;" m class:DashboardViewModel file:
CanPullGuilds DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private bool CanPullGuilds() => !IsBusy && !string.IsNullOrWhiteSpace(Token);$/;" m class:DashboardViewModel file:
ChainedFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> ChainedFilter = Parse.Chain($/;" f class:FilterGrammar file:
Changing the date format .docs/Using-the-CLI.md /^#### Changing the date format$/;" t section:Using the CLI""Export a specific channel
Changing the filename and output directory .docs/Using-the-CLI.md /^#### Changing the filename and output directory$/;" t section:Using the CLI""Export a specific channel
Changing the format .docs/Using-the-CLI.md /^#### Changing the format$/;" t section:Using the CLI""Export a specific channel
Changing the media directory .docs/Using-the-CLI.md /^#### Changing the media directory$/;" t section:Using the CLI""Export a specific channel
Changing the output directory .docs/Using-the-CLI.md /^#### Changing the output directory$/;" t section:Using the CLI""Export a specific channel
Changing the output filename .docs/Using-the-CLI.md /^#### Changing the output filename$/;" t section:Using the CLI""Export a specific channel
Channel DiscordChatExporter.Core/Discord/Data/Channel.cs /^public partial record Channel$/;" p
Channel DiscordChatExporter.Core/Discord/Data/Channel.cs /^public partial record Channel($/;" m
Channel DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public Channel Channel { get; }$/;" p class:ExportRequest
Channel DiscordChatExporter.Core/Markdown/MentionKind.cs /^ Channel,$/;" e enum:MentionKind file:
ChannelConnection DiscordChatExporter.Core/Discord/Data/ChannelConnection.cs /^public record ChannelConnection(Channel Channel, IReadOnlyList<ChannelConnection> Children)$/;" m
ChannelExporter DiscordChatExporter.Core/Exporting/ChannelExporter.cs /^public class ChannelExporter(DiscordClient discord)$/;" m
ChannelIconChange DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ ChannelIconChange = 5,$/;" e enum:MessageKind file:
ChannelIds DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^public static class ChannelIds$/;" c
ChannelIds DiscordChatExporter.Cli/Commands/ExportChannelsCommand.cs /^ public required IReadOnlyList<Snowflake> ChannelIds { get; init; }$/;" p class:ExportChannelsCommand
ChannelKind DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^public enum ChannelKind$/;" g
ChannelMentionNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> ChannelMentionNodeMatcher =$/;" f class:MarkdownParser file:
ChannelNameChange DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ ChannelNameChange = 4,$/;" e enum:MessageKind file:
ChannelPinnedMessage DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ ChannelPinnedMessage = 6,$/;" e enum:MessageKind file:
ChannelToHierarchicalNameStringConverter DiscordChatExporter.Gui/Converters/ChannelToHierarchicalNameStringConverter.cs /^public class ChannelToHierarchicalNameStringConverter : IValueConverter$/;" c
Children DiscordChatExporter.Core/Markdown/IContainerNode.cs /^ IReadOnlyList<MarkdownNode> Children { get; }$/;" p interface:IContainerNode
Clamp DiscordChatExporter.Core/Utils/Extensions/TimeSpanExtensions.cs /^ public static TimeSpan Clamp(this TimeSpan value, TimeSpan min, TimeSpan max)$/;" m class:TimeSpanExtensions
Client DiscordChatExporter.Core/Utils/Http.cs /^ public static HttpClient Client { get; } = new();$/;" p class:Http
Close DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs /^ protected void Close(T dialogResult)$/;" m class:DialogViewModelBase
CodedStandardEmojiNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> CodedStandardEmojiNodeMatche/;" f class:MarkdownParser file:
CollectAsync DiscordChatExporter.Core/Utils/Extensions/AsyncCollectionExtensions.cs /^ private static async ValueTask<IReadOnlyList<T>> CollectAsync<T>($/;" m class:AsyncCollectionExtensions file:
CollectionExtensions DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs /^public static class CollectionExtensions$/;" c
ColorExtensions DiscordChatExporter.Core/Utils/Extensions/ColorExtensions.cs /^public static class ColorExtensions$/;" c
Command DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public ICommand? Command$/;" p class:HyperLink
CommandParameter DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public object? CommandParameter$/;" p class:HyperLink
CommandParameterProperty DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public static readonly StyledProperty<object?> CommandParameterProperty =$/;" f class:HyperLink
CommandProperty DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public static readonly StyledProperty<ICommand?> CommandProperty =$/;" f class:HyperLink
Configuration DiscordChatExporter.Cli.Tests/Infra/Secrets.cs /^ private static readonly IConfigurationRoot Configuration = new ConfigurationBuilder()$/;" f class:Secrets file:
ConsoleExtensions DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs /^internal static class ConsoleExtensions$/;" c
ContainsFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> ContainsFilter = String.Select(v =>$/;" f class:FilterGrammar file:
ContainsMessageFilter DiscordChatExporter.Core/Exporting/Filtering/ContainsMessageFilter.cs /^internal class ContainsMessageFilter(string text) : MessageFilter$/;" m
Convert DiscordChatExporter.Cli/Commands/Converters/ThreadInclusionModeBindingConverter.cs /^ public override ThreadInclusionMode Convert(string? rawValue)$/;" m class:ThreadInclusionModeBindingConverter
Convert DiscordChatExporter.Cli/Commands/Converters/TruthyBooleanBindingConverter.cs /^ public override bool Convert(string? rawValue)$/;" m class:TruthyBooleanBindingConverter
Create DiscordChatExporter.Cli.Tests/Utils/TempDir.cs /^ public static TempDir Create()$/;" m class:TempDir
Create DiscordChatExporter.Cli.Tests/Utils/TempFile.cs /^ public static TempFile Create()$/;" m class:TempFile
CreateAnsiConsole DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs /^ public static IAnsiConsole CreateAnsiConsole(this IConsole console) =>$/;" m class:ConsoleExtensions
CreateMessageWriter DiscordChatExporter.Core/Exporting/MessageExporter.cs /^ private static MessageWriter CreateMessageWriter($/;" m class:MessageExporter file:
CreateProgressTicker DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs /^ public static Progress CreateProgressTicker(this IConsole console) =>$/;" m class:ConsoleExtensions
CreateStatusTicker DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs /^ public static Status CreateStatusTicker(this IConsole console) =>$/;" m class:ConsoleExtensions
Creating the .plist file .docs/Scheduling-MacOS.md /^## Creating the .plist file$/;" s chapter:Scheduling exports on macOS
Creating the script .docs/Scheduling-Linux.md /^## Creating the script$/;" s chapter:Scheduling exports with Cron
Creating the script .docs/Scheduling-MacOS.md /^## Creating the script$/;" s chapter:Scheduling exports on macOS
Creating the script .docs/Scheduling-Windows.md /^## Creating the script$/;" s chapter:Scheduling exports on Windows
CrossPost DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ CrossPost = 2,$/;" e enum:MessageFlags file:
CrossPosted DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ CrossPosted = 1,$/;" e enum:MessageFlags file:
Csv DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ Csv,$/;" e enum:ExportFormat file:
CsvContentSpecs DiscordChatExporter.Cli.Tests/Specs/CsvContentSpecs.cs /^public class CsvContentSpecs$/;" c
CsvEncode DiscordChatExporter.Core/Exporting/CsvMessageWriter.cs /^ private static string CsvEncode(string value)$/;" m class:CsvMessageWriter file:
CsvMessageWriter DiscordChatExporter.Core/Exporting/CsvMessageWriter.cs /^internal partial class CsvMessageWriter$/;" c
CsvMessageWriter DiscordChatExporter.Core/Exporting/CsvMessageWriter.cs /^internal partial class CsvMessageWriter(Stream stream, ExportContext context)$/;" m
CultureInfo DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public CultureInfo? CultureInfo { get; }$/;" p class:ExportRequest
CustomEmojiNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> CustomEmojiNodeMatcher =$/;" f class:MarkdownParser file:
Dark DiscordChatExporter.Gui/Framework/ThemeVariant.cs /^ Dark,$/;" e enum:ThemeVariant file:
DashboardView DiscordChatExporter.Gui/Views/Components/DashboardView.axaml.cs /^ public DashboardView() => InitializeComponent();$/;" m class:DashboardView
DashboardView DiscordChatExporter.Gui/Views/Components/DashboardView.axaml.cs /^public partial class DashboardView : UserControl<DashboardViewModel>$/;" c
DashboardViewModel DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ public DashboardViewModel($/;" m class:DashboardViewModel
DashboardViewModel DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^public partial class DashboardViewModel : ViewModelBase$/;" c
DataContext DiscordChatExporter.Gui/Framework/UserControl.cs /^ public new TDataContext DataContext$/;" p class:UserControl
DataContext DiscordChatExporter.Gui/Framework/Window.cs /^ public new TDataContext DataContext$/;" p class:Window
DataDump DiscordChatExporter.Core/Discord/Dump/DataDump.cs /^public partial class DataDump$/;" c
DataDump DiscordChatExporter.Core/Discord/Dump/DataDump.cs /^public partial class DataDump(IReadOnlyList<DataDumpChannel> channels)$/;" m
DataDumpChannel DiscordChatExporter.Core/Discord/Dump/DataDumpChannel.cs /^public record DataDumpChannel(Snowflake Id, string Name);$/;" m
DataPackageFilePath DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public string? DataPackageFilePath { get; init; }$/;" p class:ExportAllCommand
Date ranges .docs/Using-the-CLI.md /^#### Date ranges$/;" t section:Using the CLI""Export a specific channel
DateFormat DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public string DateFormat { get; init; } = "MM\/dd\/yyyy h:mm tt";$/;" p class:ExportCommandBase
DateRangeSpecs DiscordChatExporter.Cli.Tests/Specs/DateRangeSpecs.cs /^public class DateRangeSpecs$/;" c
DateRangeTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake DateRangeTestCases { get; } = Snowflake.Parse("866674248747319326");$/;" p class:ChannelIds
Default DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ Default = 0,$/;" e enum:MessageKind file:
DefaultRegexOptions DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private const RegexOptions DefaultRegexOptions =$/;" f class:MarkdownParser file:
DialogManager DiscordChatExporter.Gui/Framework/DialogManager.cs /^public class DialogManager : IDisposable$/;" c
DialogViewModelBase DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs /^public abstract partial class DialogViewModelBase<T> : ViewModelBase$/;" c
DirPath DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ private static readonly string DirPath = Path.Combine($/;" f class:ExportWrapper file:
DirectGroupTextChat DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ DirectGroupTextChat = 3,$/;" e enum:ChannelKind file:
DirectTextChat DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ DirectTextChat = 1,$/;" e enum:ChannelKind file:
Discord DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^ protected DiscordClient Discord => _discordClient ??= new DiscordClient(Token);$/;" f class:DiscordCommandBase
DiscordChatExporter Readme.md /^# DiscordChatExporter$/;" c
DiscordChatExporter Tests DiscordChatExporter.Cli.Tests/Readme.md /^# DiscordChatExporter Tests$/;" c
DiscordChatExporterException DiscordChatExporter.Core/Exceptions/DiscordChatExporterException.cs /^public class DiscordChatExporterException($/;" m
DiscordClient DiscordChatExporter.Core/Discord/DiscordClient.cs /^public class DiscordClient(string token)$/;" m
DiscordCommandBase DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^public abstract class DiscordCommandBase : ICommand$/;" c
DiscordToken DiscordChatExporter.Cli.Tests/Infra/Secrets.cs /^ public static string DiscordToken =>$/;" f class:Secrets
Disposable DiscordChatExporter.Gui/Utils/Disposable.cs /^internal class Disposable(Action dispose) : IDisposable$/;" m
DisposableCollector DiscordChatExporter.Gui/Utils/DisposableCollector.cs /^internal class DisposableCollector : IDisposable$/;" c
DisposableExtensions DiscordChatExporter.Gui/Utils/Extensions/DisposableExtensions.cs /^internal static class DisposableExtensions$/;" c
Dispose DiscordChatExporter.Gui/App.axaml.cs /^ public void Dispose()$/;" m class:App
Dispose DiscordChatExporter.Gui/Framework/DialogManager.cs /^ public void Dispose() => _dialogLock.Dispose();$/;" m class:DialogManager
Dispose DiscordChatExporter.Gui/Framework/ViewModelBase.cs /^ protected virtual void Dispose(bool disposing) { }$/;" m class:ViewModelBase
Dispose DiscordChatExporter.Gui/Framework/ViewModelBase.cs /^ public void Dispose()$/;" m class:ViewModelBase
Dispose DiscordChatExporter.Gui/Utils/DisposableCollector.cs /^ public void Dispose()$/;" m class:DisposableCollector
Dispose DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ protected override void Dispose(bool disposing)$/;" m class:DashboardViewModel
Dispose DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ protected override void Dispose(bool disposing)$/;" m class:SettingsViewModel
DisposeAll DiscordChatExporter.Gui/Utils/Extensions/DisposableExtensions.cs /^ public static void DisposeAll(this IEnumerable<IDisposable> disposables)$/;" m class:DisposableExtensions
Docker DiscordChatExporter.Core/Utils/Docker.cs /^public static class Docker$/;" c
Docker usage instructions .docs/Docker.md /^# Docker usage instructions$/;" c
Download Readme.md /^## Download$/;" s chapter:DiscordChatExporter
Downloading assets .docs/Using-the-CLI.md /^#### Downloading assets$/;" t section:Using the CLI""Export a specific channel
Embed DiscordChatExporter.Core/Discord/Data/Embeds/Embed.cs /^public partial record Embed$/;" p
Embed DiscordChatExporter.Core/Discord/Data/Embeds/Embed.cs /^public partial record Embed($/;" m
Embed DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Embed,$/;" e enum:MessageContentMatchKind file:
EmbedAuthor DiscordChatExporter.Core/Discord/Data/Embeds/EmbedAuthor.cs /^public record EmbedAuthor(string? Name, string? Url, string? IconUrl, string? IconProxyUrl)$/;" m
EmbedField DiscordChatExporter.Core/Discord/Data/Embeds/EmbedField.cs /^public record EmbedField(string Name, string Value, bool IsInline)$/;" m
EmbedFooter DiscordChatExporter.Core/Discord/Data/Embeds/EmbedFooter.cs /^public record EmbedFooter(string Text, string? IconUrl, string? IconProxyUrl)$/;" m
EmbedImage DiscordChatExporter.Core/Discord/Data/Embeds/EmbedImage.cs /^public record EmbedImage(string? Url, string? ProxyUrl, int? Width, int? Height)$/;" m
EmbedKind DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^public enum EmbedKind$/;" g
EmbedTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake EmbedTestCases { get; } = Snowflake.Parse("866472452459462687");$/;" p class:ChannelIds
EmbedVideo DiscordChatExporter.Core/Discord/Data/Embeds/EmbedVideo.cs /^public record EmbedVideo(string? Url, string? ProxyUrl, int? Width, int? Height)$/;" m
Embedded DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ Embedded = 131072,$/;" e enum:ApplicationFlags file:
Emoji DiscordChatExporter.Core/Discord/Data/Emoji.cs /^public partial record Emoji$/;" p
EmojiIndex DiscordChatExporter.Core/Discord/Data/EmojiIndex.cs /^internal static class EmojiIndex$/;" c
EmojiTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake EmojiTestCases { get; } = Snowflake.Parse("866768438290415636");$/;" p class:ChannelIds
Enum DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^ where T : struct, Enum => Enum.TryParse<T>(str, ignoreCase, out var result) ? result : n/;" f class:StringExtensions file:
Environment variables .docs/Docker.md /^## Environment variables$/;" s chapter:Docker usage instructions
Ephemeral DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ Ephemeral = 64,$/;" e enum:MessageFlags file:
Errors .docs/Troubleshooting.md /^## Errors$/;" s chapter:Troubleshooting
EscapeFileName DiscordChatExporter.Core/Utils/PathEx.cs /^ public static string EscapeFileName(string path)$/;" m class:PathEx
EscapedCharacter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<char> EscapedCharacter = Character$/;" f class:FilterGrammar file:
EscapedCharacterTextNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ > EscapedCharacterTextNodeMatcher = new RegexMatcher<MarkdownContext, MarkdownNode>($/;" f class:MarkdownParser file:
EscapedSymbolTextNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> EscapedSymbolTextNodeMatcher/;" f class:MarkdownParser file:
Everyone DiscordChatExporter.Core/Markdown/MentionKind.cs /^ Everyone,$/;" e enum:MentionKind file:
EveryoneMentionNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> EveryoneMentionNodeMatcher =$/;" f class:MarkdownParser file:
Examples .docs/Message-filters.md /^## Examples$/;" s chapter:Message filters
ExceptionExtensions DiscordChatExporter.Core/Utils/Extensions/ExceptionExtensions.cs /^public static class ExceptionExtensions$/;" c
Excluding DMs .docs/Using-the-CLI.md /^#### Excluding DMs$/;" t subsection:Using the CLI""Export a specific channel""Export all channels
ExecuteAsync DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^ public virtual ValueTask ExecuteAsync(IConsole console)$/;" m class:DiscordCommandBase
ExecuteAsync DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:ExportCommandBase
ExecuteAsync DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:ExportAllCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/ExportChannelsCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:ExportChannelsCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/ExportDirectMessagesCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:ExportDirectMessagesCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/ExportGuildCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:ExportGuildCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/GetChannelsCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:GetChannelsCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/GetDirectChannelsCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:GetDirectChannelsCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/GetGuildsCommand.cs /^ public override async ValueTask ExecuteAsync(IConsole console)$/;" m class:GetGuildsCommand
ExecuteAsync DiscordChatExporter.Cli/Commands/GuideCommand.cs /^ public ValueTask ExecuteAsync(IConsole console)$/;" m class:GuideCommand
Export a specific channel .docs/Using-the-CLI.md /^## Export a specific channel$/;" s chapter:Using the CLI
Export all channels .docs/Using-the-CLI.md /^### Export all channels$/;" S section:Using the CLI""Export a specific channel
Export at Startup .docs/Scheduling-Windows.md /^## Export at Startup$/;" s chapter:Scheduling exports on Windows
Export at a specific time and date .docs/Scheduling-MacOS.md /^### Export at a specific time and date$/;" S section:Scheduling exports on macOS""Creating the .plist file
Export channels from a specific server .docs/Using-the-CLI.md /^### Export channels from a specific server$/;" S section:Using the CLI""Export a specific channel
Export every _n_ seconds .docs/Scheduling-MacOS.md /^### Export every _n_ seconds$/;" S section:Scheduling exports on macOS""Creating the .plist file
ExportAllCommand DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^public class ExportAllCommand : ExportCommandBase$/;" c
ExportAssetDownloader DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs /^internal partial class ExportAssetDownloader$/;" c
ExportAssetDownloader DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs /^internal partial class ExportAssetDownloader(string workingDirPath, bool reuse)$/;" m
ExportAsync DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ private static async ValueTask<string> ExportAsync(Snowflake channelId, ExportFormat format)$/;" m class:ExportWrapper file:
ExportAsync DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ protected async ValueTask ExportAsync(IConsole console, IReadOnlyList<Channel> channels)$/;" m class:ExportCommandBase
ExportAsync DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ protected async ValueTask ExportAsync(IConsole console, IReadOnlyList<Snowflake> channelIds)$/;" m class:ExportCommandBase
ExportAsync DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private async Task ExportAsync()$/;" m class:DashboardViewModel file:
ExportChannelsCommand DiscordChatExporter.Cli/Commands/ExportChannelsCommand.cs /^public class ExportChannelsCommand : ExportCommandBase$/;" c
ExportCommandBase DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^public abstract class ExportCommandBase : DiscordCommandBase$/;" c
ExportContext DiscordChatExporter.Core/Exporting/ExportContext.cs /^internal class ExportContext(DiscordClient discord, ExportRequest request)$/;" m
ExportDirectMessagesCommand DiscordChatExporter.Cli/Commands/ExportDirectMessagesCommand.cs /^public class ExportDirectMessagesCommand : ExportCommandBase$/;" c
ExportFormat DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public ExportFormat ExportFormat { get; init; } = ExportFormat.HtmlDark;$/;" p class:ExportCommandBase
ExportFormat DiscordChatExporter.Core/Exporting/ExportFormat.cs /^public enum ExportFormat$/;" g
ExportFormatExtensions DiscordChatExporter.Core/Exporting/ExportFormat.cs /^public static class ExportFormatExtensions$/;" c
ExportFormatToStringConverter DiscordChatExporter.Gui/Converters/ExportFormatToStringConverter.cs /^public class ExportFormatToStringConverter : IValueConverter$/;" c
ExportGuildCommand DiscordChatExporter.Cli/Commands/ExportGuildCommand.cs /^public class ExportGuildCommand : ExportCommandBase$/;" c
ExportRequest DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public ExportRequest($/;" m class:ExportRequest
ExportRequest DiscordChatExporter.Core/Exporting/ExportRequest.cs /^public partial class ExportRequest$/;" c
ExportSetupView DiscordChatExporter.Gui/Views/Dialogs/ExportSetupView.axaml.cs /^ public ExportSetupView() => InitializeComponent();$/;" m class:ExportSetupView
ExportSetupView DiscordChatExporter.Gui/Views/Dialogs/ExportSetupView.axaml.cs /^public partial class ExportSetupView : UserControl<ExportSetupViewModel>$/;" c
ExportSetupViewModel DiscordChatExporter.Gui/ViewModels/Dialogs/ExportSetupViewModel.cs /^public partial class ExportSetupViewModel($/;" m
ExportWrapper DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ static ExportWrapper()$/;" m class:ExportWrapper file:
ExportWrapper DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^public static class ExportWrapper$/;" c
Exporter DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ protected ChannelExporter Exporter => _channelExporter ??= new ChannelExporter(Discord);$/;" f class:ExportCommandBase
Exporting on System Boot/User Login .docs/Scheduling-MacOS.md /^### Exporting on System Boot\/User Login$/;" S section:Scheduling exports on macOS""Creating the .plist file
Extra launchctl commands .docs/Scheduling-MacOS.md /^### Extra launchctl commands$/;" S section:Scheduling exports on macOS""Loading the .plist into launchctl
ExtractEmojis DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ public static IReadOnlyList<EmojiNode> ExtractEmojis(string markdown) =>$/;" m class:MarkdownParser
ExtractLinks DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ public static IReadOnlyList<LinkNode> ExtractLinks(string markdown) =>$/;" m class:MarkdownParser
FAQ & Troubleshooting .docs/Readme.md /^## FAQ & Troubleshooting$/;" s chapter:Home
Features Readme.md /^## Features$/;" s chapter:DiscordChatExporter
File DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ File,$/;" e enum:MessageContentMatchKind file:
File formats .docs/Getting-started.md /^## File formats$/;" s chapter:Getting started
FileSize DiscordChatExporter.Core/Discord/Data/Common/FileSize.cs /^public partial record struct FileSize$/;" s
FileSize DiscordChatExporter.Core/Discord/Data/Common/FileSize.cs /^public readonly partial record struct FileSize(long TotalBytes)$/;" m
FileSizePartitionLimit DiscordChatExporter.Core/Exporting/Partitioning/FileSizePartitionLimit.cs /^internal class FileSizePartitionLimit(long limit) : PartitionLimit$/;" m
Filter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ public static readonly TextParser<MessageFilter> Filter = ChainedFilter.Token().AtEnd();$/;" f class:FilterGrammar
FilterGrammar DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^internal static class FilterGrammar$/;" c
FilterSpecs DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^public class FilterSpecs$/;" c
FilterTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake FilterTestCases { get; } = Snowflake.Parse("866744075033641020");$/;" p class:ChannelIds
Filtering messages .docs/Using-the-CLI.md /^#### Filtering messages$/;" t section:Using the CLI""Export a specific channel
First steps .docs/Troubleshooting.md /^## First steps$/;" s chapter:Troubleshooting
Format DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public ExportFormat Format { get; }$/;" p class:ExportRequest
FormatAsync DiscordChatExporter.Core/Exporting/HtmlMarkdownVisitor.cs /^ public static async ValueTask<string> FormatAsync($/;" m class:HtmlMarkdownVisitor
FormatAsync DiscordChatExporter.Core/Exporting/PlainTextMarkdownVisitor.cs /^ public static async ValueTask<string> FormatAsync($/;" m class:PlainTextMarkdownVisitor
FormatPath DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ private static string FormatPath($/;" m class:ExportRequest file:
FormattingKind DiscordChatExporter.Core/Markdown/FormattingKind.cs /^internal enum FormattingKind$/;" g
FormattingNode DiscordChatExporter.Core/Markdown/FormattingNode.cs /^internal record FormattingNode(FormattingKind Kind, IReadOnlyList<MarkdownNode> Children)$/;" m
FromBytes DiscordChatExporter.Core/Discord/Data/Common/FileSize.cs /^ public static FileSize FromBytes(long bytes) => new(bytes);$/;" m struct:FileSize
FromFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> FromFilter = Span.EqualToIgnoreCase("from:/;" f class:FilterGrammar file:
FromMessageFilter DiscordChatExporter.Core/Exporting/Filtering/FromMessageFilter.cs /^internal class FromMessageFilter(string value) : MessageFilter$/;" m
GUI or CLI? .docs/Getting-started.md /^## GUI or CLI?$/;" s chapter:Getting started
GatewayGuildMembers DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayGuildMembers = 16384,$/;" e enum:ApplicationFlags file:
GatewayGuildMembersLimited DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayGuildMembersLimited = 32768,$/;" e enum:ApplicationFlags file:
GatewayMessageContent DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayMessageContent = 262144,$/;" e enum:ApplicationFlags file:
GatewayMessageContentLimited DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayMessageContentLimited = 524288,$/;" e enum:ApplicationFlags file:
GatewayPresence DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayPresence = 4096,$/;" e enum:ApplicationFlags file:
GatewayPresenceLimited DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ GatewayPresenceLimited = 8192,$/;" e enum:ApplicationFlags file:
General questions .docs/Troubleshooting.md /^## General questions$/;" s chapter:Troubleshooting
Generating the filename and output directory dynamically .docs/Using-the-CLI.md /^#### Generating the filename and output directory dynamically$/;" t section:Using the CLI""Export a specific channel
GenericExtensions DiscordChatExporter.Core/Utils/Extensions/GenericExtensions.cs /^public static class GenericExtensions$/;" c
GetAwaiter DiscordChatExporter.Core/Utils/Extensions/AsyncCollectionExtensions.cs /^ public static ValueTaskAwaiter<IReadOnlyList<T>> GetAwaiter<T>($/;" m class:AsyncCollectionExtensions
GetChannelIconUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetChannelIconUrl(Snowflake channelId, string iconHash, int size = 512)/;" m class:ImageCdn
GetChannelsCommand DiscordChatExporter.Cli/Commands/GetChannelsCommand.cs /^public class GetChannelsCommand : DiscordCommandBase$/;" c
GetCustomEmojiUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetCustomEmojiUrl(Snowflake emojiId, bool isAnimated = false) =>$/;" m class:ImageCdn
GetDefaultOutputFileName DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public static string GetDefaultOutputFileName($/;" m class:ExportRequest
GetDirectChannelsCommand DiscordChatExporter.Cli/Commands/GetDirectChannelsCommand.cs /^public class GetDirectChannelsCommand : DiscordCommandBase$/;" c
GetDisplayName DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ public static string GetDisplayName(this ExportFormat format) =>$/;" m class:ExportFormatExtensions
GetFallbackContent DiscordChatExporter.Core/Exporting/PlainTextMessageExtensions.cs /^ public static string GetFallbackContent(this Message message) =>$/;" m class:PlainTextMessageExtensions
GetFallbackUserAvatarUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetFallbackUserAvatarUrl(int index = 0) =>$/;" m class:ImageCdn
GetFileExtension DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ public static string GetFileExtension(this ExportFormat format) =>$/;" m class:ExportFormatExtensions
GetFileNameFromUrl DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs /^ private static string GetFileNameFromUrl(string url)$/;" m class:ExportAssetDownloader file:
GetGuildIconUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetGuildIconUrl(Snowflake guildId, string iconHash, int size = 512) =>$/;" m class:ImageCdn
GetGuildsCommand DiscordChatExporter.Cli/Commands/GetGuildsCommand.cs /^public class GetGuildsCommand : DiscordCommandBase$/;" c
GetMemberAvatarUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetMemberAvatarUrl($/;" m class:ImageCdn
GetMessageAsHtmlAsync DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<IElement> GetMessageAsHtmlAsync($/;" m class:ExportWrapper
GetMessageAsJsonAsync DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<JsonElement> GetMessageAsJsonAsync($/;" m class:ExportWrapper
GetOutputBaseFilePath DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ private static string GetOutputBaseFilePath($/;" m class:ExportRequest file:
GetPartitionFilePath DiscordChatExporter.Core/Exporting/MessageExporter.cs /^ private static string GetPartitionFilePath(string baseFilePath, int partitionIndex)$/;" m class:MessageExporter file:
GetSelfAndChildren DiscordChatExporter.Core/Utils/Extensions/ExceptionExtensions.cs /^ public static IReadOnlyList<Exception> GetSelfAndChildren(this Exception exception)$/;" m class:ExceptionExtensions
GetStandardEmojiUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetStandardEmojiUrl(string emojiName)$/;" m class:ImageCdn
GetStickerUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetStickerUrl(Snowflake stickerId, string format = "png") =>$/;" m class:ImageCdn
GetUrlHash DiscordChatExporter.Core/Exporting/ExportAssetDownloader.cs /^ private static string GetUrlHash(string url)$/;" m class:ExportAssetDownloader file:
GetUserAvatarUrl DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^ public static string GetUserAvatarUrl(Snowflake userId, string avatarHash, int size = 512) =/;" m class:ImageCdn
Getting started .docs/Getting-started.md /^# Getting started$/;" c
Gif DiscordChatExporter.Core/Discord/Data/StickerFormat.cs /^ Gif = 4,$/;" e enum:StickerFormat file:
Gifv DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^ Gifv,$/;" e enum:EmbedKind file:
GroupedFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> GroupedFilter =$/;" f class:FilterGrammar file:
GroupingTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake GroupingTestCases { get; } = Snowflake.Parse("992092091545034842");$/;" p class:ChannelIds
Guide .docs/Using-the-GUI.md /^## Guide$/;" s chapter:Using the GUI
GuideCommand DiscordChatExporter.Cli/Commands/GuideCommand.cs /^public class GuideCommand : ICommand$/;" c
Guides .docs/Readme.md /^## Guides$/;" s chapter:Home
Guild DiscordChatExporter.Core/Discord/Data/Guild.cs /^public partial record Guild$/;" p
Guild DiscordChatExporter.Core/Discord/Data/Guild.cs /^public partial record Guild(Snowflake Id, string Name, string IconUrl) : IHasId$/;" m
Guild DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public Guild Guild { get; }$/;" p class:ExportRequest
GuildCategory DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildCategory = 4,$/;" e enum:ChannelKind file:
GuildDirectory DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildDirectory = 14,$/;" e enum:ChannelKind file:
GuildForum DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildForum = 15,$/;" e enum:ChannelKind file:
GuildId DiscordChatExporter.Cli/Commands/ExportGuildCommand.cs /^ public required Snowflake GuildId { get; init; }$/;" p class:ExportGuildCommand
GuildId DiscordChatExporter.Cli/Commands/GetChannelsCommand.cs /^ public required Snowflake GuildId { get; init; }$/;" p class:GetChannelsCommand
GuildMemberJoin DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ GuildMemberJoin = 7,$/;" e enum:MessageKind file:
GuildNews DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildNews = 5,$/;" e enum:ChannelKind file:
GuildNewsThread DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildNewsThread = 10,$/;" e enum:ChannelKind file:
GuildPrivateThread DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildPrivateThread = 12,$/;" e enum:ChannelKind file:
GuildPublicThread DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildPublicThread = 11,$/;" e enum:ChannelKind file:
GuildStageVoice DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildStageVoice = 13,$/;" e enum:ChannelKind file:
GuildTextChat DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildTextChat = 0,$/;" e enum:ChannelKind file:
GuildVoiceChat DiscordChatExporter.Core/Discord/Data/ChannelKind.cs /^ GuildVoiceChat = 2,$/;" e enum:ChannelKind file:
HTML .docs/Getting-started.md /^### HTML$/;" S section:Getting started""File formats
HasFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> HasFilter = Span.EqualToIgnoreCase("has:")$/;" f class:FilterGrammar file:
HasMessageFilter DiscordChatExporter.Core/Exporting/Filtering/HasMessageFilter.cs /^internal class HasMessageFilter(MessageContentMatchKind kind) : MessageFilter$/;" m
HasThread DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ HasThread = 32,$/;" e enum:MessageFlags file:
HeadingNode DiscordChatExporter.Core/Markdown/HeadingNode.cs /^internal record HeadingNode(int Level, IReadOnlyList<MarkdownNode> Children)$/;" m
HeadingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> HeadingNodeMatcher =$/;" f class:MarkdownParser file:
Here DiscordChatExporter.Core/Markdown/MentionKind.cs /^ Here,$/;" e enum:MentionKind file:
HereMentionNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> HereMentionNodeMatcher =$/;" f class:MarkdownParser file:
HiddenLinkNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> HiddenLinkNodeMatcher =$/;" f class:MarkdownParser file:
Home .docs/Readme.md /^# Home$/;" c
How can I find my token? .docs/Troubleshooting.md /^### How can I find my token?$/;" S section:Troubleshooting""First steps
How can I reset my token? .docs/Troubleshooting.md /^### How can I reset my token?$/;" S section:Troubleshooting""General questions
How can I set DCE to export automatically at certain times? .docs/Troubleshooting.md /^### How can I set DCE to export automatically at certain times?$/;" S section:Troubleshooting""First steps
How do I use the CLI? .docs/Troubleshooting.md /^### How do I use the CLI?$/;" S section:Troubleshooting""CLI
How to get a Bot Token .docs/Token-and-IDs.md /^## How to get a Bot Token$/;" s chapter:Obtaining Token and Channel IDs
How to get a Server ID or a Channel ID .docs/Token-and-IDs.md /^## How to get a Server ID or a Channel ID$/;" s chapter:Obtaining Token and Channel IDs
How to get a User Token .docs/Token-and-IDs.md /^## How to get a User Token$/;" s chapter:Obtaining Token and Channel IDs
Html DiscordChatExporter.Cli.Tests/Utils/Html.cs /^internal static class Html$/;" c
HtmlAttachmentSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlAttachmentSpecs.cs /^public class HtmlAttachmentSpecs$/;" c
HtmlContentSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlContentSpecs.cs /^public class HtmlContentSpecs$/;" c
HtmlDark DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ HtmlDark,$/;" e enum:ExportFormat file:
HtmlEmbedSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^public class HtmlEmbedSpecs$/;" c
HtmlEncode DiscordChatExporter.Core/Exporting/HtmlMarkdownVisitor.cs /^ private static string HtmlEncode(string text) => WebUtility.HtmlEncode(text);$/;" m class:HtmlMarkdownVisitor file:
HtmlGroupingSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlGroupingSpecs.cs /^public class HtmlGroupingSpecs$/;" c
HtmlLight DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ HtmlLight,$/;" e enum:ExportFormat file:
HtmlMarkdownSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^public class HtmlMarkdownSpecs$/;" c
HtmlMarkdownVisitor DiscordChatExporter.Core/Exporting/HtmlMarkdownVisitor.cs /^internal partial class HtmlMarkdownVisitor$/;" c
HtmlMarkdownVisitor DiscordChatExporter.Core/Exporting/HtmlMarkdownVisitor.cs /^internal partial class HtmlMarkdownVisitor($/;" m
HtmlMentionSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlMentionSpecs.cs /^public class HtmlMentionSpecs$/;" c
HtmlMessageExtensions DiscordChatExporter.Core/Exporting/HtmlMessageExtensions.cs /^internal static class HtmlMessageExtensions$/;" c
HtmlMessageWriter DiscordChatExporter.Core/Exporting/HtmlMessageWriter.cs /^internal class HtmlMessageWriter(Stream stream, ExportContext context, string themeName)$/;" m
HtmlReplySpecs DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^public class HtmlReplySpecs$/;" c
HtmlStickerSpecs DiscordChatExporter.Cli.Tests/Specs/HtmlStickerSpecs.cs /^public class HtmlStickerSpecs$/;" c
Http DiscordChatExporter.Core/Utils/Http.cs /^public static class Http$/;" c
HttpExtensions DiscordChatExporter.Core/Utils/Extensions/HttpExtensions.cs /^public static class HttpExtensions$/;" c
HyperLink DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public HyperLink() => InitializeComponent();$/;" m class:HyperLink
HyperLink DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^public partial class HyperLink : UserControl$/;" c
I can't export Direct Messages .docs/Troubleshooting.md /^### I can't export Direct Messages$/;" S section:Troubleshooting""CLI
I can't find Docker exported chats .docs/Troubleshooting.md /^### I can't find Docker exported chats$/;" S section:Troubleshooting""CLI
I see messages in the export, but they have no content .docs/Troubleshooting.md /^### I see messages in the export, but they have no content$/;" S section:Troubleshooting""First steps
IContainerNode DiscordChatExporter.Core/Markdown/IContainerNode.cs /^internal interface IContainerNode$/;" i
IHasId DiscordChatExporter.Core/Discord/Data/Common/IHasId.cs /^public interface IHasId$/;" i
IMatcher DiscordChatExporter.Core/Markdown/Parsing/IMatcher.cs /^internal interface IMatcher<in TContext, TValue>$/;" i
INotifyPropertyChanged DiscordChatExporter.Gui/Utils/Extensions/NotifyPropertyChangedExtensions.cs /^ where TOwner : INotifyPropertyChanged$/;" p class:NotifyPropertyChangedExtensions
I_can_export_a_channel_and_download_all_referenced_assets DiscordChatExporter.Cli.Tests/Specs/SelfContainedSpecs.cs /^ public async Task I_can_export_a_channel_and_download_all_referenced_assets()$/;" m class:SelfContainedSpecs
I_can_export_a_channel_and_the_messages_are_grouped_according_to_their_author_and_timestamps DiscordChatExporter.Cli.Tests/Specs/HtmlGroupingSpecs.cs /^ public async Task I_can_export_a_channel_and_the_messages_are_grouped_according_to_their_aut/;" m class:HtmlGroupingSpecs
I_can_export_a_channel_in_the_CSV_format DiscordChatExporter.Cli.Tests/Specs/CsvContentSpecs.cs /^ public async Task I_can_export_a_channel_in_the_CSV_format()$/;" m class:CsvContentSpecs
I_can_export_a_channel_in_the_HTML_format DiscordChatExporter.Cli.Tests/Specs/HtmlContentSpecs.cs /^ public async Task I_can_export_a_channel_in_the_HTML_format()$/;" m class:HtmlContentSpecs
I_can_export_a_channel_in_the_JSON_format DiscordChatExporter.Cli.Tests/Specs/JsonContentSpecs.cs /^ public async Task I_can_export_a_channel_in_the_JSON_format()$/;" m class:JsonContentSpecs
I_can_export_a_channel_in_the_TXT_format DiscordChatExporter.Cli.Tests/Specs/PlainTextContentSpecs.cs /^ public async Task I_can_export_a_channel_in_the_TXT_format()$/;" m class:PlainTextContentSpecs
I_can_export_a_channel_that_contains_a_message_cross_posted_from_another_guild DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_cross_posted_from_another_g/;" m class:HtmlReplySpecs
I_can_export_a_channel_that_contains_a_message_that_replies_to_a_deleted_message DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_that_replies_to_a_deleted_m/;" m class:HtmlReplySpecs
I_can_export_a_channel_that_contains_a_message_that_replies_to_an_empty_message_with_an_attachment DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_that_replies_to_an_empty_me/;" m class:HtmlReplySpecs
I_can_export_a_channel_that_contains_a_message_that_replies_to_an_interaction DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_that_replies_to_an_interact/;" m class:HtmlReplySpecs
I_can_export_a_channel_that_contains_a_message_that_replies_to_another_message DiscordChatExporter.Cli.Tests/Specs/HtmlReplySpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_that_replies_to_another_mes/;" m class:HtmlReplySpecs
I_can_export_a_channel_that_contains_a_message_with_a_GIFV_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_GIFV_embed()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_GIFV_embed_and_the_text_is_hidden_if_it_only_contains_the_video_link DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_GIFV_embed_and_the_t/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_Lottie_sticker DiscordChatExporter.Cli.Tests/Specs/HtmlStickerSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_Lottie_sticker()$/;" m class:HtmlStickerSpecs
I_can_export_a_channel_that_contains_a_message_with_a_Lottie_sticker DiscordChatExporter.Cli.Tests/Specs/JsonStickerSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_Lottie_sticker()$/;" m class:JsonStickerSpecs
I_can_export_a_channel_that_contains_a_message_with_a_PNG_sticker DiscordChatExporter.Cli.Tests/Specs/HtmlStickerSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_PNG_sticker()$/;" m class:HtmlStickerSpecs
I_can_export_a_channel_that_contains_a_message_with_a_PNG_sticker DiscordChatExporter.Cli.Tests/Specs/JsonStickerSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_PNG_sticker()$/;" m class:JsonStickerSpecs
I_can_export_a_channel_that_contains_a_message_with_a_Spotify_track_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_Spotify_track_embed(/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_Twitch_clip_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_Twitch_clip_embed()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_Twitter_post_embed_that_includes_multiple_images DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_Twitter_post_embed_t/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_YouTube_video_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_YouTube_video_embed(/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_generic_attachment DiscordChatExporter.Cli.Tests/Specs/HtmlAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_generic_attachment()$/;" m class:HtmlAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_a_generic_attachment DiscordChatExporter.Cli.Tests/Specs/JsonAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_generic_attachment()$/;" m class:JsonAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_a_guild_invite DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_guild_invite()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_rich_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_rich_embed()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_rich_embed DiscordChatExporter.Cli.Tests/Specs/JsonEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_rich_embed()$/;" m class:JsonEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_role_mention DiscordChatExporter.Cli.Tests/Specs/HtmlMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_role_mention()$/;" m class:HtmlMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_role_mention DiscordChatExporter.Cli.Tests/Specs/JsonMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_role_mention()$/;" m class:JsonMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_text_channel_mention DiscordChatExporter.Cli.Tests/Specs/HtmlMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_text_channel_mention/;" m class:HtmlMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_text_channel_mention DiscordChatExporter.Cli.Tests/Specs/JsonMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_text_channel_mention/;" m class:JsonMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker()$/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_full_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_full_long_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_long_date_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_long_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_relative_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_short_date_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_the_short_format DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_timestamp_marker_in_/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_a_user_mention DiscordChatExporter.Cli.Tests/Specs/HtmlMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_user_mention()$/;" m class:HtmlMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_user_mention DiscordChatExporter.Cli.Tests/Specs/JsonMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_user_mention()$/;" m class:JsonMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_video_attachment DiscordChatExporter.Cli.Tests/Specs/HtmlAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_video_attachment()$/;" m class:HtmlAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_a_video_attachment DiscordChatExporter.Cli.Tests/Specs/JsonAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_video_attachment()$/;" m class:JsonAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_a_video_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_video_embed()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_a_voice_channel_mention DiscordChatExporter.Cli.Tests/Specs/HtmlMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_voice_channel_mentio/;" m class:HtmlMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_a_voice_channel_mention DiscordChatExporter.Cli.Tests/Specs/JsonMentionSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_a_voice_channel_mentio/;" m class:JsonMentionSpecs
I_can_export_a_channel_that_contains_a_message_with_an_audio_attachment DiscordChatExporter.Cli.Tests/Specs/HtmlAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_audio_attachment()$/;" m class:HtmlAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_an_audio_attachment DiscordChatExporter.Cli.Tests/Specs/JsonAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_audio_attachment()$/;" m class:JsonAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_an_image_attachment DiscordChatExporter.Cli.Tests/Specs/HtmlAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_image_attachment()$/;" m class:HtmlAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_an_image_attachment DiscordChatExporter.Cli.Tests/Specs/JsonAttachmentSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_image_attachment()$/;" m class:JsonAttachmentSpecs
I_can_export_a_channel_that_contains_a_message_with_an_image_embed DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_image_embed()$/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_an_image_embed_and_the_text_is_hidden_if_it_only_contains_the_image_link DiscordChatExporter.Cli.Tests/Specs/HtmlEmbedSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_image_embed_and_the/;" m class:HtmlEmbedSpecs
I_can_export_a_channel_that_contains_a_message_with_an_invalid_timestamp_marker DiscordChatExporter.Cli.Tests/Specs/HtmlMarkdownSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_an_invalid_timestamp_m/;" m class:HtmlMarkdownSpecs
I_can_export_a_channel_that_contains_a_message_with_custom_inline_emoji_and_have_them_listed_separately DiscordChatExporter.Cli.Tests/Specs/JsonEmojiSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_custom_inline_emoji_an/;" m class:JsonEmojiSpecs
I_can_export_a_channel_that_contains_a_message_with_inline_emoji_and_have_them_listed_separately DiscordChatExporter.Cli.Tests/Specs/JsonEmojiSpecs.cs /^ public async Task I_can_export_a_channel_that_contains_a_message_with_inline_emoji_and_have_/;" m class:JsonEmojiSpecs
I_can_export_a_channel_with_partitioning_based_on_file_size DiscordChatExporter.Cli.Tests/Specs/PartitioningSpecs.cs /^ public async Task I_can_export_a_channel_with_partitioning_based_on_file_size()$/;" m class:PartitioningSpecs
I_can_export_a_channel_with_partitioning_based_on_message_count DiscordChatExporter.Cli.Tests/Specs/PartitioningSpecs.cs /^ public async Task I_can_export_a_channel_with_partitioning_based_on_message_count()$/;" m class:PartitioningSpecs
I_can_filter_the_export_to_only_include_messages_sent_after_the_specified_date DiscordChatExporter.Cli.Tests/Specs/DateRangeSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_sent_after_the_specified_/;" m class:DateRangeSpecs
I_can_filter_the_export_to_only_include_messages_sent_before_the_specified_date DiscordChatExporter.Cli.Tests/Specs/DateRangeSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_sent_before_the_specified/;" m class:DateRangeSpecs
I_can_filter_the_export_to_only_include_messages_sent_between_the_specified_dates DiscordChatExporter.Cli.Tests/Specs/DateRangeSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_sent_between_the_specifie/;" m class:DateRangeSpecs
I_can_filter_the_export_to_only_include_messages_that_contain_guild_invites DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_contain_guild_invite/;" m class:FilterSpecs
I_can_filter_the_export_to_only_include_messages_that_contain_images DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_contain_images()$/;" m class:FilterSpecs
I_can_filter_the_export_to_only_include_messages_that_contain_the_specified_mention DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_contain_the_specifie/;" m class:FilterSpecs
I_can_filter_the_export_to_only_include_messages_that_contain_the_specified_text DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_contain_the_specifie/;" m class:FilterSpecs
I_can_filter_the_export_to_only_include_messages_that_have_been_pinned DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_have_been_pinned()$/;" m class:FilterSpecs
I_can_filter_the_export_to_only_include_messages_that_were_sent_by_the_specified_author DiscordChatExporter.Cli.Tests/Specs/FilterSpecs.cs /^ public async Task I_can_filter_the_export_to_only_include_messages_that_were_sent_by_the_spe/;" m class:FilterSpecs
Id DiscordChatExporter.Core/Discord/Data/Common/IHasId.cs /^ Snowflake Id { get; }$/;" p interface:IHasId
IgnoredEmojiTextNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> IgnoredEmojiTextNodeMatcher /;" f class:MarkdownParser file:
Image DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^ Image,$/;" e enum:EmbedKind file:
Image DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Image,$/;" e enum:MessageContentMatchKind file:
ImageCdn DiscordChatExporter.Core/Discord/Data/Common/ImageCdn.cs /^public static class ImageCdn$/;" c
In Chrome .docs/Token-and-IDs.md /^#### In Chrome$/;" t subsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser
In Firefox .docs/Token-and-IDs.md /^#### In Firefox$/;" t subsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser
IncludeDirectChannels DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public bool IncludeDirectChannels { get; init; } = true;$/;" p class:ExportAllCommand
IncludeGuildChannels DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public bool IncludeGuildChannels { get; init; } = true;$/;" p class:ExportAllCommand
IncludeVoiceChannels DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public bool IncludeVoiceChannels { get; init; } = true;$/;" p class:ExportAllCommand
IncludeVoiceChannels DiscordChatExporter.Cli/Commands/ExportGuildCommand.cs /^ public bool IncludeVoiceChannels { get; init; } = true;$/;" p class:ExportGuildCommand
IncludeVoiceChannels DiscordChatExporter.Cli/Commands/GetChannelsCommand.cs /^ public bool IncludeVoiceChannels { get; init; } = true;$/;" p class:GetChannelsCommand
Including threads .docs/Using-the-CLI.md /^#### Including threads$/;" t subsection:Using the CLI""Export a specific channel""Export channels from a specific server
Including voice channels .docs/Using-the-CLI.md /^#### Including voice channels$/;" t subsection:Using the CLI""Export a specific channel""Export channels from a specific server
Initialize DiscordChatExporter.Gui/App.axaml.cs /^ public override void Initialize()$/;" m class:App
Initialize DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private void Initialize()$/;" m class:DashboardViewModel file:
InitializeTheme DiscordChatExporter.Gui/App.axaml.cs /^ private void InitializeTheme()$/;" m class:App file:
InlineCodeBlockNode DiscordChatExporter.Core/Markdown/InlineCodeBlockNode.cs /^internal record InlineCodeBlockNode(string Code) : MarkdownNode;$/;" m
InlineCodeBlockNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> InlineCodeBlockNodeMatcher =$/;" f class:MarkdownParser file:
Installation & Usage .docs/Readme.md /^## Installation & Usage$/;" s chapter:Home
Instance DiscordChatExporter.Gui/Converters/ChannelToHierarchicalNameStringConverter.cs /^ public static ChannelToHierarchicalNameStringConverter Instance { get; } = new();$/;" p class:ChannelToHierarchicalNameStringConverter
Instance DiscordChatExporter.Gui/Converters/ExportFormatToStringConverter.cs /^ public static ExportFormatToStringConverter Instance { get; } = new();$/;" p class:ExportFormatToStringConverter
Instance DiscordChatExporter.Gui/Converters/LocaleToDisplayNameStringConverter.cs /^ public static LocaleToDisplayNameStringConverter Instance { get; } = new();$/;" p class:LocaleToDisplayNameStringConverter
Instance DiscordChatExporter.Gui/Converters/SnowflakeToTimestampStringConverter.cs /^ public static SnowflakeToTimestampStringConverter Instance { get; } = new();$/;" p class:SnowflakeToTimestampStringConverter
Interaction DiscordChatExporter.Core/Discord/Data/Interaction.cs /^public record Interaction(Snowflake Id, string Name, User User)$/;" m
Internationalization DiscordChatExporter.Gui/Utils/Internationalization.cs /^internal static class Internationalization$/;" c
InvalidFileNameChars DiscordChatExporter.Core/Utils/PathEx.cs /^ private static readonly HashSet<char> InvalidFileNameChars =$/;" f class:PathEx file:
Invite DiscordChatExporter.Core/Discord/Data/Invite.cs /^public record Invite(string Code, Guild Guild, Channel? Channel)$/;" m
Invite DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Invite,$/;" e enum:MessageContentMatchKind file:
Is24Hours DiscordChatExporter.Gui/Utils/Internationalization.cs /^ public static bool Is24Hours =>$/;" f class:Internationalization
IsAutoUpdateEnabled DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public bool IsAutoUpdateEnabled$/;" p class:SettingsViewModel
IsBotToken DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^ public bool IsBotToken { get; init; } = false;$/;" p class:DiscordCommandBase
IsCancelButtonVisible DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ public bool IsCancelButtonVisible => !string.IsNullOrWhiteSpace(CancelButtonText);$/;" f class:MessageBoxViewModel
IsContentHidden DiscordChatExporter.Core/Exporting/HtmlMessageExtensions.cs /^ public static bool IsContentHidden(this Message message)$/;" m class:HtmlMessageExtensions
IsDefaultButtonVisible DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ public bool IsDefaultButtonVisible => !string.IsNullOrWhiteSpace(DefaultButtonText);$/;" f class:MessageBoxViewModel
IsDevelopmentBuild DiscordChatExporter.Gui/Program.cs /^ public static bool IsDevelopmentBuild { get; } = Version.Major is <= 0 or >= 999;$/;" p class:Program
IsMatch DiscordChatExporter.Core/Exporting/Filtering/MessageFilter.cs /^ public abstract bool IsMatch(Message message);$/;" m class:MessageFilter
IsProgressIndeterminate DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ public bool IsProgressIndeterminate => IsBusy && Progress.Current.Fraction is <= 0 or >= 1;$/;" f class:DashboardViewModel
IsReached DiscordChatExporter.Core/Exporting/Partitioning/NullPartitionLimit.cs /^ public override bool IsReached(long messagesWritten, long bytesWritten) => false;$/;" m class:NullPartitionLimit
IsReached DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^ public abstract bool IsReached(long messagesWritten, long bytesWritten);$/;" m class:PartitionLimit
IsRunningInContainer DiscordChatExporter.Core/Utils/Docker.cs /^ public static bool IsRunningInContainer { get; } =$/;" p class:Docker
IsTokenPersisted DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public bool IsTokenPersisted$/;" p class:SettingsViewModel
IsUkraineSupportMessageDisabled DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public bool IsUkraineSupportMessageDisabled { get; init; } = false;$/;" p class:ExportCommandBase
IsUtcNormalizationEnabled DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public bool IsUtcNormalizationEnabled { get; init; } = false;$/;" p class:ExportCommandBase
IsUtcNormalizationEnabled DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public bool IsUtcNormalizationEnabled { get; }$/;" p class:ExportRequest
IsUtcNormalizationEnabled DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public bool IsUtcNormalizationEnabled$/;" p class:SettingsViewModel
Italic DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Italic,$/;" e enum:FormattingKind file:
ItalicAltFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> ItalicAltFormattingNodeMatch/;" f class:MarkdownParser file:
ItalicBoldFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ > ItalicBoldFormattingNodeMatcher = new RegexMatcher<MarkdownContext, MarkdownNode>($/;" f class:MarkdownParser file:
ItalicFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> ItalicFormattingNodeMatcher /;" f class:MarkdownParser file:
ItalicUnderlineFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ > ItalicUnderlineFormattingNodeMatcher = new RegexMatcher<MarkdownContext, MarkdownNode>($/;" f class:MarkdownParser file:
JSON .docs/Getting-started.md /^### JSON$/;" S section:Getting started""File formats
Json DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ Json,$/;" e enum:ExportFormat file:
JsonAttachmentSpecs DiscordChatExporter.Cli.Tests/Specs/JsonAttachmentSpecs.cs /^public class JsonAttachmentSpecs$/;" c
JsonContentSpecs DiscordChatExporter.Cli.Tests/Specs/JsonContentSpecs.cs /^public class JsonContentSpecs$/;" c
JsonEmbedSpecs DiscordChatExporter.Cli.Tests/Specs/JsonEmbedSpecs.cs /^public class JsonEmbedSpecs$/;" c
JsonEmojiSpecs DiscordChatExporter.Cli.Tests/Specs/JsonEmojiSpecs.cs /^public class JsonEmojiSpecs$/;" c
JsonMentionSpecs DiscordChatExporter.Cli.Tests/Specs/JsonMentionSpecs.cs /^public class JsonMentionSpecs$/;" c
JsonMessageWriter DiscordChatExporter.Core/Exporting/JsonMessageWriter.cs /^internal class JsonMessageWriter(Stream stream, ExportContext context)$/;" m
JsonStickerSpecs DiscordChatExporter.Cli.Tests/Specs/JsonStickerSpecs.cs /^public class JsonStickerSpecs$/;" c
Light DiscordChatExporter.Gui/Framework/ThemeVariant.cs /^ Light,$/;" e enum:ThemeVariant file:
Link DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^ Link,$/;" e enum:EmbedKind file:
Link DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Link,$/;" e enum:MessageContentMatchKind file:
LinkNode DiscordChatExporter.Core/Markdown/LinkNode.cs /^internal record LinkNode(string Url, IReadOnlyList<MarkdownNode> Children)$/;" m
List channels in a server .docs/Using-the-CLI.md /^### List channels in a server$/;" S section:Using the CLI""Export a specific channel
List direct message channels .docs/Using-the-CLI.md /^### List direct message channels$/;" S section:Using the CLI""Export a specific channel
List servers .docs/Using-the-CLI.md /^### List servers$/;" S section:Using the CLI""Export a specific channel
ListItemNode DiscordChatExporter.Core/Markdown/ListItemNode.cs /^internal record ListItemNode(IReadOnlyList<MarkdownNode> Children) : MarkdownNode, IContainerNod/;" m
ListNode DiscordChatExporter.Core/Markdown/ListNode.cs /^internal record ListNode(IReadOnlyList<ListItemNode> Items) : MarkdownNode;$/;" m
ListNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> ListNodeMatcher =$/;" f class:MarkdownParser file:
LoadAsync DiscordChatExporter.Core/Discord/Dump/DataDump.cs /^ public static async ValueTask<DataDump> LoadAsync($/;" m class:DataDump
Loading DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ Loading = 128,$/;" e enum:MessageFlags file:
Loading the .plist into launchctl .docs/Scheduling-MacOS.md /^## Loading the .plist into launchctl$/;" s chapter:Scheduling exports on macOS
Locale DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public string? Locale { get; init; }$/;" p class:ExportCommandBase
Locale DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public string? Locale { get; }$/;" p class:ExportRequest
Locale DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public string Locale$/;" p class:SettingsViewModel
LocaleToDisplayNameStringConverter DiscordChatExporter.Gui/Converters/LocaleToDisplayNameStringConverter.cs /^public class LocaleToDisplayNameStringConverter : IValueConverter$/;" c
Locker DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ private static readonly AsyncKeyedLocker<string> Locker = new();$/;" f class:ExportWrapper file:
Log DiscordChatExporter.Core/Utils/Extensions/SuperpowerExtensions.cs /^ public static TextParser<T> Log<T>(this TextParser<T> parser, string description) =>$/;" m class:SuperpowerExtensions
Lottie DiscordChatExporter.Core/Discord/Data/StickerFormat.cs /^ Lottie = 3,$/;" e enum:StickerFormat file:
Main DiscordChatExporter.Cli/Program.cs /^ public static async Task<int> Main(string[] args) =>$/;" m class:Program
Main DiscordChatExporter.Gui/Program.cs /^ public static int Main(string[] args)$/;" m class:Program
MainView DiscordChatExporter.Gui/Views/MainView.axaml.cs /^ public MainView() => InitializeComponent();$/;" m class:MainView
MainView DiscordChatExporter.Gui/Views/MainView.axaml.cs /^public partial class MainView : Window<MainViewModel>$/;" c
MainViewModel DiscordChatExporter.Gui/ViewModels/MainViewModel.cs /^public partial class MainViewModel($/;" m
MarkdownContext DiscordChatExporter.Core/Markdown/Parsing/MarkdownContext.cs /^internal readonly record struct MarkdownContext(int Depth = 0);$/;" m
MarkdownNode DiscordChatExporter.Core/Markdown/EmojiNode.cs /^) : MarkdownNode$/;" p
MarkdownNode DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ where TNode : MarkdownNode$/;" p class:MarkdownParser
MarkdownNode DiscordChatExporter.Core/Markdown/TimestampNode.cs /^internal record TimestampNode(DateTimeOffset? Instant, string? Format) : MarkdownNode$/;" p
MarkdownParser DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^internal static partial class MarkdownParser$/;" c
MarkdownTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake MarkdownTestCases { get; } = Snowflake.Parse("866459526819348521");$/;" p class:ChannelIds
MarkdownVisitor DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^internal abstract class MarkdownVisitor$/;" c
MaskedLinkNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> MaskedLinkNodeMatcher =$/;" f class:MarkdownParser file:
MatchAll DiscordChatExporter.Core/Markdown/Parsing/IMatcher.cs /^ public static IEnumerable<ParsedMatch<TValue>> MatchAll<TContext, TValue>($/;" m class:MatcherExtensions
MatcherExtensions DiscordChatExporter.Core/Markdown/Parsing/IMatcher.cs /^internal static class MatcherExtensions$/;" c
Member DiscordChatExporter.Core/Discord/Data/Member.cs /^public partial record Member$/;" p
Member DiscordChatExporter.Core/Discord/Data/Member.cs /^public partial record Member($/;" m
MentionKind DiscordChatExporter.Core/Markdown/MentionKind.cs /^internal enum MentionKind$/;" g
MentionTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake MentionTestCases { get; } = Snowflake.Parse("866458801389174794");$/;" p class:ChannelIds
MentionsFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> MentionsFilter = Span.EqualToIgnoreCase($/;" f class:FilterGrammar file:
MentionsMessageFilter DiscordChatExporter.Core/Exporting/Filtering/MentionsMessageFilter.cs /^internal class MentionsMessageFilter(string value) : MessageFilter$/;" m
Message DiscordChatExporter.Core/Discord/Data/Message.cs /^public partial record Message$/;" p
Message DiscordChatExporter.Core/Discord/Data/Message.cs /^public partial record Message($/;" m
Message filters .docs/Message-filters.md /^# Message filters$/;" c
MessageBox DiscordChatExporter.Gui/Utils/NativeMethods.cs /^ public static extern int MessageBox(nint hWnd, string text, string caption, uint type);$/;" m class:NativeMethods.Windows file:
MessageBoxView DiscordChatExporter.Gui/Views/Dialogs/MessageBoxView.axaml.cs /^ public MessageBoxView() => InitializeComponent();$/;" m class:MessageBoxView
MessageBoxView DiscordChatExporter.Gui/Views/Dialogs/MessageBoxView.axaml.cs /^public partial class MessageBoxView : UserControl<MessageBoxViewModel>$/;" c
MessageBoxViewModel DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^public partial class MessageBoxViewModel : DialogViewModelBase$/;" c
MessageContentMatchKind DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^internal enum MessageContentMatchKind$/;" g
MessageCountPartitionLimit DiscordChatExporter.Core/Exporting/Partitioning/MessageCountPartitionLimit.cs /^internal class MessageCountPartitionLimit(long limit) : PartitionLimit$/;" m
MessageExporter DiscordChatExporter.Core/Exporting/MessageExporter.cs /^internal partial class MessageExporter$/;" c
MessageExporter DiscordChatExporter.Core/Exporting/MessageExporter.cs /^internal partial class MessageExporter(ExportContext context) : IAsyncDisposable$/;" m
MessageFilter DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public MessageFilter MessageFilter { get; init; } = MessageFilter.Null;$/;" p class:ExportCommandBase
MessageFilter DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public MessageFilter MessageFilter { get; }$/;" p class:ExportRequest
MessageFilter DiscordChatExporter.Core/Exporting/Filtering/MessageFilter.cs /^public abstract partial class MessageFilter$/;" c
MessageFilter DiscordChatExporter.Core/Exporting/Filtering/MessageFilter.cs /^public partial class MessageFilter$/;" c
MessageFlags DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^public enum MessageFlags$/;" g
MessageKind DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^public enum MessageKind$/;" g
MessageWriter DiscordChatExporter.Core/Exporting/MessageWriter.cs /^internal abstract class MessageWriter(Stream stream, ExportContext context) : IAsyncDisposable$/;" m
MinimalNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> MinimalNodeMatcher =$/;" f class:MarkdownParser file:
MultiLineCodeBlockNode DiscordChatExporter.Core/Markdown/MultiLineCodeBlockNode.cs /^internal record MultiLineCodeBlockNode(string Language, string Code) : MarkdownNode;$/;" m
MultiLineCodeBlockNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> MultiLineCodeBlockNodeMatche/;" f class:MarkdownParser file:
MultiLineQuoteNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> MultiLineQuoteNodeMatcher =$/;" f class:MarkdownParser file:
Name DiscordChatExporter.Gui/Program.cs /^ public static string Name { get; } = Assembly.GetName().Name ?? "DiscordChatExporter";$/;" p class:Program
NativeMethods DiscordChatExporter.Gui/Utils/NativeMethods.cs /^internal static class NativeMethods$/;" c
NegatedFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> NegatedFilter = Character$/;" f class:FilterGrammar file:
NegatedMessageFilter DiscordChatExporter.Core/Exporting/Filtering/NegatedMessageFilter.cs /^internal class NegatedMessageFilter(MessageFilter filter) : MessageFilter$/;" m
NodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> NodeMatcher =$/;" f class:MarkdownParser file:
None DiscordChatExporter.Cli/Commands/Shared/ThreadInclusionMode.cs /^ None,$/;" e enum:ThreadInclusionMode file:
None DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ None = 0,$/;" e enum:ApplicationFlags file:
None DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ None = 0,$/;" e enum:MessageFlags file:
None DiscordChatExporter.Gui/Models/ThreadInclusionMode.cs /^ None,$/;" e enum:ThreadInclusionMode file:
Notify DiscordChatExporter.Gui/Framework/SnackbarManager.cs /^ public void Notify($/;" m class:SnackbarManager
Notify DiscordChatExporter.Gui/Framework/SnackbarManager.cs /^ public void Notify(string message, TimeSpan? duration = null) =>$/;" m class:SnackbarManager
NotifyPropertyChangedExtensions DiscordChatExporter.Gui/Utils/Extensions/NotifyPropertyChangedExtensions.cs /^internal static class NotifyPropertyChangedExtensions$/;" c
Null DiscordChatExporter.Core/Exporting/Filtering/MessageFilter.cs /^ public static MessageFilter Null { get; } = new NullMessageFilter();$/;" p class:MessageFilter
Null DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^ public static PartitionLimit Null { get; } = new NullPartitionLimit();$/;" p class:PartitionLimit
NullIfWhiteSpace DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^ public static string? NullIfWhiteSpace(this string str) =>$/;" m class:StringExtensions
NullMessageFilter DiscordChatExporter.Core/Exporting/Filtering/NullMessageFilter.cs /^internal class NullMessageFilter : MessageFilter$/;" c
NullPartitionLimit DiscordChatExporter.Core/Exporting/Partitioning/NullPartitionLimit.cs /^internal class NullPartitionLimit : PartitionLimit$/;" c
Obtaining Token and Channel IDs .docs/Token-and-IDs.md /^# Obtaining Token and Channel IDs$/;" c
OnAllPropertiesChanged DiscordChatExporter.Gui/Framework/ViewModelBase.cs /^ protected void OnAllPropertiesChanged() => OnPropertyChanged(string.Empty);$/;" m class:ViewModelBase
OnFrameworkInitializationCompleted DiscordChatExporter.Gui/App.axaml.cs /^ public override void OnFrameworkInitializationCompleted()$/;" m class:App
OpenDiscord DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private void OpenDiscord() => ProcessEx.StartShellExecute("https:\/\/discord.com\/app");$/;" m class:DashboardViewModel file:
OpenDiscordDeveloperPortal DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private void OpenDiscordDeveloperPortal() =>$/;" m class:DashboardViewModel file:
Or DiscordChatExporter.Core/Exporting/Filtering/BinaryExpressionKind.cs /^ Or,$/;" e enum:BinaryExpressionKind file:
OutputDirPath DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public string OutputDirPath { get; }$/;" p class:ExportRequest
OutputFilePath DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public string OutputFilePath { get; }$/;" p class:ExportRequest
OutputPath DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public string OutputPath$/;" p class:ExportCommandBase
ParallelLimit DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public int ParallelLimit { get; init; } = 1;$/;" p class:ExportCommandBase
ParallelLimit DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public int ParallelLimit$/;" p class:SettingsViewModel
Parse DiscordChatExporter.Cli.Tests/Utils/Html.cs /^ public static IHtmlDocument Parse(string source) => Parser.ParseDocument(source);$/;" m class:Html
Parse DiscordChatExporter.Core/Discord/Dump/DataDump.cs /^ public static DataDump Parse(JsonElement json)$/;" m class:DataDump
Parse DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static Snowflake Parse(string value) => Parse(value, null);$/;" m struct:Snowflake
Parse DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static Snowflake Parse(string value, IFormatProvider? formatProvider) =>$/;" m struct:Snowflake
Parse DiscordChatExporter.Core/Exporting/Filtering/MessageFilter.cs /^ public static MessageFilter Parse(string value) => FilterGrammar.Filter.Parse(value);$/;" m class:MessageFilter
Parse DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^ public static PartitionLimit Parse(string value, IFormatProvider? formatProvider = null) =>$/;" m class:PartitionLimit
Parse DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static IReadOnlyList<MarkdownNode> Parse($/;" m class:MarkdownParser file:
Parse DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ public static IReadOnlyList<MarkdownNode> Parse(string markdown) =>$/;" m class:MarkdownParser
ParseMinimal DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static IReadOnlyList<MarkdownNode> ParseMinimal($/;" m class:MarkdownParser file:
ParseMinimal DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ public static IReadOnlyList<MarkdownNode> ParseMinimal(string markdown) =>$/;" m class:MarkdownParser
ParsedMatch DiscordChatExporter.Core/Markdown/Parsing/ParsedMatch.cs /^internal class ParsedMatch<T>(StringSegment segment, T value)$/;" m
Parser DiscordChatExporter.Cli.Tests/Utils/Html.cs /^ private static readonly IHtmlParser Parser = new HtmlParser();$/;" f class:Html file:
PartitionLimit DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public PartitionLimit PartitionLimit { get; init; } = PartitionLimit.Null;$/;" p class:ExportCommandBase
PartitionLimit DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public PartitionLimit PartitionLimit { get; }$/;" p class:ExportRequest
PartitionLimit DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^public abstract partial class PartitionLimit$/;" c
PartitionLimit DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^public partial class PartitionLimit$/;" c
Partitioning .docs/Using-the-CLI.md /^#### Partitioning$/;" t section:Using the CLI""Export a specific channel
PartitioningSpecs DiscordChatExporter.Cli.Tests/Specs/PartitioningSpecs.cs /^public class PartitioningSpecs$/;" c
PathEx DiscordChatExporter.Cli.Tests/Utils/TempDir.cs /^using PathEx = System.IO.Path;$/;" t file:
PathEx DiscordChatExporter.Cli.Tests/Utils/TempFile.cs /^using PathEx = System.IO.Path;$/;" t file:
PathEx DiscordChatExporter.Core/Utils/PathEx.cs /^public static class PathEx$/;" c
Pin DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Pin,$/;" e enum:MessageContentMatchKind file:
Pipe DiscordChatExporter.Core/Utils/Extensions/GenericExtensions.cs /^ public static TOut Pipe<TIn, TOut>(this TIn input, Func<TIn, TOut> transform) =>$/;" m class:GenericExtensions
Plain Text .docs/Getting-started.md /^### Plain Text$/;" S section:Getting started""File formats
PlainText DiscordChatExporter.Core/Exporting/ExportFormat.cs /^ PlainText,$/;" e enum:ExportFormat file:
PlainTextContentSpecs DiscordChatExporter.Cli.Tests/Specs/PlainTextContentSpecs.cs /^public class PlainTextContentSpecs$/;" c
PlainTextMarkdownVisitor DiscordChatExporter.Core/Exporting/PlainTextMarkdownVisitor.cs /^internal partial class PlainTextMarkdownVisitor$/;" c
PlainTextMarkdownVisitor DiscordChatExporter.Core/Exporting/PlainTextMarkdownVisitor.cs /^internal partial class PlainTextMarkdownVisitor(ExportContext context, StringBuilder buffer)$/;" m
PlainTextMessageExtensions DiscordChatExporter.Core/Exporting/PlainTextMessageExtensions.cs /^internal static class PlainTextMessageExtensions$/;" c
PlainTextMessageWriter DiscordChatExporter.Core/Exporting/PlainTextMessageWriter.cs /^internal class PlainTextMessageWriter(Stream stream, ExportContext context)$/;" m
Png DiscordChatExporter.Core/Discord/Data/StickerFormat.cs /^ Png = 1,$/;" e enum:StickerFormat file:
PopulateChildren DiscordChatExporter.Core/Utils/Extensions/ExceptionExtensions.cs /^ private static void PopulateChildren(this Exception exception, ICollection<Exception> childr/;" m class:ExceptionExtensions file:
PrimitiveFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> PrimitiveFilter = Parse.OneOf($/;" f class:FilterGrammar file:
ProcessEx DiscordChatExporter.Gui/Utils/ProcessEx.cs /^internal static class ProcessEx$/;" c
Program DiscordChatExporter.Cli/Program.cs /^public static class Program$/;" c
Program DiscordChatExporter.Gui/Program.cs /^public static class Program$/;" c
Progress DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ public ProgressContainer<Percentage> Progress { get; } = new();$/;" p class:DashboardViewModel
ProjectDocumentationUrl DiscordChatExporter.Gui/Program.cs /^ public static string ProjectDocumentationUrl { get; } = ProjectUrl + "\/tree\/master\/.docs"/;" p class:Program
ProjectReleasesUrl DiscordChatExporter.Gui/Program.cs /^ public static string ProjectReleasesUrl { get; } = $"{ProjectUrl}\/releases";$/;" p class:Program
ProjectUrl DiscordChatExporter.Gui/Program.cs /^ public static string ProjectUrl { get; } = "https:\/\/github.com\/Tyrrrz\/DiscordChatExporte/;" p class:Program
PromptDirectoryPathAsync DiscordChatExporter.Gui/Framework/DialogManager.cs /^ public async Task<string?> PromptDirectoryPathAsync(string defaultDirPath = "")$/;" m class:DialogManager
PullChannelsAsync DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private async Task PullChannelsAsync()$/;" m class:DashboardViewModel file:
PullGuildsAsync DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private async Task PullGuildsAsync()$/;" m class:DashboardViewModel file:
Pulling .docs/Docker.md /^## Pulling$/;" s chapter:Docker usage instructions
Quote DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Quote,$/;" e enum:FormattingKind file:
QuotedString DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<string> QuotedString =$/;" f class:FilterGrammar file:
Reaction DiscordChatExporter.Core/Discord/Data/Reaction.cs /^public record Reaction(Emoji Emoji, int Count)$/;" m
ReactionFilter DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<MessageFilter> ReactionFilter = Span.EqualToIgnoreCase($/;" f class:FilterGrammar file:
ReactionMessageFilter DiscordChatExporter.Core/Exporting/Filtering/ReactionMessageFilter.cs /^internal class ReactionMessageFilter(string value) : MessageFilter$/;" m
RecipientAdd DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ RecipientAdd = 1,$/;" e enum:MessageKind file:
RecipientRemove DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ RecipientRemove = 2,$/;" e enum:MessageKind file:
RegexMatcher DiscordChatExporter.Core/Markdown/Parsing/RegexMatcher.cs /^internal class RegexMatcher<TContext, TValue>($/;" m
RepeatedSingleLineQuoteNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ > RepeatedSingleLineQuoteNodeMatcher = new RegexMatcher<MarkdownContext, MarkdownNode>($/;" f class:MarkdownParser file:
ReplaceWhiteSpace DiscordChatExporter.Cli.Tests/Utils/Extensions/StringExtensions.cs /^ public static string ReplaceWhiteSpace(this string str, string replacement = " ")$/;" m class:StringExtensions
Reply DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ Reply = 19,$/;" e enum:MessageKind file:
ReplyTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake ReplyTestCases { get; } = Snowflake.Parse("866459871934677052");$/;" p class:ChannelIds
ResetAlpha DiscordChatExporter.Core/Utils/Extensions/ColorExtensions.cs /^ public static Color ResetAlpha(this Color color) => color.WithAlpha(255);$/;" m class:ColorExtensions
ResiliencePipeline DiscordChatExporter.Core/Utils/Http.cs /^ public static ResiliencePipeline ResiliencePipeline { get; } =$/;" p class:Http
ResponseResiliencePipeline DiscordChatExporter.Core/Utils/Http.cs /^ public static ResiliencePipeline<HttpResponseMessage> ResponseResiliencePipeline { get; } =$/;" p class:Http
Reusing assets .docs/Using-the-CLI.md /^#### Reusing assets$/;" t section:Using the CLI""Export a specific channel
Rich DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^ Rich,$/;" e enum:EmbedKind file:
Role DiscordChatExporter.Core/Discord/Data/Role.cs /^public record Role(Snowflake Id, string Name, int Position, Color? Color) : IHasId$/;" m
Role DiscordChatExporter.Core/Markdown/MentionKind.cs /^ Role,$/;" e enum:MentionKind file:
RoleMentionNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> RoleMentionNodeMatcher =$/;" f class:MarkdownParser file:
Scheduling exports on Windows .docs/Scheduling-Windows.md /^# Scheduling exports on Windows$/;" c
Scheduling exports on macOS .docs/Scheduling-MacOS.md /^# Scheduling exports on macOS$/;" c
Scheduling exports with Cron .docs/Scheduling-Linux.md /^# Scheduling exports with Cron$/;" c
Scheduling with Task Scheduler .docs/Scheduling-Windows.md /^## Scheduling with Task Scheduler$/;" s chapter:Scheduling exports on Windows
Screenshots Readme.md /^## Screenshots$/;" s chapter:DiscordChatExporter
Secrets DiscordChatExporter.Cli.Tests/Infra/Secrets.cs /^internal static class Secrets$/;" c
See also Readme.md /^## See also$/;" s chapter:DiscordChatExporter
SelectedChannels DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ public ObservableCollection<ChannelConnection> SelectedChannels { get; } = [];$/;" p class:DashboardViewModel
SelfContainedSpecs DiscordChatExporter.Cli.Tests/Specs/SelfContainedSpecs.cs /^public class SelfContainedSpecs$/;" c
SelfContainedTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake SelfContainedTestCases { get; } = Snowflake.Parse("88744143267837956/;" p class:ChannelIds
SetPath DiscordChatExporter.Core/Utils/UrlBuilder.cs /^ public UrlBuilder SetPath(string path)$/;" m class:UrlBuilder
SetQueryParameter DiscordChatExporter.Core/Utils/UrlBuilder.cs /^ public UrlBuilder SetQueryParameter(string key, string? value, bool ignoreUnsetValue = true)$/;" m class:UrlBuilder
Settings .docs/Using-the-GUI.md /^## Settings$/;" s chapter:Using the GUI
SettingsService DiscordChatExporter.Gui/Services/SettingsService.cs /^public partial class SettingsService$/;" c
SettingsService DiscordChatExporter.Gui/Services/SettingsService.cs /^public partial class SettingsService()$/;" m
SettingsView DiscordChatExporter.Gui/Views/Dialogs/SettingsView.axaml.cs /^ public SettingsView() => InitializeComponent();$/;" m class:SettingsView
SettingsView DiscordChatExporter.Gui/Views/Dialogs/SettingsView.axaml.cs /^public partial class SettingsView : UserControl<SettingsViewModel>$/;" c
SettingsViewModel DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public SettingsViewModel(SettingsService settingsService)$/;" m class:SettingsViewModel
SettingsViewModel DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^public class SettingsViewModel : DialogViewModelBase$/;" c
ShouldDownloadAssets DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public bool ShouldDownloadAssets { get; init; }$/;" p class:ExportCommandBase
ShouldDownloadAssets DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public bool ShouldDownloadAssets { get; }$/;" p class:ExportRequest
ShouldFormatMarkdown DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public bool ShouldFormatMarkdown { get; init; } = true;$/;" p class:ExportCommandBase
ShouldFormatMarkdown DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public bool ShouldFormatMarkdown { get; }$/;" p class:ExportRequest
ShouldReuseAssets DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ public bool ShouldReuseAssets { get; init; } = false;$/;" p class:ExportCommandBase
ShouldReuseAssets DiscordChatExporter.Core/Exporting/ExportRequest.cs /^ public bool ShouldReuseAssets { get; }$/;" p class:ExportRequest
ShowDialogAsync DiscordChatExporter.Gui/Framework/DialogManager.cs /^ public async Task<T?> ShowDialogAsync<T>(DialogViewModelBase<T> dialog)$/;" m class:DialogManager
ShowHelp DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private void ShowHelp() => ProcessEx.StartShellExecute(Program.ProjectDocumentationUrl);$/;" m class:DashboardViewModel file:
ShowSettingsAsync DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private async Task ShowSettingsAsync() =>$/;" m class:DashboardViewModel file:
ShrugTextNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> ShrugTextNodeMatcher =$/;" f class:MarkdownParser file:
SingleLineQuoteNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> SingleLineQuoteNodeMatcher =$/;" f class:MarkdownParser file:
SnackbarManager DiscordChatExporter.Gui/Framework/SnackbarManager.cs /^public class SnackbarManager$/;" c
Snowflake DiscordChatExporter.Core/Discord/Snowflake.cs /^public partial record struct Snowflake : IComparable<Snowflake>, IComparable$/;" s
Snowflake DiscordChatExporter.Core/Discord/Snowflake.cs /^public partial record struct Snowflake$/;" s
Snowflake DiscordChatExporter.Core/Discord/Snowflake.cs /^public readonly partial record struct Snowflake(ulong Value)$/;" m
SnowflakeToTimestampStringConverter DiscordChatExporter.Gui/Converters/SnowflakeToTimestampStringConverter.cs /^public class SnowflakeToTimestampStringConverter : IValueConverter$/;" c
Sound DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Sound,$/;" e enum:MessageContentMatchKind file:
SourceMessageDeleted DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ SourceMessageDeleted = 8,$/;" e enum:MessageFlags file:
Spoiler DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Spoiler,$/;" e enum:FormattingKind file:
SpoilerFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> SpoilerFormattingNodeMatcher/;" f class:MarkdownParser file:
SpotifyTrackEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/SpotifyTrackEmbedProjection.cs /^public partial record SpotifyTrackEmbedProjection$/;" p
SpotifyTrackEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/SpotifyTrackEmbedProjection.cs /^public partial record SpotifyTrackEmbedProjection(string TrackId)$/;" m
StandardEmojiNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> StandardEmojiNodeMatcher =$/;" f class:MarkdownParser file:
StartShellExecute DiscordChatExporter.Gui/Utils/ProcessEx.cs /^ public static void StartShellExecute(string path)$/;" m class:ProcessEx
StartTaskAsync DiscordChatExporter.Cli/Utils/Extensions/ConsoleExtensions.cs /^ public static async ValueTask StartTaskAsync($/;" m class:ConsoleExtensions
Step 1 .docs/Using-the-CLI.md /^## Step 1$/;" s chapter:Using the CLI
Step 1 .docs/Using-the-GUI.md /^### Step 1$/;" S section:Using the GUI""Guide
Step 2 .docs/Using-the-CLI.md /^## Step 2$/;" s chapter:Using the CLI
Step 2 .docs/Using-the-GUI.md /^### Step 2$/;" S section:Using the GUI""Guide
Step 3 .docs/Using-the-CLI.md /^## Step 3$/;" s chapter:Using the CLI
Step 3 .docs/Using-the-GUI.md /^### Step 3$/;" S section:Using the GUI""Guide
Step 4 .docs/Using-the-GUI.md /^### Step 4$/;" S section:Using the GUI""Guide
Sticker DiscordChatExporter.Core/Discord/Data/Sticker.cs /^public partial record Sticker$/;" p
Sticker DiscordChatExporter.Core/Discord/Data/Sticker.cs /^public partial record Sticker(Snowflake Id, string Name, StickerFormat Format, string SourceUrl)$/;" m
StickerFormat DiscordChatExporter.Core/Discord/Data/StickerFormat.cs /^public enum StickerFormat$/;" g
StickerTestCases DiscordChatExporter.Cli.Tests/Infra/ChannelIds.cs /^ public static Snowflake StickerTestCases { get; } = Snowflake.Parse("939668868253769729");$/;" p class:ChannelIds
Strikethrough DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Strikethrough,$/;" e enum:FormattingKind file:
StrikethroughFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ > StrikethroughFormattingNodeMatcher = new RegexMatcher<MarkdownContext, MarkdownNode>($/;" f class:MarkdownParser file:
String DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<string> String = Parse$/;" f class:FilterGrammar file:
StringExtensions DiscordChatExporter.Cli.Tests/Utils/Extensions/StringExtensions.cs /^internal static class StringExtensions$/;" c
StringExtensions DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^public static class StringExtensions$/;" c
StringMatcher DiscordChatExporter.Core/Markdown/Parsing/StringMatcher.cs /^internal class StringMatcher<TContext, TValue>($/;" m
StringSegment DiscordChatExporter.Core/Markdown/Parsing/StringSegment.cs /^internal readonly record struct StringSegment(string Source, int StartIndex, int Length)$/;" m
SuperpowerExtensions DiscordChatExporter.Core/Utils/Extensions/SuperpowerExtensions.cs /^public static class SuperpowerExtensions$/;" c
SuppressEmbeds DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ SuppressEmbeds = 4,$/;" e enum:MessageFlags file:
System DiscordChatExporter.Gui/Framework/ThemeVariant.cs /^ System,$/;" e enum:ThemeVariant file:
TempDir DiscordChatExporter.Cli.Tests/Utils/TempDir.cs /^internal partial class TempDir$/;" c
TempDir DiscordChatExporter.Cli.Tests/Utils/TempDir.cs /^internal partial class TempDir(string path) : IDisposable$/;" m
TempFile DiscordChatExporter.Cli.Tests/Utils/TempFile.cs /^internal partial class TempFile$/;" c
TempFile DiscordChatExporter.Cli.Tests/Utils/TempFile.cs /^internal partial class TempFile(string path) : IDisposable$/;" m
Terms of use<sup>[[?]](https://github.com/Tyrrrz/.github/blob/master/docs/why-so-political.md)</sup> Readme.md /^## Terms of use<sup>[[?]](https:\/\/github.com\/Tyrrrz\/.github\/blob\/master\/docs\/why-so-poli/;" s chapter:DiscordChatExporter
Text DiscordChatExporter.Core/Utils/Extensions/SuperpowerExtensions.cs /^ public static TextParser<string> Text(this TextParser<char[]> parser) =>$/;" m class:SuperpowerExtensions
Text DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public string? Text$/;" p class:HyperLink
TextNode DiscordChatExporter.Core/Markdown/TextNode.cs /^internal record TextNode(string Text) : MarkdownNode;$/;" m
TextProperty DiscordChatExporter.Gui/Views/Controls/HyperLink.axaml.cs /^ public static readonly StyledProperty<string?> TextProperty =$/;" f class:HyperLink
The exported file is too large, I can't open it .docs/Troubleshooting.md /^### The exported file is too large, I can't open it$/;" S section:Troubleshooting""First steps
Theme DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public ThemeVariant Theme$/;" p class:SettingsViewModel
ThemeVariant DiscordChatExporter.Gui/Framework/ThemeVariant.cs /^public enum ThemeVariant$/;" g
ThreadCreated DiscordChatExporter.Core/Discord/Data/MessageKind.cs /^ ThreadCreated = 18,$/;" e enum:MessageKind file:
ThreadInclusionMode DiscordChatExporter.Cli/Commands/ExportAllCommand.cs /^ public ThreadInclusionMode ThreadInclusionMode { get; init; } = ThreadInclusionMode.None;$/;" p class:ExportAllCommand
ThreadInclusionMode DiscordChatExporter.Cli/Commands/ExportGuildCommand.cs /^ public ThreadInclusionMode ThreadInclusionMode { get; init; } = ThreadInclusionMode.None;$/;" p class:ExportGuildCommand
ThreadInclusionMode DiscordChatExporter.Cli/Commands/GetChannelsCommand.cs /^ public ThreadInclusionMode ThreadInclusionMode { get; init; } = ThreadInclusionMode.None;$/;" p class:GetChannelsCommand
ThreadInclusionMode DiscordChatExporter.Cli/Commands/Shared/ThreadInclusionMode.cs /^public enum ThreadInclusionMode$/;" g
ThreadInclusionMode DiscordChatExporter.Gui/Models/ThreadInclusionMode.cs /^public enum ThreadInclusionMode$/;" g
ThreadInclusionMode DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ public ThreadInclusionMode ThreadInclusionMode$/;" p class:SettingsViewModel
ThreadInclusionModeBindingConverter DiscordChatExporter.Cli/Commands/Converters/ThreadInclusionModeBindingConverter.cs /^internal class ThreadInclusionModeBindingConverter : BindingConverter<ThreadInclusionMode>$/;" c
Through the desktop app / enabling web developer tools .docs/Token-and-IDs.md /^### Through the desktop app \/ enabling web developer tools$/;" S section:Obtaining Token and Channel IDs""How to get a User Token
Through your web browser .docs/Token-and-IDs.md /^### Through your web browser$/;" S section:Obtaining Token and Channel IDs""How to get a User Token
TimeSpanExtensions DiscordChatExporter.Core/Utils/Extensions/TimeSpanExtensions.cs /^public static class TimeSpanExtensions$/;" c
TimestampNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> TimestampNodeMatcher =$/;" f class:MarkdownParser file:
ToHex DiscordChatExporter.Core/Utils/Extensions/BinaryExtensions.cs /^ public static string ToHex(this byte[] data, bool isUpperCase = true)$/;" m class:BinaryExtensions
ToHex DiscordChatExporter.Core/Utils/Extensions/ColorExtensions.cs /^ public static string ToHex(this Color color) => $"#{color.R:X2}{color.G:X2}{color.B:X2}";$/;" m class:ColorExtensions
ToRgb DiscordChatExporter.Core/Utils/Extensions/ColorExtensions.cs /^ public static int ToRgb(this Color color) => color.ToArgb() & 0xffffff;$/;" m class:ColorExtensions
ToSingletonEnumerable DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs /^ public static IEnumerable<T> ToSingletonEnumerable<T>(this T obj)$/;" m class:CollectionExtensions
ToSpaceSeparatedWords DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^ public static string ToSpaceSeparatedWords(this string str)$/;" m class:StringExtensions
Token DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^ public required string Token { get; init; }$/;" p class:DiscordCommandBase
Token DiscordChatExporter.Core/Utils/Extensions/SuperpowerExtensions.cs /^ public static TextParser<T> Token<T>(this TextParser<T> parser) =>$/;" m class:SuperpowerExtensions
Token stealer? .docs/Troubleshooting.md /^### Token stealer?$/;" S section:Troubleshooting""General questions
TokenKind DiscordChatExporter.Core/Discord/TokenKind.cs /^public enum TokenKind$/;" g
Troubleshooting .docs/Troubleshooting.md /^# Troubleshooting$/;" c
Truncate DiscordChatExporter.Core/Utils/Extensions/StringExtensions.cs /^ public static string Truncate(this string str, int charCount) =>$/;" m class:StringExtensions
TruthyBooleanBindingConverter DiscordChatExporter.Cli/Commands/Converters/TruthyBooleanBindingConverter.cs /^internal class TruthyBooleanBindingConverter : BindingConverter<bool>$/;" c
TryBindView DiscordChatExporter.Gui/Framework/ViewManager.cs /^ public Control? TryBindView(ViewModelBase viewModel)$/;" m class:ViewManager
TryGetCode DiscordChatExporter.Core/Discord/Data/EmojiIndex.cs /^ public static string? TryGetCode(string name) => _toCodes.GetValueOrDefault(name);$/;" m class:EmojiIndex
TryGetMainWindow DiscordChatExporter.Gui/Utils/Extensions/AvaloniaExtensions.cs /^ public static Window? TryGetMainWindow(this IApplicationLifetime lifetime) =>$/;" m class:AvaloniaExtensions
TryGetName DiscordChatExporter.Core/Discord/Data/EmojiIndex.cs /^ public static string? TryGetName(string code) => _fromCodes.GetValueOrDefault(code);$/;" m class:EmojiIndex
TryGetTopLevel DiscordChatExporter.Gui/Utils/Extensions/AvaloniaExtensions.cs /^ public static TopLevel? TryGetTopLevel(this IApplicationLifetime lifetime) =>$/;" m class:AvaloniaExtensions
TryGetValue DiscordChatExporter.Core/Utils/Extensions/HttpExtensions.cs /^ public static string? TryGetValue(this HttpHeaders headers, string name) =>$/;" m class:HttpExtensions
TryMatch DiscordChatExporter.Core/Markdown/Parsing/IMatcher.cs /^ ParsedMatch<TValue>? TryMatch(TContext context, StringSegment segment);$/;" m interface:IMatcher
TryParse DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static Snowflake? TryParse(string? value, IFormatProvider? formatProvider = null)$/;" m struct:Snowflake
TryParse DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^ public static PartitionLimit? TryParse(string value, IFormatProvider? formatProvider = null)$/;" m class:PartitionLimit
TryParseFileSizeBytes DiscordChatExporter.Core/Exporting/Partitioning/PartitionLimit.cs /^ private static long? TryParseFileSizeBytes(string value, IFormatProvider? formatProvider = n/;" m class:PartitionLimit file:
TryShutdown DiscordChatExporter.Gui/Utils/Extensions/AvaloniaExtensions.cs /^ public static bool TryShutdown(this IApplicationLifetime lifetime, int exitCode = 0)$/;" m class:AvaloniaExtensions
TwitchClipEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/TwitchClipEmbedProjection.cs /^public partial record TwitchClipEmbedProjection$/;" p
TwitchClipEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/TwitchClipEmbedProjection.cs /^public partial record TwitchClipEmbedProjection(string ClipId)$/;" m
Underline DiscordChatExporter.Core/Markdown/FormattingKind.cs /^ Underline,$/;" e enum:FormattingKind file:
UnderlineFormattingNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> UnderlineFormattingNodeMatch/;" f class:MarkdownParser file:
Unix permissions issues .docs/Docker.md /^## Unix permissions issues$/;" s chapter:Docker usage instructions
UnquotedString DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs /^ private static readonly TextParser<string> UnquotedString = Parse$/;" f class:FilterGrammar file:
UpdateService DiscordChatExporter.Gui/Services/UpdateService.cs /^public class UpdateService(SettingsService settingsService) : IDisposable$/;" m
Urgent DiscordChatExporter.Core/Discord/Data/MessageFlags.cs /^ Urgent = 16,$/;" e enum:MessageFlags file:
UrlBuilder DiscordChatExporter.Core/Utils/UrlBuilder.cs /^public class UrlBuilder$/;" c
Usage .docs/Docker.md /^## Usage$/;" s chapter:Docker usage instructions
User DiscordChatExporter.Core/Discord/Data/User.cs /^public partial record User$/;" p
User DiscordChatExporter.Core/Discord/Data/User.cs /^public partial record User($/;" m
User DiscordChatExporter.Core/Discord/TokenKind.cs /^ User,$/;" e enum:TokenKind file:
User DiscordChatExporter.Core/Markdown/MentionKind.cs /^ User,$/;" e enum:MentionKind file:
UserControl DiscordChatExporter.Gui/Framework/UserControl.cs /^public class UserControl<TDataContext> : UserControl$/;" c
UserMentionNodeMatcher DiscordChatExporter.Core/Markdown/Parsing/MarkdownParser.cs /^ private static readonly IMatcher<MarkdownContext, MarkdownNode> UserMentionNodeMatcher =$/;" f class:MarkdownParser file:
Using the CLI .docs/Using-the-CLI.md /^# Using the CLI$/;" c
Using the GUI .docs/Using-the-GUI.md /^# Using the GUI$/;" c
Using the console .docs/Token-and-IDs.md /^##### Using the console$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Chrome
Using the console .docs/Token-and-IDs.md /^##### Using the console$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Firefox
Using the network monitor .docs/Token-and-IDs.md /^##### Using the network monitor$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Chrome
Using the network monitor .docs/Token-and-IDs.md /^##### Using the network monitor$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Firefox
Using the storage inspector .docs/Token-and-IDs.md /^##### Using the storage inspector$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Chrome
Using the storage inspector .docs/Token-and-IDs.md /^##### Using the storage inspector$/;" T subsubsection:Obtaining Token and Channel IDs""How to get a User Token""Through your web browser""In Firefox
VerificationPendingGuildLimit DiscordChatExporter.Core/Discord/Data/ApplicationFlags.cs /^ VerificationPendingGuildLimit = 65536,$/;" e enum:ApplicationFlags file:
Version DiscordChatExporter.Gui/Program.cs /^ public static Version Version { get; } = Assembly.GetName().Version ?? new Version(0, 0, 0);$/;" p class:Program
VersionString DiscordChatExporter.Gui/Program.cs /^ public static string VersionString { get; } = Version.ToString(3);$/;" p class:Program
Via settings menu (BetterDiscord only) .docs/Token-and-IDs.md /^#### Via settings menu (BetterDiscord only)$/;" t subsection:Obtaining Token and Channel IDs""How to get a User Token""Through the desktop app / enabling web developer tools
Video DiscordChatExporter.Core/Discord/Data/Embeds/EmbedKind.cs /^ Video,$/;" e enum:EmbedKind file:
Video DiscordChatExporter.Core/Exporting/Filtering/MessageContentMatchKind.cs /^ Video,$/;" e enum:MessageContentMatchKind file:
Video tutorial .docs/Readme.md /^## Video tutorial$/;" s chapter:Home
Video tutorial .docs/Using-the-GUI.md /^## Video tutorial$/;" s chapter:Using the GUI
ViewManager DiscordChatExporter.Gui/Framework/ViewManager.cs /^public partial class ViewManager : IDataTemplate$/;" c
ViewManager DiscordChatExporter.Gui/Framework/ViewManager.cs /^public partial class ViewManager$/;" c
ViewModelBase DiscordChatExporter.Gui/Framework/ViewModelBase.cs /^public abstract class ViewModelBase : ObservableObject, IDisposable$/;" c
ViewModelManager DiscordChatExporter.Gui/Framework/ViewModelManager.cs /^public class ViewModelManager(IServiceProvider services)$/;" m
VisitAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ public async ValueTask VisitAsync($/;" m class:MarkdownVisitor
VisitEmojiAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitEmojiAsync($/;" m class:MarkdownVisitor
VisitFormattingAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual async ValueTask VisitFormattingAsync($/;" m class:MarkdownVisitor
VisitHeadingAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual async ValueTask VisitHeadingAsync($/;" m class:MarkdownVisitor
VisitInlineCodeBlockAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitInlineCodeBlockAsync($/;" m class:MarkdownVisitor
VisitLinkAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual async ValueTask VisitLinkAsync($/;" m class:MarkdownVisitor
VisitListAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual async ValueTask VisitListAsync($/;" m class:MarkdownVisitor
VisitListItemAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual async ValueTask VisitListItemAsync($/;" m class:MarkdownVisitor
VisitMentionAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitMentionAsync($/;" m class:MarkdownVisitor
VisitMultiLineCodeBlockAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitMultiLineCodeBlockAsync($/;" m class:MarkdownVisitor
VisitTextAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitTextAsync($/;" m class:MarkdownVisitor
VisitTimestampAsync DiscordChatExporter.Core/Markdown/Parsing/MarkdownVisitor.cs /^ protected virtual ValueTask VisitTimestampAsync($/;" m class:MarkdownVisitor
WaitForCloseAsync DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs /^ public async Task<T> WaitForCloseAsync() => await _closeTcs.Task;$/;" m class:DialogViewModelBase
When I open DCE a black window pops up quickly or nothing shows up .docs/Troubleshooting.md /^### When I open DCE a black window pops up quickly or nothing shows up$/;" S section:Troubleshooting""First steps
Where can I find the 'Channel IDs'? .docs/Troubleshooting.md /^### Where can I find the 'Channel IDs'?$/;" S section:Troubleshooting""CLI
Why should I be worried about the safety of my token? .docs/Troubleshooting.md /^### Why should I be worried about the safety of my token?$/;" S section:Troubleshooting""General questions
Will I get banned if I use this? .docs/Troubleshooting.md /^### Will I get banned if I use this?$/;" S section:Troubleshooting""General questions
Will the messages disappear from the exported file if I delete a message, delete my account or block a person? .docs/Troubleshooting.md /^### Will the messages disappear from the exported file if I delete a message, delete my account /;" S section:Troubleshooting""General questions
Window DiscordChatExporter.Gui/Framework/Window.cs /^public class Window<TDataContext> : Window$/;" c
Windows DiscordChatExporter.Gui/Utils/NativeMethods.cs /^ public static class Windows$/;" c class:NativeMethods
WithAlpha DiscordChatExporter.Core/Utils/Extensions/ColorExtensions.cs /^ public static Color WithAlpha(this Color color, int alpha) => Color.FromArgb(alpha, color);$/;" m class:ColorExtensions
WithIndex DiscordChatExporter.Core/Utils/Extensions/CollectionExtensions.cs /^ public static IEnumerable<(T value, int index)> WithIndex<T>(this IEnumerable<T> source)$/;" m class:CollectionExtensions
YouTubeVideoEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/YouTubeVideoEmbedProjection.cs /^public partial record YouTubeVideoEmbedProjection$/;" p
YouTubeVideoEmbedProjection DiscordChatExporter.Core/Discord/Data/Embeds/YouTubeVideoEmbedProjection.cs /^public partial record YouTubeVideoEmbedProjection(string VideoId)$/;" m
Zero DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static Snowflake Zero { get; } = new(0);$/;" p struct:Snowflake
_assetsDirPath DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ private readonly string? _assetsDirPath;$/;" f class:ExportCommandBase file:
_availableChannels DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private IReadOnlyList<ChannelConnection>? _availableChannels;$/;" f class:DashboardViewModel file:
_availableGuilds DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private IReadOnlyList<Guild>? _availableGuilds;$/;" f class:DashboardViewModel file:
_cancelButtonText DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ private string? _cancelButtonText = "Cancel";$/;" f class:MessageBoxViewModel file:
_channelExporter DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ private ChannelExporter? _channelExporter;$/;" f class:ExportCommandBase file:
_closeTcs DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs /^ private readonly TaskCompletionSource<T> _closeTcs = new($/;" f class:DialogViewModelBase file:
_defaultButtonText DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ private string? _defaultButtonText = "OK";$/;" f class:MessageBoxViewModel file:
_defaultDuration DiscordChatExporter.Gui/Framework/SnackbarManager.cs /^ private readonly TimeSpan _defaultDuration = TimeSpan.FromSeconds(5);$/;" f class:SnackbarManager file:
_dialogLock DiscordChatExporter.Gui/Framework/DialogManager.cs /^ private readonly AsyncNonKeyedLocker _dialogLock = new();$/;" f class:DialogManager file:
_dialogManager DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly DialogManager _dialogManager;$/;" f class:DashboardViewModel file:
_dialogResult DiscordChatExporter.Gui/Framework/DialogVIewModelBase.cs /^ private T? _dialogResult;$/;" f class:DialogViewModelBase file:
_discord DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private DiscordClient? _discord;$/;" f class:DashboardViewModel file:
_discordClient DiscordChatExporter.Cli/Commands/Base/DiscordCommandBase.cs /^ private DiscordClient? _discordClient;$/;" f class:DiscordCommandBase file:
_eventRoot DiscordChatExporter.Gui/App.axaml.cs /^ private readonly DisposableCollector _eventRoot = new();$/;" f class:App file:
_eventRoot DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly DisposableCollector _eventRoot = new();$/;" f class:DashboardViewModel file:
_eventRoot DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ private readonly DisposableCollector _eventRoot = new();$/;" f class:SettingsViewModel file:
_fromCodes DiscordChatExporter.Core/Discord/Data/EmojiIndex.cs /^ private static Dictionary<string, string> _fromCodes = new(5000, StringComparer.Ordinal)$/;" f class:EmojiIndex file:
_isBusy DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private bool _isBusy;$/;" f class:DashboardViewModel file:
_items DiscordChatExporter.Gui/Utils/DisposableCollector.cs /^ private readonly List<IDisposable> _items = [];$/;" f class:DisposableCollector file:
_lock DiscordChatExporter.Gui/Utils/DisposableCollector.cs /^ private readonly object _lock = new();$/;" f class:DisposableCollector file:
_mainViewModel DiscordChatExporter.Gui/App.axaml.cs /^ private readonly MainViewModel _mainViewModel;$/;" f class:App file:
_message DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ private string? _message = "Message";$/;" f class:MessageBoxViewModel file:
_outputPath DiscordChatExporter.Cli/Commands/Base/ExportCommandBase.cs /^ private readonly string _outputPath = Directory.GetCurrentDirectory();$/;" f class:ExportCommandBase file:
_path DiscordChatExporter.Core/Utils/UrlBuilder.cs /^ private string _path = "";$/;" f class:UrlBuilder file:
_progressMuxer DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly AutoResetProgressMuxer _progressMuxer;$/;" f class:DashboardViewModel file:
_queryParameters DiscordChatExporter.Core/Utils/UrlBuilder.cs /^ private readonly Dictionary<string, string?> _queryParameters = new($/;" f class:UrlBuilder file:
_selectedGuild DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private Guild? _selectedGuild;$/;" f class:DashboardViewModel file:
_services DiscordChatExporter.Gui/App.axaml.cs /^ private readonly ServiceProvider _services;$/;" f class:App file:
_settingsService DiscordChatExporter.Gui/App.axaml.cs /^ private readonly SettingsService _settingsService;$/;" f class:App file:
_settingsService DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly SettingsService _settingsService;$/;" f class:DashboardViewModel file:
_settingsService DiscordChatExporter.Gui/ViewModels/Dialogs/SettingsViewModel.cs /^ private readonly SettingsService _settingsService;$/;" f class:SettingsViewModel file:
_snackbarManager DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly SnackbarManager _snackbarManager;$/;" f class:DashboardViewModel file:
_title DiscordChatExporter.Gui/ViewModels/Dialogs/MessageBoxViewModel.cs /^ private string? _title = "Title";$/;" f class:MessageBoxViewModel file:
_toCodes DiscordChatExporter.Core/Discord/Data/EmojiIndex.cs /^ private static Dictionary<string, string> _toCodes = new(5000, StringComparer.Ordinal)$/;" f class:EmojiIndex file:
_token DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private string? _token;$/;" f class:DashboardViewModel file:
_viewModelManager DiscordChatExporter.Gui/ViewModels/Components/DashboardViewModel.cs /^ private readonly ViewModelManager _viewModelManager;$/;" f class:DashboardViewModel file:
channelId DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ Snowflake channelId$/;" f class:ExportWrapper
channelId DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<IHtmlDocument> ExportAsHtmlAsync(Snowflake channelId) =>$/;" f class:ExportWrapper
channelId DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<JsonElement> ExportAsJsonAsync(Snowflake channelId) =>$/;" f class:ExportWrapper
channelId DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<string> ExportAsCsvAsync(Snowflake channelId) =>$/;" f class:ExportWrapper
channelId DiscordChatExporter.Cli.Tests/Infra/ExportWrapper.cs /^ public static async ValueTask<string> ExportAsPlainTextAsync(Snowflake channelId) =>$/;" f class:ExportWrapper
exception DiscordChatExporter.Core/Utils/Http.cs /^ private static bool IsRetryableException(Exception exception) =>$/;" f class:Http file:
instant DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static Snowflake FromDate(DateTimeOffset instant) =>$/;" f struct:Snowflake
message DiscordChatExporter.Core/Exporting/Filtering/NullMessageFilter.cs /^ public override bool IsMatch(Message message) => true;$/;" f class:NullMessageFilter
methodDisplay DiscordChatExporter.Cli.Tests/xunit.runner.json /^ "methodDisplay": "method"$/;" s
methodDisplayOptions DiscordChatExporter.Cli.Tests/xunit.runner.json /^ "methodDisplayOptions": "all",$/;" s
operator > DiscordChatExporter.Core/Discord/Snowflake.cs /^ public static bool operator >(Snowflake left, Snowflake right) => left.CompareTo(right) > 0;$/;" m struct:Snowflake
other DiscordChatExporter.Core/Discord/Snowflake.cs /^ public int CompareTo(Snowflake other) => Value.CompareTo(other.Value);$/;" f struct:Snowflake
statusCode DiscordChatExporter.Core/Utils/Http.cs /^ private static bool IsRetryableStatusCode(HttpStatusCode statusCode) =>$/;" f class:Http file:
viewModel DiscordChatExporter.Gui/Framework/ViewManager.cs /^ private Control? TryCreateView(ViewModelBase viewModel) =>$/;" f class:ViewManager file:
~ViewModelBase DiscordChatExporter.Gui/Framework/ViewModelBase.cs /^ ~ViewModelBase() => Dispose(false);$/;" m class:ViewModelBase file: