From 7000b89a7f7d93f69061ea026c29b7fb2bf57aaa Mon Sep 17 00:00:00 2001 From: Etorix <92535668+EtorixDev@users.noreply.github.com> Date: Sun, 12 Oct 2025 21:53:15 -0700 Subject: [PATCH] NoBlockedMessages: Attribute interactions and prefix CMDs to initiator. (#453) * Attribute interactions and prefix CMDs to initiator. * Too many quintuple negatives man. So confusing. * Make less horrible. --- src/plugins/noBlockedMessages/index.ts | 44 ++++++++++++++++++++------ 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index 25c147355..25db5d832 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -116,7 +116,9 @@ export default definePlugin({ }, ], - hideSuppressedMessage(userId: string) { + // true = keep message + // false = hide message + keepSuppressedMessage(userId: string) { const overrideUsers = settings.store.overrideUsers.split(",").map(id => id.trim()).filter(id => id.length > 0); if (settings.store.defaultHideUsers) { @@ -133,8 +135,8 @@ export default definePlugin({ const replyToSuppressed = this.isReplyToSuppressed(message); if (message.type === 24 && settings.store.allowAutoModMessages) return [true, suppressed]; - if (suppressed) return [this.hideSuppressedMessage(message.author.id), true]; - if (replyToSuppressed) return [this.hideSuppressedMessage(replyToSuppressed.author.id), true]; + if (suppressed.suppressed) return [!suppressed.hide, true]; + if (replyToSuppressed.suppressed) return [!replyToSuppressed.hide, true]; // [Message Visible, Author Blocked/Ignored] return [true, false]; @@ -226,8 +228,8 @@ export default definePlugin({ return newChannelStream; }, - isReplyToSuppressed(message: Message) { - if (!settings.store.hideBlockedUserReplies) return false; + isReplyToSuppressed(message: Message): { suppressed: boolean, hide: boolean; } { + if (!settings.store.hideBlockedUserReplies) return { suppressed: false, hide: false }; try { // Messages received from the non-focused channel may have a referenced_message property. @@ -238,20 +240,44 @@ export default definePlugin({ repliedMessage = messageReference ? MessageStore.getMessage(messageReference.channel_id, messageReference.message_id) : null; } - return repliedMessage && this.isSuppressed(repliedMessage) ? repliedMessage : false; + return repliedMessage ? this.isSuppressed(repliedMessage) : { suppressed: false, hide: false }; } catch (e) { new Logger("NoBlockedMessages").error("Failed to check if referenced message is blocked or ignored:", e); + return { suppressed: false, hide: false }; } }, - isSuppressed(message: Message) { + isSuppressed(message: Message): { suppressed: boolean, hide: boolean; } { try { const { BlockKeywords } = Settings.plugins; const blockedContent = BlockKeywords?.enabled && BlockKeywords?.ignoreBlockedMessages && containsBlockedKeywords(message); - const relationship = this.getRelationshipStatus(message.author); - return blockedContent || relationship.blocked || (relationship.ignored && settings.store.alsoHideIgnoredUsers); + const authorRelationship = this.getRelationshipStatus(message.author); + const interactionUserRelationship = message.interaction && this.getRelationshipStatus((message.interaction as any).user); + const prefixCMDReferenceData = message.author.bot && (message.messageReference || (message as any).message_reference); + const prefixCMDReference = prefixCMDReferenceData && MessageStore.getMessage(prefixCMDReferenceData.channel_id, prefixCMDReferenceData.message_id); + const prefixCMDUserRelationship = prefixCMDReference && this.getRelationshipStatus(prefixCMDReference.author); + const suppressed = ( + blockedContent || authorRelationship.blocked || ( + authorRelationship.ignored && settings.store.alsoHideIgnoredUsers + ) || ( + interactionUserRelationship && (interactionUserRelationship.blocked || ( + interactionUserRelationship.ignored && settings.store.alsoHideIgnoredUsers + )) + ) || ( + prefixCMDUserRelationship && (prefixCMDUserRelationship.blocked || ( + prefixCMDUserRelationship.ignored && settings.store.alsoHideIgnoredUsers + )) + ) + ); + const hide = !this.keepSuppressedMessage(message.author.id) || ( + message.interaction && !this.keepSuppressedMessage((message.interaction as any).user.id) + ) || ( + prefixCMDReference && !this.keepSuppressedMessage(prefixCMDReference.author.id) + ); + return { suppressed, hide }; } catch (e) { new Logger("NoBlockedMessages").error("Failed to check if message is blocked or ignored:", e); + return { suppressed: false, hide: false }; } },