Add config entries for interviews
This commit is contained in:
parent
b02aacadd6
commit
3d2d987dfe
4 changed files with 46 additions and 8 deletions
|
@ -114,7 +114,9 @@ public class NewCommand
|
||||||
return (false, "You cannot use this command in a ticket channel.");
|
return (false, "You cannot use this command in a ticket channel.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Database.IsStaff(userID) && Database.TryGetOpenTickets(userID, out List<Database.Ticket> ownTickets) && ownTickets.Count >= Config.ticketLimit)
|
if (!Database.IsStaff(userID)
|
||||||
|
&& Database.TryGetOpenTickets(userID, out List<Database.Ticket> ownTickets)
|
||||||
|
&& (ownTickets.Count >= Config.ticketLimit && Config.ticketLimit != 0))
|
||||||
{
|
{
|
||||||
return (false, "You have reached the limit for maximum open tickets.");
|
return (false, "You have reached the limit for maximum open tickets.");
|
||||||
}
|
}
|
||||||
|
@ -187,6 +189,7 @@ public class NewCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
DiscordMessage message = await ticketChannel.SendMessageAsync("Hello, " + member.Mention + "!\n" + Config.welcomeMessage);
|
DiscordMessage message = await ticketChannel.SendMessageAsync("Hello, " + member.Mention + "!\n" + Config.welcomeMessage);
|
||||||
|
|
||||||
if (Config.pinFirstMessage)
|
if (Config.pinFirstMessage)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -202,6 +205,11 @@ public class NewCommand
|
||||||
// Refreshes the channel as changes were made to it above
|
// Refreshes the channel as changes were made to it above
|
||||||
ticketChannel = await SupportChild.client.GetChannelAsync(ticketChannel.Id);
|
ticketChannel = await SupportChild.client.GetChannelAsync(ticketChannel.Id);
|
||||||
|
|
||||||
|
if (Config.interviewsEnabled)
|
||||||
|
{
|
||||||
|
Interviewer.StartInterview(ticketChannel);
|
||||||
|
}
|
||||||
|
|
||||||
if (staffID != 0)
|
if (staffID != 0)
|
||||||
{
|
{
|
||||||
await ticketChannel.SendMessageAsync(new DiscordEmbedBuilder
|
await ticketChannel.SendMessageAsync(new DiscordEmbedBuilder
|
||||||
|
|
13
Config.cs
13
Config.cs
|
@ -26,6 +26,10 @@ internal static class Config
|
||||||
internal static bool assignmentNotifications = false;
|
internal static bool assignmentNotifications = false;
|
||||||
internal static bool closingNotifications = false;
|
internal static bool closingNotifications = false;
|
||||||
|
|
||||||
|
internal static bool interviewsEnabled = false;
|
||||||
|
internal static bool deleteMessagesAfterSummary = false;
|
||||||
|
internal static bool deleteMessagesAfterNoSummary = false;
|
||||||
|
|
||||||
internal static string hostName = "127.0.0.1";
|
internal static string hostName = "127.0.0.1";
|
||||||
internal static int port = 3306;
|
internal static int port = 3306;
|
||||||
internal static string database = "supportchild";
|
internal static string database = "supportchild";
|
||||||
|
@ -69,16 +73,15 @@ internal static class Config
|
||||||
if (!Enum.TryParse(stringLogLevel, true, out LogLevel logLevel))
|
if (!Enum.TryParse(stringLogLevel, true, out LogLevel logLevel))
|
||||||
{
|
{
|
||||||
logLevel = LogLevel.Information;
|
logLevel = LogLevel.Information;
|
||||||
Logger.Warn("Log level '" + stringLogLevel + "' invalid, using 'Information' instead.");
|
Logger.Warn("Log level '" + stringLogLevel + "' is invalid, using 'Information' instead.");
|
||||||
}
|
}
|
||||||
Logger.SetLogLevel(logLevel);
|
Logger.SetLogLevel(logLevel);
|
||||||
|
|
||||||
string stringTimestampFormat = json.SelectToken("bot.timestamp-format")?.Value<string>() ?? "RelativeTime";
|
string stringTimestampFormat = json.SelectToken("bot.timestamp-format")?.Value<string>() ?? "RelativeTime";
|
||||||
|
|
||||||
if (!Enum.TryParse(stringTimestampFormat, true, out timestampFormat))
|
if (!Enum.TryParse(stringTimestampFormat, true, out timestampFormat))
|
||||||
{
|
{
|
||||||
timestampFormat = TimestampFormat.RelativeTime;
|
timestampFormat = TimestampFormat.RelativeTime;
|
||||||
Logger.Warn("Timestamp '" + stringTimestampFormat + "' invalid, using 'RelativeTime' instead.");
|
Logger.Warn("Timestamp '" + stringTimestampFormat + "' is invalid, using 'RelativeTime' instead.");
|
||||||
}
|
}
|
||||||
|
|
||||||
randomAssignment = json.SelectToken("bot.random-assignment")?.Value<bool>() ?? false;
|
randomAssignment = json.SelectToken("bot.random-assignment")?.Value<bool>() ?? false;
|
||||||
|
@ -94,6 +97,10 @@ internal static class Config
|
||||||
assignmentNotifications = json.SelectToken("notifications.assignment")?.Value<bool>() ?? false;
|
assignmentNotifications = json.SelectToken("notifications.assignment")?.Value<bool>() ?? false;
|
||||||
closingNotifications = json.SelectToken("notifications.closing")?.Value<bool>() ?? false;
|
closingNotifications = json.SelectToken("notifications.closing")?.Value<bool>() ?? false;
|
||||||
|
|
||||||
|
interviewsEnabled = json.SelectToken("interviews.enabled")?.Value<bool>() ?? false;
|
||||||
|
deleteMessagesAfterSummary = json.SelectToken("interviews.delete-messages-after-summary")?.Value<bool>() ?? false;
|
||||||
|
deleteMessagesAfterNoSummary = json.SelectToken("interviews.delete-messages-after-no-summary")?.Value<bool>() ?? false;
|
||||||
|
|
||||||
// Reads database info
|
// Reads database info
|
||||||
hostName = json.SelectToken("database.address")?.Value<string>() ?? "";
|
hostName = json.SelectToken("database.address")?.Value<string>() ?? "";
|
||||||
port = json.SelectToken("database.port")?.Value<int>() ?? 3306;
|
port = json.SelectToken("database.port")?.Value<int>() ?? 3306;
|
||||||
|
|
|
@ -351,8 +351,12 @@ public static class Interviewer
|
||||||
public static async Task RestartInterview(SlashCommandContext command)
|
public static async Task RestartInterview(SlashCommandContext command)
|
||||||
{
|
{
|
||||||
if (Database.TryGetInterview(command.Channel.Id, out InterviewQuestion interviewRoot))
|
if (Database.TryGetInterview(command.Channel.Id, out InterviewQuestion interviewRoot))
|
||||||
|
{
|
||||||
|
if (Config.deleteMessagesAfterNoSummary)
|
||||||
{
|
{
|
||||||
await DeletePreviousMessages(interviewRoot, command.Channel);
|
await DeletePreviousMessages(interviewRoot, command.Channel);
|
||||||
|
}
|
||||||
|
|
||||||
if (!Database.TryDeleteInterview(command.Channel.Id))
|
if (!Database.TryDeleteInterview(command.Channel.Id))
|
||||||
{
|
{
|
||||||
Logger.Error("Could not delete interview from database. Channel ID: " + command.Channel.Id);
|
Logger.Error("Could not delete interview from database. Channel ID: " + command.Channel.Id);
|
||||||
|
@ -624,7 +628,11 @@ public static class Interviewer
|
||||||
|
|
||||||
await channel.SendMessageAsync(embed);
|
await channel.SendMessageAsync(embed);
|
||||||
|
|
||||||
|
if (Config.deleteMessagesAfterSummary)
|
||||||
|
{
|
||||||
await DeletePreviousMessages(interviewRoot, channel);
|
await DeletePreviousMessages(interviewRoot, channel);
|
||||||
|
}
|
||||||
|
|
||||||
if (!Database.TryDeleteInterview(channel.Id))
|
if (!Database.TryDeleteInterview(channel.Id))
|
||||||
{
|
{
|
||||||
Logger.Error("Could not delete interview from database. Channel ID: " + channel.Id);
|
Logger.Error("Could not delete interview from database. Channel ID: " + channel.Id);
|
||||||
|
@ -638,7 +646,11 @@ public static class Interviewer
|
||||||
Description = nextQuestion.message
|
Description = nextQuestion.message
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (Config.deleteMessagesAfterNoSummary)
|
||||||
|
{
|
||||||
await DeletePreviousMessages(interviewRoot, channel);
|
await DeletePreviousMessages(interviewRoot, channel);
|
||||||
|
}
|
||||||
|
|
||||||
if (!Database.TryDeleteInterview(channel.Id))
|
if (!Database.TryDeleteInterview(channel.Id))
|
||||||
{
|
{
|
||||||
Logger.Error("Could not delete interview from database. Channel ID: " + channel.Id);
|
Logger.Error("Could not delete interview from database. Channel ID: " + channel.Id);
|
||||||
|
|
|
@ -48,11 +48,22 @@ notifications:
|
||||||
ticket-updated-delay: 0.5
|
ticket-updated-delay: 0.5
|
||||||
|
|
||||||
# Notifies staff when they are assigned to tickets.
|
# Notifies staff when they are assigned to tickets.
|
||||||
assignment: true
|
assignment: true # TODO: Add option to be notified only when the initial interview is finished.
|
||||||
|
|
||||||
# Notifies the user opening the ticket that their ticket was closed and includes the transcript.
|
# Notifies the user opening the ticket that their ticket was closed and includes the transcript.
|
||||||
closing: true
|
closing: true
|
||||||
|
|
||||||
|
interviews: # TODO: Implement
|
||||||
|
# Enable the interview system. You must use the admin commands to set up interview templates before you can start using it.
|
||||||
|
# Any existing interviews can still be completed while interviews are disabled, but new ones will not be created.
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# Whether to delete the interview question and answer messages after an interview summary is posted.
|
||||||
|
delete-messages-after-summary: true
|
||||||
|
|
||||||
|
# Whether to delete the interview question and answer messages after an interview ends without a summary.
|
||||||
|
delete-messages-after-no-summary: true
|
||||||
|
|
||||||
database:
|
database:
|
||||||
# Address and port of the mysql server.
|
# Address and port of the mysql server.
|
||||||
address: "127.0.0.1"
|
address: "127.0.0.1"
|
||||||
|
|
Loading…
Reference in a new issue