From 95648a56e3ff0ffc97f63fde5e9e74b45f83c11a Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Wed, 13 Jan 2021 16:29:02 +0100 Subject: [PATCH] Delete only if Regular Expression Matches --- deleteDiscordMessages.js | 18 +++++++++++++++--- deleteDiscordMessages.user.js | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/deleteDiscordMessages.js b/deleteDiscordMessages.js index 96d25b41..2c03882b 100644 --- a/deleteDiscordMessages.js +++ b/deleteDiscordMessages.js @@ -39,6 +39,9 @@
+ Pattern
+ +

@@ -73,6 +76,7 @@ const hasFile = $('input#hasFile').checked; const includeNsfw = $('input#includeNsfw').checked; const includePinned = $('input#includePinned').checked; + const pattern = $('input#pattern').value; const progress = $('#progress'); const fileSelection = $("input#file"); @@ -100,7 +104,7 @@ stop = stopBtn.disabled = !(startBtn.disabled = true); for (let i = 0; i < channelIds.length; i++) { - await deleteMessages(authToken, authorId, guildId, channelIds[i], minId || minDate, maxId || maxDate, content, hasLink, hasFile, includeNsfw, includePinned, logger, stopHndl, onProg); + await deleteMessages(authToken, authorId, guildId, channelIds[i], minId || minDate, maxId || maxDate, content, hasLink, hasFile, includeNsfw, includePinned, pattern, logger, stopHndl, onProg); stop = stopBtn.disabled = !(startBtn.disabled = false); } }; @@ -147,7 +151,7 @@ * @author Victornpb * @see https://github.com/victornpb/deleteDiscordMessages */ - async function deleteMessages(authToken, authorId, guildId, channelId, minId, maxId, content,hasLink, hasFile, includeNsfw, includePinned, extLogger, stopHndl, onProgress) { + async function deleteMessages(authToken, authorId, guildId, channelId, minId, maxId, content,hasLink, hasFile, includeNsfw, includePinned, pattern, extLogger, stopHndl, onProgress) { const start = new Date(); let deleteDelay = 100; let searchDelay = 100; @@ -242,12 +246,20 @@ } } + let regex; + + try { + regex = new RegExp(pattern); + } catch(e) { + log.warn('Ignoring RegExp because pattern is malformed') + } + const data = await resp.json(); const total = data.total_results; if (!grandTotal) grandTotal = total; const discoveredMessages = data.messages.map(convo => convo.find(message => message.hit===true)); const messagesToDelete = discoveredMessages.filter(msg => { - return msg.type === 0 || msg.type === 6 || (msg.pinned && includePinned); + return (msg.type === 0 || msg.type === 6 || (msg.pinned && includePinned)) && (!regex || msg.content.match(regex)); }); const skippedMessages = discoveredMessages.filter(msg=>!messagesToDelete.find(m=> m.id===msg.id)); diff --git a/deleteDiscordMessages.user.js b/deleteDiscordMessages.user.js index 21b35160..2c4ccc3b 100644 --- a/deleteDiscordMessages.user.js +++ b/deleteDiscordMessages.user.js @@ -29,7 +29,7 @@ * @author Victornpb * @see https://github.com/victornpb/deleteDiscordMessages */ -async function deleteMessages(authToken, authorId, guildId, channelId, minId, maxId, content, hasLink, hasFile, includeNsfw, includePinned, searchDelay, deleteDelay, extLogger, stopHndl, onProgress) { +async function deleteMessages(authToken, authorId, guildId, channelId, minId, maxId, content, hasLink, hasFile, includeNsfw, includePinned, pattern, searchDelay, deleteDelay, extLogger, stopHndl, onProgress) { const start = new Date(); let delCount = 0; let failCount = 0; @@ -122,12 +122,20 @@ async function deleteMessages(authToken, authorId, guildId, channelId, minId, ma } } + let regex; + + try { + regex = new RegExp(pattern); + } catch(e) { + log.warn('Ignoring RegExp because pattern is malformed') + } + const data = await resp.json(); const total = data.total_results; if (!grandTotal) grandTotal = total; const discoveredMessages = data.messages.map(convo => convo.find(message => message.hit === true)); const messagesToDelete = discoveredMessages.filter(msg => { - return msg.type === 0 || msg.type === 6 || (msg.pinned && includePinned); + return (msg.type === 0 || msg.type === 6 || (msg.pinned && includePinned)) && (!regex || msg.content.match(regex)); }); const skippedMessages = discoveredMessages.filter(msg => !messagesToDelete.find(m => m.id === msg.id)); @@ -304,6 +312,9 @@ function initUI() {

+ Pattern
+ +
Search Delay ?
@@ -385,6 +396,7 @@ function initUI() { const hasFile = $('input#hasFile').checked; const includeNsfw = $('input#includeNsfw').checked; const includePinned = $('input#includePinned').checked; + const pattern = $('input#pattern').value; const searchDelay = parseInt($('input#searchDelay').value.trim()); const deleteDelay = parseInt($('input#deleteDelay').value.trim()); const progress = $('#progress'); @@ -421,7 +433,7 @@ function initUI() { stop = stopBtn.disabled = !(startBtn.disabled = true); for (let i = 0; i < channelIds.length; i++) { - await deleteMessages(authToken, authorId, guildId, channelIds[i], minId || minDate, maxId || maxDate, content, hasLink, hasFile, includeNsfw, includePinned, searchDelay, deleteDelay, logger, stopHndl, onProg); + await deleteMessages(authToken, authorId, guildId, channelIds[i], minId || minDate, maxId || maxDate, content, hasLink, hasFile, includeNsfw, includePinned, pattern, searchDelay, deleteDelay, logger, stopHndl, onProg); stop = stopBtn.disabled = !(startBtn.disabled = false); } };