AAGaming00 / rich-quotes

MIT License
9 stars 3 forks source link

Spoiler matcher is very broken, should be in our parser #37

Open github-actions[bot] opened 3 years ago

github-actions[bot] commented 3 years ago

This giant hack has false negatives, eventually should be fixed

edit: disabled for now because its causing problems & doesn't work anyways

https://github.com/ADoesGit/rich-quotes/blob/8de6463eb9cb361c85717ad4045e915c6c2ce151/utils/embedHandler.js#L1

const spoilerMatcher = (b) => new RegExp(`\\|\\|${b.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&').replace('\/\/','\/\/(.*?)').replace(/\//g,'\\/')}(.*?)\\|\\|`);

const mime = require('../node_modules/mime-types')

module.exports = (messageData, settings, hasEmbedSpoilers) => {
    if (!settings.embedAll) {
        if (messageData.embeds?.length !== 0) {
            let colorFixes = [];
            let urls = []

            messageData.embeds = messageData.embeds?.filter((embed, i) => {
                if (spoilerMatcher(embed.url).test(messageData.content)) hasEmbedSpoilers = true;
                if (typeof embed.color !== 'string') colorFixes.push(i);

                let keepEmbed = true;

                if (embed.image) keepEmbed = settings.embedImages;
                else if (embed.video) {
                    keepEmbed = settings.embedVideos;
                    if (!embed.video.proxyURL) keepEmbed = settings.embedYouTube
                } else keepEmbed = settings.embedOther;

                if (keepEmbed) urls.push(embed.url);

                if (urls.length === 1 && messageData.content === urls[0]) messageData.content = '';

                return keepEmbed;
            });

            // @todo Move this to filter?
            if (colorFixes.length !== 0) colorFixes.forEach((e, i) => { if (messageData.embeds[i]) messageData.embeds[i].color = '#00000000' });
        }

        if (messageData.attachments?.length !== 0)
        messageData.attachments = messageData.attachments.filter((file) => {
            const mime_type = mime.lookup(file.proxy_url.split('/')[6]);
            if (mime_type) switch (mime_type.split('/')[0]) {
                case 'image': return settings.embedImages; break;
                case 'video': return settings.embedVideos; break;
                case 'audio': return settings.embedAudio; break;
                default: return settings.embedFile; break;
            }
            else return settings.embedFile;
        });
    } else if (settings.displayEmbeds) {
        let urls = [];

        messageData.embeds.forEach((embed, i) => {
            if (spoilerMatcher(embed.url).test(messageData.content)) hasEmbedSpoilers = true;
            if (typeof embed.color !== 'string') messageData.embeds[i].color = '#00000000';
            urls.push(embed.url);
        });

        if (urls.length === 1 && messageData.content === urls[0]) messageData.content = '';
    }
}
 No newline at end of file

cb38f9ae0eb9b66a56bd8507e0abdff786814bbe

MulverineX commented 3 years ago

Even if we use parse on this it is very tricky to get working properly as a regex. I'll either write a jank parser for it or get someone to write regex jujitsu

MulverineX commented 2 years ago

very good yes: https://github.com/unjs/ufo#issamepath