Dynamic overflow categories
This commit is contained in:
@@ -19,7 +19,7 @@ const {
|
||||
getFormattedDate
|
||||
} = require('./utils');
|
||||
const { getGmailClient } = require('./services/gmail');
|
||||
const { getNextTicketNumber, checkTicketLimits, pickTicketCategoryId, createEmailTicketAsThread } = require('./services/tickets');
|
||||
const { getNextTicketNumber, checkTicketLimits, getOrCreateTicketCategory, createEmailTicketAsThread } = require('./services/tickets');
|
||||
const { getEmailRouting } = require('./services/guildSettings');
|
||||
const { logError } = require('./services/debugLog');
|
||||
|
||||
@@ -125,8 +125,9 @@ async function poll(client) {
|
||||
.select('gmailThreadId discordThreadId status')
|
||||
.lean();
|
||||
|
||||
let ticketChan = null;
|
||||
let isReopened = false;
|
||||
let ticketChan = null;
|
||||
let parentCategoryIdForTicket = null;
|
||||
let isReopened = false;
|
||||
|
||||
if (existing && existing.discordThreadId) {
|
||||
ticketChan = await guild.channels
|
||||
@@ -166,17 +167,24 @@ async function poll(client) {
|
||||
const routing = await getEmailRouting(guild.id);
|
||||
if (routing === 'thread' && CONFIG.EMAIL_THREAD_CHANNEL_ID) {
|
||||
ticketChan = await createEmailTicketAsThread(guild, number, chanName);
|
||||
parentCategoryIdForTicket = ticketChan.parent?.parentId ?? null;
|
||||
} else {
|
||||
const emailCategoryIds = [CONFIG.TICKET_CATEGORY_ID, ...(CONFIG.EMAIL_TICKET_OVERFLOW_CATEGORY_IDS || [])];
|
||||
const parentId = pickTicketCategoryId(guild, emailCategoryIds);
|
||||
if (!parentId) {
|
||||
throw new Error('Email ticket category not found or all categories full (50 channels max)');
|
||||
const parentId = await getOrCreateTicketCategory(
|
||||
guild,
|
||||
CONFIG.TICKET_CATEGORY_ID,
|
||||
CONFIG.TICKET_CATEGORY_NAME
|
||||
);
|
||||
parentCategoryIdForTicket = parentId;
|
||||
try {
|
||||
ticketChan = await guild.channels.create({
|
||||
name: chanName,
|
||||
type: ChannelType.GuildText,
|
||||
parent: parentId
|
||||
});
|
||||
} catch (createErr) {
|
||||
console.error('Channel create error (email ticket):', createErr);
|
||||
throw createErr;
|
||||
}
|
||||
ticketChan = await guild.channels.create({
|
||||
name: chanName,
|
||||
type: ChannelType.GuildText,
|
||||
parent: parentId
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Channel create error (payload):', {
|
||||
@@ -297,7 +305,8 @@ async function poll(client) {
|
||||
status: 'open',
|
||||
ticketNumber: number,
|
||||
priority: defaultPriority,
|
||||
lastActivity: now
|
||||
lastActivity: now,
|
||||
parentCategoryId: parentCategoryIdForTicket
|
||||
}
|
||||
},
|
||||
{ upsert: true, new: true }
|
||||
|
||||
Reference in New Issue
Block a user