Simplify stdin reading: use ReadAllLinesAsync extension and Snowflake.Parse

Agent-Logs-Url: https://github.com/Tyrrrz/DiscordChatExporter/sessions/59c1113d-3c9c-4900-a9b0-5c6116ce7c75

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-03 16:12:47 +00:00 committed by GitHub
parent 1087173fef
commit 316e8c6ea8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 20 deletions

View file

@ -4,6 +4,7 @@ using CliFx;
using CliFx.Binding; using CliFx.Binding;
using CliFx.Infrastructure; using CliFx.Infrastructure;
using DiscordChatExporter.Cli.Commands.Base; using DiscordChatExporter.Cli.Commands.Base;
using DiscordChatExporter.Cli.Utils.Extensions;
using DiscordChatExporter.Core.Discord; using DiscordChatExporter.Core.Discord;
using DiscordChatExporter.Core.Discord.Data; using DiscordChatExporter.Core.Discord.Data;
using DiscordChatExporter.Core.Utils.Extensions; using DiscordChatExporter.Core.Utils.Extensions;
@ -33,26 +34,8 @@ public partial class ExportChannelsCommand : ExportCommandBase
var channelIds = new List<Snowflake>(ChannelIds); var channelIds = new List<Snowflake>(ChannelIds);
if (channelIds.Count == 0 && console.IsInputRedirected) if (channelIds.Count == 0 && console.IsInputRedirected)
{ {
var lineNumber = 0; await foreach (var line in console.Input.ReadAllLinesAsync())
string? line; channelIds.Add(Snowflake.Parse(line));
while ((line = await console.Input.ReadLineAsync()) is not null)
{
lineNumber++;
line = line.Trim();
if (string.IsNullOrEmpty(line))
continue;
var snowflake = Snowflake.TryParse(line);
if (snowflake is null)
{
throw new CommandException(
$"Invalid channel ID on line {lineNumber}: '{line}'. "
+ "Each line must contain a valid channel ID."
);
}
channelIds.Add(snowflake.Value);
}
} }
if (channelIds.Count == 0) if (channelIds.Count == 0)

View file

@ -1,4 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using CliFx.Infrastructure; using CliFx.Infrastructure;
using Spectre.Console; using Spectre.Console;
@ -61,4 +63,15 @@ internal static class ConsoleExtensions
progressTask.StopTask(); progressTask.StopTask();
} }
} }
public static async IAsyncEnumerable<string> ReadAllLinesAsync(this TextReader reader)
{
string? line;
while ((line = await reader.ReadLineAsync()) is not null)
{
line = line.Trim();
if (!string.IsNullOrEmpty(line))
yield return line;
}
}
} }