Script utilisateur pour fermer et archiver un sujet sur Discourse

(Peut-être que ça irait dans Dev, mais je l’ai mis ici car je n’étais pas sûr)

En nettoyant ma boîte de réception sur le forum que je gère un peu en fermant et en archivant les anciennes MP de demande d’adhésion, j’ai été agacé de le faire manuellement.

Je vous présente ici le userscript pour le faire à votre place ! Il suffit de faire un clic droit, d’aller dans l’option “Tampermonkey”, puis d’exécuter le script “Close and Archive” !

Code :

// ==UserScript==
// @name         Close and Archive
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  Closes and Archives the currently open topic/private message when run
// @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 « J'aime »

Attends… alors comment je peux l’exécuter ? Où devrais-je le placer ?

C’est un script écrit pour l’extension de navigateur Tampermonkey

1 « J'aime »

Fait-il plus que le raccourci a lorsque nous sommes sur une page de message privé ?

Oui - Cela ferme également l’après-midi.

Les publications archivées ne peuvent pas faire l’objet de réponses :

Je ne sais pas, je les ferme juste au cas où un membre du personnel tomberait dessus par erreur, c’est plus clair qu’elles ne sont pas censées recevoir de réponse.

Êtes-vous un administrateur ou seulement un modérateur ? Si vous êtes administrateur, vous pourriez probablement créer un composant de thème au lieu de vous fier à un script utilisateur.

Cela dit, pour les sites sur lesquels vous ne pouvez pas modifier le code, les scripts utilisateur restent une solution intéressante pour diverses améliorations.

Je les utilise pour de nombreux sites Web.

Sur meta.discourse.org, j’en ai un qui ajoute un raccourci Ctrl+Shift+k pour entourer mon texte sélectionné avec des balises ` dans l’éditeur :slight_smile:

// ==UserScript==
// @name         Raccourci <kbd> pour meta.discourse.org
// @namespace    Violentmonkey Scripts
// @version      1.0
// @description  Insère des balises <kbd> dans les zones de texte sur meta.discourse.org avec 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();
            }
        }
    });
})();

De plus, je n’utilise pas Tampermonkey car il est propriétaire, je préfère utiliser des logiciels open source, et il existe plusieurs concurrents (ils se ressemblent tous et les scripts sont compatibles entre eux). Je pense que le plus utilisé est Violentmonkey.

1 « J'aime »

Je l’ai juste mis dans un script utilisateur parce que j’étais trop paresseux pour en faire un TC, et c’était plus rapide à éditer et à tester (à l’origine, je l’ai juste exécuté dans la console quelques fois pour le tester)

Oooooooh c’est vraiment bien d’avoir ça, merci de partager !

Je viens de modifier un peu le script pour qu’il fonctionne aussi sur les sujets, pour ce que cela vaut (cela peut causer l’effet étrange d’avoir un message privé archivé toutefois).

1 « J'aime »