聚合相同用户和时间的帖子

合并相同发贴人和时间的帖子内容

// ==UserScript==
// @name         聚合相同用户和时间的帖子
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  合并相同发贴人和时间的帖子内容
// @author       You
// @match        https://nextptt.app/boards/*/post*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    function addMinutes(timeStr, addMinute) {
        let [month, day, hour, minute] = timeStr.match(/\d+/g).map(Number);
        minute += addMinute;
        if (minute >= 60) { // 处理分钟溢出
            minute = minute % 60;
            hour += 1;
        }
        return `${String(month).padStart(2, '0')}/${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}`;
    }

    let posts = document.querySelectorAll(".css-vhp0yr");
    let postMap = new Map();

    posts.forEach(post => {
        let user = post.querySelector(".chakra-text.css-1rr669u")?.innerText.trim();
        let time = post.querySelector(".chakra-text.css-emr6qx")?.innerText.trim();
        let contentElem = post.querySelector(".chakra-text.css-1yejqes");
        let content = contentElem?.innerText.trim();

        if (user && time && contentElem) {
            let time1 = addMinutes(time, 1);
            let time2 = addMinutes(time, 2);
            let time3 = addMinutes(time, 3);
            let time4 = addMinutes(time, 4);
            let key1 = `${user}||${time}`;
            let key2 = `${user}||${time1}`;
            let key3 = `${user}||${time2}`;
            let key4 = `${user}||${time3}`;
            let key5 = `${user}||${time4}`;

            if (postMap.has(key1)) {
                let existingElem = postMap.get(key1).querySelector(".chakra-text.css-1yejqes");
                existingElem.innerHTML += `<br>${content}`;
                post.remove();
            } else {
                postMap.set(key1, post);
                postMap.set(key2, post);
                postMap.set(key3, post);
                postMap.set(key4, post);
            }
        }
    });
})();