Replace Service Links

Replace the patreon links with kemono links for easy navigation. Strictly on Kemono.su

// ==UserScript==
// @name        Replace Service Links
// @namespace   https://github.com/Official-Husko/violentmonkey-scripts
// @match       https://kemono.su/*
// @grant       none
// @version     1.0.0
// @license     GNU GPLv3
// @author      Official Husko
// @icon        https://www.pulexart.com/uploads/7/0/1/2/70121829/3-greyfox.png
// @description Replace the patreon links with kemono links for easy navigation. Strictly on Kemono.su
// ==/UserScript==

(function() {
    'use strict';

    // Function to extract meta content by name
    function getMetaContentByName(name) {
        const metaTag = document.querySelector(`meta[name="${name}"]`);
        return metaTag ? metaTag.getAttribute('content') : null;
    }

    // Function to extract numeric part from the right of a string
    function extractNumericPartFromRight(inputString) {
        const match = inputString.match(/(\d+)$/);
        return match ? match[1] : null;
    }

    // Get USER_ID and SERVICE_ID from meta tags
    const USER_ID = getMetaContentByName('user');
    const SERVICE_ID = getMetaContentByName('service');

    // Check if USER_ID and SERVICE_ID are available
    if (USER_ID && SERVICE_ID) {
        // Find and replace Patreon links
        document.querySelectorAll('a[href*="patreon.com/posts/"]').forEach(link => {
            const match = link.href.match(/https:\/\/(www\.)?patreon\.com\/posts\/(.+)/);
            if (match) {
                const rawPostID = match[2];
                const numericPostID = extractNumericPartFromRight(rawPostID);
                // Replace the link with the custom format
                if (numericPostID) {
                    link.href = `https://kemono.su/${SERVICE_ID}/user/${USER_ID}/post/${numericPostID}`;
                }
            }
        });
    }
})();