Скрипт для закрытия и архивации тем в Discourse

(Может, стоит разместить в Development, но я перенёс сюда, так как не был уверен)

Пока я наводил порядок в своём почтовом ящике на форуме, который администрирую, закрывая и архивируя старые личные сообщения с запросами на вступление в группы, меня начала раздражать эта рутинная работа.

Представляю вам userscript, который сделает это за вас! Просто нажмите правой кнопкой мыши, выберите опцию “Tampermonkey”, а затем запустите скрипт “Close and Archive”!

Код:

// ==UserScript==
// @name         Close and Archive
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  Закрывает и архивирует текущую тему/личное сообщение при запуске
// @author       Firepup Sixfifty
// @match        https://=hostname=/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=amcforum.wiki
// @grant        none
// @run-at       context-menu
// ==/UserScript==

(function() {
    'use strict';

    fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/status`, {
        "headers": {
            "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
            "accept": "application/json",
            "x-csrf-token": document.querySelector("[name='csrf-token']").content
        },
        "body": "status=closed&enabled=true",
        "method": "PUT"
    }).then((r)=>{
        fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/status`, {
            "headers": {
                "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
                "accept": "application/json",
                "x-csrf-token": document.querySelector("[name='csrf-token']").content
            },
            "body": "status=archived&enabled=true",
            "method": "PUT"
        }).then((r)=>{
            fetch(`https://${window.location.hostname}/t/${window.location.pathname.split('/')[3]}/archive-message`, {
                "headers": {
                    "accept": "application/json",
                    "x-csrf-token": document.querySelector("[name='csrf-token']").content
                },
                "method": "PUT"
            });
        })
    })
})();
1 лайк

Постой… так как мне это запустить? Где его разместить?

Это скрипт, написанный для расширения браузера Tampermonkey

1 лайк

Делает ли это что-то большее, чем сочетание клавиш a, когда мы находимся на странице PM?

Да — это также закрывает PM.

На архивированные сообщения нельзя ответить:

Не знаю, я просто закрываю их на случай, если какой-то сотрудник случайно наткнётся на них — так понятнее, что на них не следует отвечать.

Вы администратор или только модератор? Если вы администратор, то, вероятно, можете создать компонент темы вместо того, чтобы полагаться на пользовательский скрипт.

Тем не менее, для сайтов, где вы не можете редактировать код, пользовательские скрипты остаются интересным решением для различных улучшений.

Я использую их на многих веб-сайтах.

На meta.discourse.org у меня есть скрипт, который добавляет сочетание клавиш Ctrl+Shift+k для оборачивания выделенного текста тегами <kbd> в редакторе :slight_smile:

// ==UserScript==
// @name         Сочетание клавиш <kbd> для meta.discourse.org
// @namespace    Скрипты Violentmonkey
// @version      1.0
// @description  Вставка тегов <kbd> в текстовые области на meta.discourse.org с помощью Ctrl + Shift + k
// @author       chatGPT
// @match        https://meta.discourse.org/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey && event.shiftKey && event.key === 'K') {
            const activeElement = document.activeElement;
            if (activeElement.tagName === 'TEXTAREA' && activeElement.classList.contains('ember-text-area')) {
                const start = activeElement.selectionStart;
                const end = activeElement.selectionEnd;
                const text = activeElement.value;
                const insertText = '<kbd>';
                const closeText = '</kbd>';

                const selectedText = text.slice(start, end);
                activeElement.value = text.slice(0, start) + insertText + selectedText + closeText + text.slice(end);

                const cursorPosition = end === start
                    ? start + insertText.length
                    : start + insertText.length + selectedText.length + closeText.length;

                activeElement.selectionStart = activeElement.selectionEnd = cursorPosition;

                event.preventDefault();
            }
        }
    });
})();

Кроме того, я не использую Tampermonkey, так как он имеет закрытый исходный код; я предпочитаю программное обеспечение с открытым исходным кодом. Есть несколько альтернатив (все они выглядят похоже, а скрипты совместимы между собой). Думаю, наиболее популярным является Violentmonkey.

1 лайк

Я просто добавил это в пользовательский скрипт, потому что мне было лень создавать для него TC, и так было быстрее редактировать и тестировать (сначала я просто запускал его несколько раз в консоли для проверки)

Ооооо, это действительно удобно, спасибо, что поделились!

Немного доработал скрипт, чтобы он также работал с темами, хотя это имеет значение (хотя это приводит к странному эффекту появления архивированного личного сообщения).

1 лайк