Remove dead/stale code, dedup close+escalation paths
Dead/stale removals (grep-confirmed no consumers):
- config: drop 9 unread CONFIG keys (ROLE_TO_PING_ID, SIGNATURE,
REMINDER_*, RENAME_LOG_CHANNEL_ID, SETTINGS_*); remove their
ALLOWED_CONFIG_KEYS entries and the orphaned settings-site UI fields
- configSchema: delete unreachable json/string_or_json validators
- models: drop unused ticketTag field
- gmail-poll: remove unused isPollSuspended export
- utils: remove dead htmlToTextWithBlocks/decodeHtmlEntities/BLOCK_TAG_REGEX
- internalApi: remove router._allowedKeys (test it served is gone)
- discord client: drop unused GuildPresences privileged intent
- broccolini-discord: remove dormant /api 503 gate (no /api routes)
Fixes:
- context-menu ticket create now uses makeTicketName('unclaimed', ...)
instead of the contract-violating ticket-<n> name
- drop write-only pending.userId from both close paths
Dedup / simplify:
- new services/transcript.js shares the transcript text/date/header
builders between the button and force-close paths (had drifted)
- resolveEscalationCategoryId() replaces 3 copies of the category logic
- ticketChannelOverwrites() shares the create-permission array between
the two interactive ticket-create paths
- finalizeBody() shares the email-cleanup tail in parseGmailMessage
- getTicketActionRow drops its never-passed options arg;
sendTicketNotificationEmail drops its always-null subjectLine arg
- hoist invariant guild lookup out of the auto-close/unclaim loops
- drop redundant lastActivity write (and now-dead updateTicketActivity)
- /help lists all current commands and the right-click apps
This commit is contained in:
@@ -37,7 +37,6 @@ function setPollSuspended(val) {
|
||||
pollSuspended = !!val;
|
||||
if (!pollSuspended) authErrorNotified = false;
|
||||
}
|
||||
function isPollSuspended() { return pollSuspended; }
|
||||
|
||||
// ============================================================
|
||||
// Helpers (extracted from the original 309-line poll()).
|
||||
@@ -73,6 +72,16 @@ function locateGuild(client) {
|
||||
* - followupBody: defensive — strip quotes but fall back to raw text if
|
||||
* stripping leaves nothing. Used for follow-up posts on an existing thread.
|
||||
*/
|
||||
// Shared final cleanup for both the first-message and follow-up body paths:
|
||||
// drop the "Get Outlook for ..." mobile-signature line, strip a dangling
|
||||
// trailing "<" left by truncated HTML, and trim.
|
||||
function finalizeBody(text) {
|
||||
return text
|
||||
.replace(/Get Outlook for [^\n]+/gi, '')
|
||||
.replace(/<\s*$/gm, '')
|
||||
.trim();
|
||||
}
|
||||
|
||||
function parseGmailMessage(email) {
|
||||
const headers = email.data.payload.headers;
|
||||
const from = headers.find(h => h.name === 'From')?.value || '';
|
||||
@@ -92,10 +101,7 @@ function parseGmailMessage(email) {
|
||||
firstBody = stripMobileFooter(firstBody);
|
||||
firstBody = firstBody.replace(/^\s*\n+/g, '');
|
||||
firstBody = firstBody.replace(/\n{3,}/g, '\n\n');
|
||||
firstBody = firstBody
|
||||
.replace(/Get Outlook for [^\n]+/gi, '')
|
||||
.replace(/<\s*$/gm, '')
|
||||
.trim();
|
||||
firstBody = finalizeBody(firstBody);
|
||||
|
||||
const rawText = rawBody.replace(/\r\n/g, '\n');
|
||||
let followupBody = stripEmailQuotes(rawText);
|
||||
@@ -103,10 +109,7 @@ function parseGmailMessage(email) {
|
||||
followupBody = followupBody.replace(/^\s*\n*/, '\n');
|
||||
followupBody = followupBody.replace(/\n{3,}/g, '\n\n');
|
||||
followupBody = stripMobileFooter(followupBody);
|
||||
followupBody = followupBody
|
||||
.replace(/Get Outlook for [^\n]+/gi, '')
|
||||
.replace(/<\s*$/gm, '')
|
||||
.trim();
|
||||
followupBody = finalizeBody(followupBody);
|
||||
|
||||
return {
|
||||
isSelf,
|
||||
@@ -405,4 +408,4 @@ async function poll(client) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { poll, setPollSuspended, isPollSuspended };
|
||||
module.exports = { poll, setPollSuspended };
|
||||
|
||||
Reference in New Issue
Block a user