Userscript Discourse per chiudere e archiviare topic

(Potrebbe stare in Dev, ma l’ho messo qui dato che non ero sicuro)

Mentre ripulivo la mia casella di posta sul forum che gestisco chiudendo e archiviando vecchi messaggi privati di richiesta di adesione al gruppo, mi sono infastidito a farlo manualmente.

Presento qui lo userscript per farlo al posto tuo! Basta fare clic con il pulsante destro del mouse, andare sull’opzione “Tampermonkey”, quindi eseguire lo script “Chiudi e archivia”!

Codice:

// ==UserScript==
// @name         Chiudi e archivia
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  Chiude e archivia l'argomento/messaggio privato attualmente aperto quando eseguito
// @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 Mi Piace

Aspetta… allora come faccio a eseguirlo? Dove dovrei posizionarlo?

È uno script scritto per l’estensione del browser Tampermonkey

1 Mi Piace

Fa di più della scorciatoia a quando siamo su una pagina PM?

Sì - Chiude anche la sera pm.

I post archiviati non possono ricevere risposte:

Non lo so, li chiudo nel caso in cui qualche membro dello staff si imbatta in essi per errore, è più chiaro che non devono essere risposti.

Sei un amministratore o solo un moderatore? Se sei un amministratore, potresti probabilmente creare un componente a tema invece di fare affidamento su uno userscript.

Detto questo, per i siti su cui non puoi modificare il codice, gli userscript sono ancora una soluzione interessante per vari miglioramenti.

Li uso per molti siti web.

Su meta.discourse.org, ne ho uno che aggiunge una scorciatoia Ctrl+Shift+k per racchiudere il testo selezionato con i tag <kbd> all’interno del composer :slight_smile:

// ==UserScript==
// @name         scorciatoia <kbd> per meta.discourse.org
// @namespace    Violentmonkey Scripts
// @version      1.0
// @description  Inserisce i tag <kbd> nelle textarea su meta.discourse.org con 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();
            }
        }
    });
})();

Inoltre, non uso Tampermonkey poiché è a codice chiuso, preferisco usare software open source e ci sono diversi contendenti (hanno tutti lo stesso aspetto e gli script sono compatibili tra loro). Penso che il più utilizzato sia Violentmonkey.

1 Mi Piace

L’ho inserito in uno script utente perché ero troppo pigro per crearne uno TC, ed è stato più veloce da modificare e testare (originariamente l’ho eseguito nella console alcune volte per testarlo)

Oooooooh è davvero bello averlo, grazie per averlo condiviso!

Ho modificato un po’ lo script così che funzioni anche sugli argomenti, per quello che può valere (questo causa comunque l’effetto strano di avere un PM archiviato).

1 Mi Piace