Extract thread status and improve CLI output

This commit is contained in:
Tyrrrz 2023-06-09 01:20:32 +03:00
parent 609ca0fc0d
commit 11d34109a7
4 changed files with 46 additions and 14 deletions

View file

@ -36,19 +36,20 @@ public class GetChannelsCommand : DiscordCommandBase
.ThenBy(c => c.Name) .ThenBy(c => c.Name)
.ToArray(); .ToArray();
var threads = Array.Empty<ChannelThread>(); var channelIdMaxLength = channels
if (IncludeThreads) .Select(c => c.Id.ToString().Length)
{ .OrderDescending()
threads = (await Discord.GetGuildThreadsAsync(GuildId, cancellationToken)) .FirstOrDefault();
.OrderBy(c => c.Name)
.ToArray(); var threads = IncludeThreads
} ? (await Discord.GetGuildThreadsAsync(GuildId, cancellationToken)).OrderBy(c => c.Name).ToArray()
: Array.Empty<ChannelThread>();
foreach (var channel in channels) foreach (var channel in channels)
{ {
// Channel ID // Channel ID
await console.Output.WriteAsync( await console.Output.WriteAsync(
channel.Id.ToString().PadRight(20, ' ') channel.Id.ToString().PadRight(channelIdMaxLength, ' ')
); );
// Separator // Separator
@ -59,14 +60,20 @@ public class GetChannelsCommand : DiscordCommandBase
using (console.WithForegroundColor(ConsoleColor.White)) using (console.WithForegroundColor(ConsoleColor.White))
await console.Output.WriteLineAsync($"{channel.Category.Name} / {channel.Name}"); await console.Output.WriteLineAsync($"{channel.Category.Name} / {channel.Name}");
foreach (var thread in threads.Where(t => t.ParentId == channel.Id)) var channelThreads = threads.Where(t => t.ParentId == channel.Id).ToArray();
var channelThreadIdMaxLength = channelThreads
.Select(t => t.Id.ToString().Length)
.OrderDescending()
.FirstOrDefault();
foreach (var thread in channelThreads)
{ {
// Indent // Indent
await console.Output.WriteAsync('\t'); await console.Output.WriteAsync(" * ");
// Thread ID // Thread ID
await console.Output.WriteAsync( await console.Output.WriteAsync(
thread.Id.ToString().PadRight(20, ' ') thread.Id.ToString().PadRight(channelThreadIdMaxLength, ' ')
); );
// Separator // Separator
@ -75,7 +82,15 @@ public class GetChannelsCommand : DiscordCommandBase
// Thread name // Thread name
using (console.WithForegroundColor(ConsoleColor.White)) using (console.WithForegroundColor(ConsoleColor.White))
await console.Output.WriteLineAsync($"Thread / {thread.Name}"); await console.Output.WriteAsync($"Thread / {thread.Name}");
// Separator
using (console.WithForegroundColor(ConsoleColor.DarkGray))
await console.Output.WriteAsync(" | ");
// Thread status
using (console.WithForegroundColor(ConsoleColor.White))
await console.Output.WriteLineAsync(thread.IsActive ? "Active" : "Archived");
} }
} }
} }

View file

@ -22,11 +22,16 @@ public class GetDirectChannelsCommand : DiscordCommandBase
.ThenBy(c => c.Name) .ThenBy(c => c.Name)
.ToArray(); .ToArray();
var channelIdMaxLength = channels
.Select(c => c.Id.ToString().Length)
.OrderDescending()
.FirstOrDefault();
foreach (var channel in channels) foreach (var channel in channels)
{ {
// Channel ID // Channel ID
await console.Output.WriteAsync( await console.Output.WriteAsync(
channel.Id.ToString().PadRight(20, ' ') channel.Id.ToString().PadRight(channelIdMaxLength, ' ')
); );
// Separator // Separator

View file

@ -22,11 +22,16 @@ public class GetGuildsCommand : DiscordCommandBase
.ThenBy(g => g.Name) .ThenBy(g => g.Name)
.ToArray(); .ToArray();
var guildIdMaxLength = guilds
.Select(g => g.Id.ToString().Length)
.OrderDescending()
.FirstOrDefault();
foreach (var guild in guilds) foreach (var guild in guilds)
{ {
// Guild ID // Guild ID
await console.Output.WriteAsync( await console.Output.WriteAsync(
guild.Id.ToString().PadRight(20, ' ') guild.Id.ToString().PadRight(guildIdMaxLength, ' ')
); );
// Separator // Separator

View file

@ -12,6 +12,7 @@ public record ChannelThread(
Snowflake GuildId, Snowflake GuildId,
Snowflake ParentId, Snowflake ParentId,
string Name, string Name,
bool IsActive,
Snowflake? LastMessageId) : IHasId Snowflake? LastMessageId) : IHasId
{ {
public static ChannelThread Parse(JsonElement json) public static ChannelThread Parse(JsonElement json)
@ -22,6 +23,11 @@ public record ChannelThread(
var parentId = json.GetProperty("parent_id").GetNonWhiteSpaceString().Pipe(Snowflake.Parse); var parentId = json.GetProperty("parent_id").GetNonWhiteSpaceString().Pipe(Snowflake.Parse);
var name = json.GetProperty("name").GetNonWhiteSpaceString(); var name = json.GetProperty("name").GetNonWhiteSpaceString();
var isActive = !json
.GetPropertyOrNull("thread_metadata")?
.GetPropertyOrNull("archived")?
.GetBooleanOrNull() ?? true;
var lastMessageId = json var lastMessageId = json
.GetPropertyOrNull("last_message_id")? .GetPropertyOrNull("last_message_id")?
.GetNonWhiteSpaceStringOrNull()? .GetNonWhiteSpaceStringOrNull()?
@ -33,6 +39,7 @@ public record ChannelThread(
guildId, guildId,
parentId, parentId,
name, name,
isActive,
lastMessageId lastMessageId
); );
} }