staff notifications
This commit is contained in:
@@ -43,20 +43,47 @@ function toDiscordSafeName(str) {
|
||||
.slice(0, 100);
|
||||
}
|
||||
|
||||
// claimerEmoji and creatorNickname are only used in the claimed branch.
|
||||
// Callers that do not pass them (e.g. escalation rename) get the unclaimed name as before.
|
||||
function makeTicketName({ escalated, claimed }, ticket, guild, claimerEmoji, creatorNickname) {
|
||||
const senderLocal = getSenderLocal(ticket.senderEmail);
|
||||
/**
|
||||
* Resolve a human-friendly creator nickname for channel naming.
|
||||
* Discord tickets: guild member displayName. Email tickets: senderLocal.
|
||||
* @param {import('discord.js').Guild} guild
|
||||
* @param {object} ticket
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
async function resolveCreatorNickname(guild, ticket) {
|
||||
if (ticket.gmailThreadId.startsWith('discord-')) {
|
||||
const creatorUserId = ticket.gmailThreadId.split('-').pop();
|
||||
try {
|
||||
const member = await guild.members.fetch(creatorUserId);
|
||||
return member.displayName;
|
||||
} catch {
|
||||
return getSenderLocal(ticket.senderEmail);
|
||||
}
|
||||
}
|
||||
return getSenderLocal(ticket.senderEmail);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a channel name from ticket state.
|
||||
* @param {'unclaimed'|'claimed'|'escalated'|'escalated-claimed'} state
|
||||
* @param {object} ticket
|
||||
* @param {string} creatorNickname - pre-resolved via resolveCreatorNickname
|
||||
* @param {string} [claimerEmoji] - required for claimed / escalated-claimed
|
||||
* @returns {string}
|
||||
*/
|
||||
function makeTicketName(state, ticket, creatorNickname, claimerEmoji) {
|
||||
const num = ticket.ticketNumber || 1;
|
||||
if (escalated) {
|
||||
return (claimed && claimerEmoji && creatorNickname)
|
||||
? toDiscordSafeName(`e-${claimerEmoji}-${creatorNickname}-${num}`)
|
||||
: `escalated-ticket-${senderLocal}-${num}`;
|
||||
switch (state) {
|
||||
case 'claimed':
|
||||
return toDiscordSafeName(`${claimerEmoji}-${creatorNickname}-${num}`);
|
||||
case 'escalated':
|
||||
return toDiscordSafeName(`escalated-${creatorNickname}-${num}`);
|
||||
case 'escalated-claimed':
|
||||
return toDiscordSafeName(`e-${claimerEmoji}-${creatorNickname}-${num}`);
|
||||
case 'unclaimed':
|
||||
default:
|
||||
return toDiscordSafeName(`unclaimed-${creatorNickname}-${num}`);
|
||||
}
|
||||
if (claimed && claimerEmoji && creatorNickname) {
|
||||
return toDiscordSafeName(`${claimerEmoji}-${creatorNickname}-${num}`);
|
||||
}
|
||||
return `ticket-${senderLocal}-${num}`;
|
||||
}
|
||||
|
||||
async function canRename(ticket) {
|
||||
@@ -261,7 +288,7 @@ async function cleanupEmptyOverflowCategory(guild, categoryId, categoryName) {
|
||||
}
|
||||
}
|
||||
|
||||
async function createTicketChannel(guild, ticketNumber, userId, subject) {
|
||||
async function createTicketChannel(guild, ticketNumber, userId, subject, creatorNickname) {
|
||||
if (CONFIG.USE_THREADS && CONFIG.THREAD_PARENT_CHANNEL) {
|
||||
const parentChannel = guild.channels.cache.get(CONFIG.THREAD_PARENT_CHANNEL);
|
||||
if (!parentChannel) {
|
||||
@@ -300,7 +327,7 @@ async function createTicketChannel(guild, ticketNumber, userId, subject) {
|
||||
let channel;
|
||||
try {
|
||||
channel = await guild.channels.create({
|
||||
name: `ticket-${ticketNumber}`,
|
||||
name: creatorNickname ? toDiscordSafeName(`unclaimed-${creatorNickname}-${ticketNumber}`) : `ticket-${ticketNumber}`,
|
||||
type: ChannelType.GuildText,
|
||||
parent: parentId,
|
||||
permissionOverwrites: [
|
||||
@@ -554,6 +581,8 @@ module.exports = {
|
||||
RENAME_WINDOW_MS,
|
||||
RENAME_LIMIT,
|
||||
getSenderLocal,
|
||||
toDiscordSafeName,
|
||||
resolveCreatorNickname,
|
||||
makeTicketName,
|
||||
canRename,
|
||||
minutesFromMs,
|
||||
|
||||
Reference in New Issue
Block a user