You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using CliFx.Attributes;
|
|
using CliFx.Infrastructure;
|
|
using DiscordChatExporter.Cli.Commands.Base;
|
|
using DiscordChatExporter.Core.Discord.Data;
|
|
|
|
namespace DiscordChatExporter.Cli.Commands
|
|
{
|
|
[Command("exportall", Description = "Export all accessible channels.")]
|
|
public class ExportAllCommand : ExportCommandBase
|
|
{
|
|
[CommandOption("include-dm", Description = "Include direct message channels.")]
|
|
public bool IncludeDirectMessages { get; init; } = true;
|
|
|
|
public override async ValueTask ExecuteAsync(IConsole console)
|
|
{
|
|
await base.ExecuteAsync(console);
|
|
|
|
// Get channel metadata
|
|
await console.Output.WriteLineAsync("Fetching channels...");
|
|
|
|
var channels = new List<Channel>();
|
|
|
|
// Aggregate channels from all guilds
|
|
await foreach (var guild in Discord.GetUserGuildsAsync())
|
|
{
|
|
// Skip DMs if instructed to
|
|
if (!IncludeDirectMessages && guild.Id == Guild.DirectMessages.Id)
|
|
continue;
|
|
|
|
await foreach (var channel in Discord.GetGuildChannelsAsync(guild.Id))
|
|
{
|
|
channels.Add(channel);
|
|
}
|
|
}
|
|
|
|
// Export
|
|
await ExportAsync(console, channels);
|
|
}
|
|
}
|
|
} |