MCPcopy Index your code
hub / github.com/codebymitch/TitanBot / warningDeleteModalHandler

Function warningDeleteModalHandler

src/handlers/warningHandlers.js:77–125  ·  view source on GitHub ↗
(interaction, client)

Source from the content-addressed store, hash-verified

75};
76
77async function warningDeleteModalHandler(interaction, client) {
78 try {
79 const [, targetUserId, originalModeratorId] = interaction.customId.split(':');
80
81 if (interaction.user.id !== originalModeratorId) {
82 return await replyUserError(interaction, { type: ErrorTypes.PERMISSION, message: 'Only the original moderator can delete warnings.' });
83 }
84
85 const warningNumberInput = interaction.fields.getTextInputValue('warning_number');
86 const warningNumber = parseInt(warningNumberInput.replace('#', '').trim(), 10);
87
88 if (isNaN(warningNumber) || warningNumber < 1) {
89 return await replyUserError(interaction, { type: ErrorTypes.VALIDATION, message: 'Please enter a valid warning number (e.g., 1, 2, 3).' });
90 }
91
92 const deferSuccess = await InteractionHelper.safeDefer(interaction);
93 if (!deferSuccess) return;
94
95 const guildId = interaction.guildId;
96 const warnings = await WarningService.getWarnings(guildId, targetUserId);
97
98 if (warningNumber > warnings.length) {
99 return await replyUserError(interaction, { type: ErrorTypes.USER_INPUT, message: 'Warning #${warningNumber} does not exist. This user only has ${warnings.length} warning(s).' });
100 }
101
102 const warningToDelete = warnings[warningNumber - 1];
103 const result = await WarningService.removeWarning(guildId, targetUserId, warningToDelete.id);
104
105 if (!result.success) {
106 throw new Error(result.error || 'Failed to delete warning');
107 }
108
109 const targetUser = await client.users.fetch(targetUserId).catch(() => null);
110 const targetName = targetUser ? targetUser.username : 'the user';
111
112 logger.info(`[MODERATION] Warning deleted for ${targetUserId} in ${guildId} by ${interaction.user.id}`, {
113 warningId: warningToDelete.id,
114 reason: warningToDelete.reason,
115 warningNumber
116 });
117
118 await interaction.editReply({
119 embeds: [successEmbed('✅ Warning Deleted', `Warning #${warningNumber} for **${targetName}** has been deleted.\n\n**Reason was:** ${warningToDelete.reason.substring(0, 100)}`)]
120 });
121 } catch (error) {
122 logger.error('Warning delete modal handler error:', error);
123 await replyUserError(interaction, { type: ErrorTypes.UNKNOWN, message: 'Failed to delete warning.' });
124 }
125}
126
127async function warningClearConfirmModalHandler(interaction, client) {
128 try {

Callers

nothing calls this directly

Calls 5

successEmbedFunction · 0.90
replyUserErrorFunction · 0.85
safeDeferMethod · 0.80
getWarningsMethod · 0.80
removeWarningMethod · 0.80

Tested by

no test coverage detected