personal queue
This commit is contained in:
@@ -20,7 +20,8 @@ const { canRename, makeTicketName, minutesFromMs, pickTicketCategoryId, createDi
|
||||
const { sendTicketClosedEmail } = require('../services/gmail');
|
||||
const { getTicketActionRow } = require('../utils/ticketComponents');
|
||||
const { setEmailRouting } = require('../services/guildSettings');
|
||||
const { enqueueRename } = require('../services/channelQueue');
|
||||
const { enqueueRename, enqueueMove } = require('../services/channelQueue');
|
||||
const { createStaffChannel } = require('../services/staffChannel');
|
||||
const { runEscalation, runDeescalation } = require('./commands');
|
||||
const { trackInteraction, trackError } = require('./analytics');
|
||||
|
||||
@@ -286,9 +287,10 @@ async function handleClaim(interaction, ticket) {
|
||||
if (!isClaimed || (isClaimed && !isClaimedByMe && CONFIG.ALLOW_CLAIM_OVERWRITE)) {
|
||||
await Ticket.updateOne(
|
||||
{ gmailThreadId: freshTicket.gmailThreadId },
|
||||
{ $set: { claimedBy: claimerLabel } }
|
||||
{ $set: { claimedBy: claimerLabel, claimerId: interaction.user.id } }
|
||||
);
|
||||
freshTicket.claimedBy = claimerLabel;
|
||||
freshTicket.claimerId = interaction.user.id;
|
||||
|
||||
const renameInfo = await canRename(freshTicket);
|
||||
if (renameInfo.ok) {
|
||||
@@ -310,6 +312,25 @@ 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
|
||||
@@ -341,24 +362,36 @@ 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 } }
|
||||
{ $set: { claimedBy: null, claimerId: null, staffChannelId: null } }
|
||||
);
|
||||
freshTicket.claimedBy = null;
|
||||
freshTicket.claimerId = null;
|
||||
freshTicket.staffChannelId = null;
|
||||
|
||||
const renameInfo = await canRename(freshTicket);
|
||||
if (renameInfo.ok) {
|
||||
const newName = makeTicketName(
|
||||
{ escalated: !!freshTicket.escalated, claimed: false },
|
||||
freshTicket,
|
||||
guild
|
||||
);
|
||||
const currentName = interaction.channel.name.replace(/^[🟢🟡🔴]/, '');
|
||||
try {
|
||||
await enqueueRename(interaction.channel, newName);
|
||||
await enqueueRename(interaction.channel, `🟢${currentName}`);
|
||||
} 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);
|
||||
@@ -521,6 +554,13 @@ async function handleConfirmClose(interaction, ticket) {
|
||||
{ $set: { discordThreadId: null, status: 'closed' } }
|
||||
);
|
||||
|
||||
try {
|
||||
const { deleteStaffChannel } = require('../services/staffChannel');
|
||||
await deleteStaffChannel(interaction.guild, ticket.staffChannelId);
|
||||
} catch (e) {
|
||||
console.error('Delete staff channel (close):', e);
|
||||
}
|
||||
|
||||
if (transcriptMsg?.id) {
|
||||
await Transcript.create({
|
||||
gmailThreadId: ticket.gmailThreadId,
|
||||
|
||||
Reference in New Issue
Block a user