This commit is contained in:
indifferentketchup
2026-04-07 09:29:24 -05:00
parent 8636cca52e
commit 56ba8e363a
4 changed files with 28 additions and 4 deletions

View File

@@ -544,6 +544,13 @@ async function registerCommands() {
.setIntegrationTypes([ApplicationIntegrationType.GuildInstall]) .setIntegrationTypes([ApplicationIntegrationType.GuildInstall])
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages),
new SlashCommandBuilder()
.setName('fix-stale-tickets')
.setDescription('Admin only: backfill lastActivity on open tickets where it is null (sets to createdAt).')
.setContexts([InteractionContextType.Guild])
.setIntegrationTypes([ApplicationIntegrationType.GuildInstall])
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
new SlashCommandBuilder() new SlashCommandBuilder()
.setName('accountinfo') .setName('accountinfo')
.setDescription('Look up website account info by email or Discord user') .setDescription('Look up website account info by email or Discord user')

View File

@@ -706,8 +706,7 @@ async function handleTicketModal(interaction) {
.setTitle("We got your ticket.") .setTitle("We got your ticket.")
.setDescription("We'll be with you as soon as possible.") .setDescription("We'll be with you as soon as possible.")
.setColor(5763719) .setColor(5763719)
.setThumbnail("https://indifferentbroccoli.com/img/broccoli_shadow_square.png") .setThumbnail("https://indifferentbroccoli.com/img/broccoli_shadow_square.png");
.setFooter({ text: "indifferent broccoli tickets (:|)", iconURL: "https://i.ibb.co/sJdytfFM/Untitled-design-6.png" });
const infoEmbed = new EmbedBuilder() const infoEmbed = new EmbedBuilder()
.setColor(5763719) .setColor(5763719)

View File

@@ -1156,6 +1156,24 @@ async function handleCommand(interaction) {
} }
} }
// /fix-stale-tickets
if (interaction.commandName === 'fix-stale-tickets') {
if (interaction.user.id !== CONFIG.ADMIN_ID) {
return interaction.reply({ content: 'You do not have permission to run this command.', ephemeral: true });
}
await interaction.deferReply({ ephemeral: true });
try {
const result = await Ticket.updateMany(
{ status: 'open', lastActivity: null },
[{ $set: { lastActivity: '$createdAt' } }]
);
await interaction.editReply(`Fixed ${result.modifiedCount} ticket(s).`);
} catch (err) {
console.error('fix-stale-tickets:', err);
await interaction.editReply('❌ Failed to backfill tickets.').catch(() => {});
}
}
// /stats // /stats
if (interaction.commandName === 'stats') { if (interaction.commandName === 'stats') {
trackInteraction('commands', 'stats', interaction.user.tag); trackInteraction('commands', 'stats', interaction.user.tag);

View File

@@ -71,7 +71,7 @@ async function checkStaleSurge(client) {
const cutoff = new Date(Date.now() - CONFIG.SURGE_STALE_HOURS * 3600000); const cutoff = new Date(Date.now() - CONFIG.SURGE_STALE_HOURS * 3600000);
const count = await Ticket.countDocuments({ const count = await Ticket.countDocuments({
status: 'open', status: 'open',
lastActivity: { $lte: cutoff } lastActivity: { $lte: cutoff, $ne: null }
}); });
if (count >= CONFIG.SURGE_STALE_COUNT) { if (count >= CONFIG.SURGE_STALE_COUNT) {
setCooldown('surge:stale'); setCooldown('surge:stale');
@@ -88,7 +88,7 @@ async function checkNeedsResponseSurge(client) {
const count = await Ticket.countDocuments({ const count = await Ticket.countDocuments({
status: 'open', status: 'open',
lastMessageAuthorIsStaff: false, lastMessageAuthorIsStaff: false,
lastActivity: { $lte: cutoff } lastActivity: { $lte: cutoff, $ne: null }
}); });
if (count >= CONFIG.SURGE_NEEDS_RESPONSE_COUNT) { if (count >= CONFIG.SURGE_NEEDS_RESPONSE_COUNT) {
setCooldown('surge:needs_response'); setCooldown('surge:needs_response');