Skip to content

Commit

Permalink
Tickets with assets smaller than 25MiB include them in the transcript
Browse files Browse the repository at this point in the history
  • Loading branch information
KarlOfDuty committed Nov 25, 2024
1 parent a598597 commit 5e5af51
Show file tree
Hide file tree
Showing 4 changed files with 238 additions and 47 deletions.
98 changes: 76 additions & 22 deletions Commands/CloseCommand.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
Expand All @@ -13,6 +13,7 @@ namespace SupportBoi.Commands;

public class CloseCommand
{
// TODO: Refactor this class a whole lot
private static Dictionary<ulong, string> closeReasons = new Dictionary<ulong, string>();

[RequireGuild]
Expand Down Expand Up @@ -81,11 +82,52 @@ await interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddEmbed
closeReason = "\nReason: " + cachedReason + "\n";
}

string fileName = Transcriber.GetZipFilename(ticket.id);
string filePath = Transcriber.GetZipPath(ticket.id);
long zipSize = 0;

// If the zip transcript doesn't exist, use the html file.
try
{
FileInfo fi = new FileInfo(filePath);
if (!fi.Exists || fi.Length >= 26214400)
{
fileName = Transcriber.GetHTMLFilename(ticket.id);
filePath = Transcriber.GetHtmlPath(ticket.id);
}
zipSize = fi.Length;
}
catch (Exception e)
{
await interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Red,
Description = "ERROR: Could not find transcript file. Aborting..."
}));
Logger.Error("Failed to access transcript file:", e);
return;
}

// Check if the chosen file path works.
if (!File.Exists(filePath))
{
await interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Red,
Description = "ERROR: Could not find transcript file. Aborting..."
}));
Logger.Error("Transcript file does not exist: \"" + filePath + "\"");
return;
}

try
{
// Log it if the log channel exists
DiscordChannel logChannel = await SupportBoi.client.GetChannelAsync(Config.logChannel);
DiscordEmbed embed = new DiscordEmbedBuilder

await using FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
DiscordMessageBuilder message = new DiscordMessageBuilder();
message.AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Green,
Description = "Ticket " + ticket.id.ToString("00000") + " closed by " +
Expand All @@ -94,12 +136,8 @@ await interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddEmbed
{
Text = "Ticket: " + ticket.id.ToString("00000")
}
};

await using FileStream file = new FileStream(Transcriber.GetPath(ticket.id), FileMode.Open, FileAccess.Read);
DiscordMessageBuilder message = new DiscordMessageBuilder();
message.AddEmbed(embed);
message.AddFiles(new Dictionary<string, Stream> { { Transcriber.GetFilename(ticket.id), file } });
});
message.AddFiles(new Dictionary<string, Stream> { { fileName, file } });

await logChannel.SendMessageAsync(message);
}
Expand All @@ -110,25 +148,41 @@ await interaction.EditOriginalResponseAsync(new DiscordWebhookBuilder().AddEmbed

if (Config.closingNotifications)
{
DiscordEmbed embed = new DiscordEmbedBuilder
try
{
Color = DiscordColor.Green,
Description = "Ticket " + ticket.id.ToString("00000") + " which you opened has now been closed, " +
"check the transcript for more info.\n" + closeReason,
Footer = new DiscordEmbedBuilder.EmbedFooter
DiscordUser staffMember = await SupportBoi.client.GetUserAsync(ticket.creatorID);
await using FileStream file = new(filePath, FileMode.Open, FileAccess.Read);

DiscordMessageBuilder message = new();

if (zipSize >= 26214400)
{
Text = "Ticket: " + ticket.id.ToString("00000")
message.AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Orange,
Description = "Ticket " + ticket.id.ToString("00000") + " which you opened has now been closed, check the transcript for more info.\n\n" +
"The zip file is too large, sending only the HTML file. Ask an administrator for the zip if you need it.\"\n" + closeReason,
Footer = new DiscordEmbedBuilder.EmbedFooter
{
Text = "Ticket: " + ticket.id.ToString("00000")
}
});
}
else
{
message.AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Green,
Description = "Ticket " + ticket.id.ToString("00000") + " which you opened has now been closed, " + "check the transcript for more info.\n" + closeReason,
Footer = new DiscordEmbedBuilder.EmbedFooter
{
Text = "Ticket: " + ticket.id.ToString("00000")
}
});
}
};

try
{
DiscordUser staffMember = await SupportBoi.client.GetUserAsync(ticket.creatorID);
await using FileStream file = new FileStream(Transcriber.GetPath(ticket.id), FileMode.Open, FileAccess.Read);

DiscordMessageBuilder message = new DiscordMessageBuilder();
message.AddEmbed(embed);
message.AddFiles(new Dictionary<string, Stream> { { Transcriber.GetFilename(ticket.id), file } });
message.AddFiles(new Dictionary<string, Stream> { { fileName, file } });

await staffMember.SendMessageAsync(message);
}
Expand Down
99 changes: 83 additions & 16 deletions Commands/TranscriptCommand.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
Expand All @@ -13,6 +13,7 @@ namespace SupportBoi.Commands;

public class TranscriptCommand
{
// TODO: Refactor the hell out of this
[RequireGuild]
[Command("transcript")]
[Description("Creates a transcript of a ticket.")]
Expand Down Expand Up @@ -80,11 +81,49 @@ await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new Discord
}
}

string fileName = Transcriber.GetZipFilename(ticket.id);
string filePath = Transcriber.GetZipPath(ticket.id);
long zipSize = 0;

// If the zip transcript doesn't exist, use the html file.
try
{
FileInfo fi = new FileInfo(filePath);
if (!fi.Exists || fi.Length >= 26214400)
{
fileName = Transcriber.GetHTMLFilename(ticket.id);
filePath = Transcriber.GetHtmlPath(ticket.id);
}
zipSize = fi.Length;
}
catch (Exception e)
{
await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Red,
Description = "ERROR: Could not find transcript file. Aborting..."
}));
Logger.Error("Failed to access transcript file:", e);
return;
}

// Check if the chosen file path works.
if (!File.Exists(filePath))
{
await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Red,
Description = "ERROR: Could not find transcript file. Aborting..."
}));
Logger.Error("Transcript file does not exist: \"" + filePath + "\"");
return;
}

try
{
// Log it if the log channel exists
DiscordChannel logChannel = await SupportBoi.client.GetChannelAsync(Config.logChannel);
await using FileStream file = new FileStream(Transcriber.GetPath(ticket.id), FileMode.Open, FileAccess.Read);
await using FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);

DiscordMessageBuilder message = new DiscordMessageBuilder();
message.AddEmbed(new DiscordEmbedBuilder
Expand All @@ -96,7 +135,7 @@ await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new Discord
Text = "Ticket: " + ticket.id.ToString("00000")
}
});
message.AddFiles(new Dictionary<string, Stream> { { Transcriber.GetFilename(ticket.id), file } });
message.AddFiles(new Dictionary<string, Stream> { { fileName, file } });

await logChannel.SendMessageAsync(message);
}
Expand All @@ -105,20 +144,54 @@ await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new Discord
Logger.Error("Could not send message in log channel.");
}

if (await SendDirectMessage(command, fileName, filePath, zipSize, ticket.id))
{
await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Green,
Description = "Transcript sent!\n"
}));
}
}

private static async Task<bool> SendDirectMessage(SlashCommandContext command, string fileName, string filePath, long zipSize, uint ticketID)
{
try
{
// Send transcript in a direct message
await using FileStream file = new FileStream(Transcriber.GetPath(ticket.id), FileMode.Open, FileAccess.Read);
await using FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);

DiscordMessageBuilder directMessage = new DiscordMessageBuilder();
directMessage.AddEmbed(new DiscordEmbedBuilder

if (zipSize >= 26214400)
{
Color = DiscordColor.Green,
Description = "Transcript generated!\n"
});
directMessage.AddFiles(new Dictionary<string, Stream> { { Transcriber.GetFilename(ticket.id), file } });
directMessage.AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Orange,
Description = "Transcript generated.\n\nThe zip file is too large, sending only the HTML file. Ask an administrator for the zip if you need it.",
Footer = new DiscordEmbedBuilder.EmbedFooter
{
Text = "Ticket: " + ticketID.ToString("00000")
}
});
}
else
{
directMessage.AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Green,
Description = "Transcript generated!\n",
Footer = new DiscordEmbedBuilder.EmbedFooter
{
Text = "Ticket: " + ticketID.ToString("00000")
}
});
}

directMessage.AddFiles(new Dictionary<string, Stream> { { fileName, file } });

await command.Member.SendMessageAsync(directMessage);
return true;
}
catch (UnauthorizedException)
{
Expand All @@ -127,13 +200,7 @@ await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new Discord
Color = DiscordColor.Red,
Description = "Not allowed to send direct message to you, please check your privacy settings.\n"
}));
return;
return false;
}

await command.EditResponseAsync(new DiscordWebhookBuilder().AddEmbed(new DiscordEmbedBuilder
{
Color = DiscordColor.Green,
Description = "Transcript sent!\n"
}));
}
}
1 change: 1 addition & 0 deletions SupportBoi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AsyncKeyedLock" Version="7.1.4" />
<PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="DSharpPlus" Version="5.0.0-nightly-02397" />
<PackageReference Include="DSharpPlus.Commands" Version="5.0.0-nightly-02397" />
Expand Down
Loading

0 comments on commit 5e5af51

Please sign in to comment.