change in ticket renaming and flow

This commit is contained in:
indifferentketchup
2026-04-06 16:37:50 -05:00
parent 1496a96274
commit 4b984312a8
4 changed files with 58 additions and 42 deletions

View File

@@ -16,12 +16,11 @@ const {
} = require('discord.js');
const { mongoose } = require('../db-connection');
const { CONFIG } = require('../config');
const { canRename, makeTicketName, minutesFromMs, getOrCreateTicketCategory, cleanupEmptyOverflowCategory, createDiscordTicketAsThread, checkTicketCreationRateLimit } = require('../services/tickets');
const { canRename, makeTicketName, minutesFromMs, getOrCreateTicketCategory, cleanupEmptyOverflowCategory, createDiscordTicketAsThread, checkTicketCreationRateLimit, getSenderLocal } = require('../services/tickets');
const { sendTicketClosedEmail } = require('../services/gmail');
const { getTicketActionRow } = require('../utils/ticketComponents');
const { setEmailRouting } = require('../services/guildSettings');
const { enqueueRename, enqueueMove } = require('../services/channelQueue');
const { createStaffChannel } = require('../services/staffChannel');
const { enqueueRename } = require('../services/channelQueue');
const { runEscalation, runDeescalation } = require('./commands');
const { trackInteraction, trackError } = require('./analytics');
@@ -301,12 +300,30 @@ async function handleClaim(interaction, ticket) {
freshTicket.claimedBy = claimerLabel;
freshTicket.claimerId = interaction.user.id;
// Resolve claimerEmoji from STAFF_EMOJIS map (fallback to CLAIMER_EMOJI_FALLBACK)
const claimerEmoji = CONFIG.STAFF_EMOJIS.get(interaction.user.id) || CONFIG.CLAIMER_EMOJI_FALLBACK;
// Resolve creatorNickname: displayName for Discord tickets, senderLocal for email tickets
let creatorNickname;
if (freshTicket.gmailThreadId.startsWith('discord-')) {
const creatorUserId = freshTicket.gmailThreadId.split('-').pop();
try {
const creatorMember = await guild.members.fetch(creatorUserId);
creatorNickname = creatorMember.displayName;
} catch {
creatorNickname = freshTicket.senderEmail;
}
} else {
creatorNickname = getSenderLocal(freshTicket.senderEmail);
}
const renameInfo = await canRename(freshTicket);
if (renameInfo.ok) {
const newName = makeTicketName(
{ escalated: !!freshTicket.escalated, claimed: true },
freshTicket,
guild
guild,
claimerEmoji,
creatorNickname
);
try {
await enqueueRename(interaction.channel, newName);
@@ -321,25 +338,6 @@ async function handleClaim(interaction, ticket) {
);
}
try {
const staffCategoryId = CONFIG.STAFF_CATEGORIES.get(interaction.user.id);
if (staffCategoryId) await enqueueMove(interaction.channel, staffCategoryId);
const staffChan = await createStaffChannel(
interaction.guild,
freshTicket,
interaction.user.id,
interaction.channel.name
);
if (staffChan) {
await Ticket.updateOne(
{ gmailThreadId: freshTicket.gmailThreadId },
{ $set: { staffChannelId: staffChan.id } }
);
}
} catch (e) {
console.error('Staff channel / category (claim):', e);
}
const baseLabel = `Unclaim (${claimerLabel})`;
const label = renameInfo.ok
? baseLabel
@@ -371,15 +369,6 @@ async function handleClaim(interaction, ticket) {
await interaction.followUp({ embeds: [claimEmbed] });
} else {
// Unclaim
try {
if (freshTicket.staffChannelId) {
const { deleteStaffChannel } = require('../services/staffChannel');
await deleteStaffChannel(interaction.guild, freshTicket.staffChannelId);
}
} catch (e) {
console.error('Delete staff channel (unclaim):', e);
}
await Ticket.updateOne(
{ gmailThreadId: freshTicket.gmailThreadId },
{ $set: { claimedBy: null, claimerId: null, staffChannelId: null } }
@@ -390,17 +379,11 @@ async function handleClaim(interaction, ticket) {
const renameInfo = await canRename(freshTicket);
if (renameInfo.ok) {
const currentName = interaction.channel.name.replace(/^[🟢🟡🔴]/, '');
try {
await enqueueRename(interaction.channel, `🟢${currentName}`);
await enqueueRename(interaction.channel, `ticket-${freshTicket.ticketNumber}`);
} catch (e) {
console.error('Rename error (unclaim):', e);
}
try {
if (CONFIG.STAFF_T1_CATEGORY) await enqueueMove(interaction.channel, CONFIG.STAFF_T1_CATEGORY);
} catch (e) {
console.error('Move error (unclaim):', e);
}
} else {
const unlockAtMs = Date.now() + renameInfo.waitMs;
const unlockAtUnix = Math.floor(unlockAtMs / 1000);