mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-08-16 07:23:02 -06:00
Merge b23284514f into f6865c8216
This commit is contained in:
commit
e7a988f35b
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,5 +1,6 @@
|
||||||
# User-specific files
|
# User-specific files
|
||||||
.vs/
|
.vs/
|
||||||
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
|
|
||||||
|
|
@ -157,34 +157,48 @@ public partial class ExportRequest
|
||||||
Channel channel,
|
Channel channel,
|
||||||
Snowflake? after,
|
Snowflake? after,
|
||||||
Snowflake? before
|
Snowflake? before
|
||||||
) =>
|
)
|
||||||
Regex.Replace(
|
{
|
||||||
|
string preFormattedPath = Regex.Replace(
|
||||||
path,
|
path,
|
||||||
"%.",
|
"%.",
|
||||||
m =>
|
m =>
|
||||||
Path.EscapeFileName(
|
Path.EscapeFileName(
|
||||||
m.Value switch
|
m.Value switch
|
||||||
{
|
{
|
||||||
|
// On %T and %P, we have to make sure that we still get name and position of the category if the channel is a thread
|
||||||
"%g" => guild.Id.ToString(),
|
"%g" => guild.Id.ToString(),
|
||||||
"%G" => guild.Name,
|
"%G" => guild.Name,
|
||||||
|
|
||||||
"%t" => channel.Parent?.Id.ToString() ?? "",
|
"%t" => channel.Parent?.Id.ToString() ?? "",
|
||||||
"%T" => channel.Parent?.Name ?? "",
|
"%T"
|
||||||
|
=> channel.IsThread
|
||||||
|
? (channel.Parent?.Parent?.Name ?? "")
|
||||||
|
: channel.Parent?.Name ?? "",
|
||||||
|
|
||||||
"%c" => channel.Id.ToString(),
|
"%c" => channel.Id.ToString(),
|
||||||
"%C" => channel.Name,
|
"%C" => channel.Name,
|
||||||
|
|
||||||
"%p" => channel.Position?.ToString(CultureInfo.InvariantCulture) ?? "0",
|
"%p" => channel.Position?.ToString(CultureInfo.InvariantCulture) ?? "0",
|
||||||
"%P" => channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture)
|
"%P"
|
||||||
|
=> channel.IsThread
|
||||||
|
? (
|
||||||
|
channel
|
||||||
|
.Parent?.Parent
|
||||||
|
?.Position
|
||||||
|
?.ToString(CultureInfo.InvariantCulture) ?? ""
|
||||||
|
)
|
||||||
|
: channel.Parent?.Position?.ToString(CultureInfo.InvariantCulture)
|
||||||
?? "0",
|
?? "0",
|
||||||
|
|
||||||
"%a" => after?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
|
"%a"
|
||||||
|
=> after?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
|
||||||
?? "",
|
?? "",
|
||||||
"%b" => before
|
"%b"
|
||||||
?.ToDate()
|
=> before?.ToDate().ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
|
||||||
.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)
|
|
||||||
?? "",
|
?? "",
|
||||||
"%d" => DateTimeOffset.Now.ToString(
|
"%d"
|
||||||
|
=> DateTimeOffset.Now.ToString(
|
||||||
"yyyy-MM-dd",
|
"yyyy-MM-dd",
|
||||||
CultureInfo.InvariantCulture
|
CultureInfo.InvariantCulture
|
||||||
),
|
),
|
||||||
|
|
@ -195,6 +209,32 @@ public partial class ExportRequest
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// We are looking for any structure in the path which contains either %y or %z. If the channel is a thread, we can resolve the placeholders, otherwise, that whole structure needs to be removed.
|
||||||
|
string formattedPath = Regex.Replace(
|
||||||
|
preFormattedPath,
|
||||||
|
@"\\[^\\]*%[xyz][^\\]*\\",
|
||||||
|
m =>
|
||||||
|
channel.IsThread
|
||||||
|
? Regex.Replace(
|
||||||
|
m.Value,
|
||||||
|
"%[xyz]",
|
||||||
|
n =>
|
||||||
|
n.Value switch
|
||||||
|
{
|
||||||
|
"%x" => channel.Parent?.Id.ToString() ?? "",
|
||||||
|
"%y"
|
||||||
|
=> channel
|
||||||
|
.Parent?.Position
|
||||||
|
?.ToString(CultureInfo.InvariantCulture) ?? "",
|
||||||
|
"%z" => channel.Parent?.Name ?? "",
|
||||||
|
_ => n.Value
|
||||||
|
}
|
||||||
|
)
|
||||||
|
: "\\"
|
||||||
|
);
|
||||||
|
return formattedPath;
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetOutputBaseFilePath(
|
private static string GetOutputBaseFilePath(
|
||||||
Guild guild,
|
Guild guild,
|
||||||
Channel channel,
|
Channel channel,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue