Script de usuario para cerrar y archivar temas en Discourse

(Quizás encaje en Dev, pero lo puse aquí ya que no estaba seguro)

Mientras limpiaba mi bandeja de entrada en el foro que administro, cerrando y archivando viejos mensajes privados de solicitud de membresía grupal, me molestó hacerlo manualmente.

¡Presento aquí el userscript para hacerlo por ti! Simplemente haz clic derecho, ve a la opción “Tampermonkey” y ejecuta el script “Cerrar y Archivar”.

Código:

// ==UserScript==
// @name         Cerrar y Archivar
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  Cierra y Archiva el tema/mensaje privado actualmente abierto al ejecutarse
// @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 me gusta

Espera… entonces, ¿cómo ejecuto esto? ¿dónde debería colocarlo?

Es un script escrito para la extensión de navegador Tampermonkey

1 me gusta

¿Hace más que el atajo a cuando estamos en una página de PM?

Sí, también cierra la tarde.

No se puede responder a las publicaciones archivadas:

No lo sé, simplemente las cierro por si algún miembro del personal se topa con ellas por error, así está más claro que no se deben responder.

¿Eres administrador o solo moderador? Si eres administrador, probablemente podrías crear un componente de tema en lugar de depender de un script de usuario.

Dicho esto, para sitios en los que no puedes editar el código, los scripts de usuario siguen siendo una solución interesante para varias mejoras.

Los uso para muchos sitios web.

En meta.discourse.org, tengo uno que agrega un atajo de Ctrl+Shift+k para rodear mi texto seleccionado con etiquetas <kbd> dentro del compositor :slight_smile:

// ==UserScript==
// @name         Atajo de <kbd> para meta.discourse.org
// @namespace    Violentmonkey Scripts
// @version      1.0
// @description  Inserta etiquetas <kbd> en textareas en 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();
            }
        }
    });
})();

Además, no uso Tampermonkey ya que es de código cerrado, prefiero usar software de código abierto, y hay varios contendientes (todos se ven iguales y los scripts son compatibles entre sí). Creo que el más utilizado es Violentmonkey.

1 me gusta

Simplemente lo puse en un script de usuario porque era demasiado perezoso para hacer un TC para ello, y esto fue más rápido de editar y probar (originalmente solo lo ejecuté en la consola un puñado de veces para probarlo)

Oooooooh, eso es realmente bueno de tener, ¡gracias por compartir!

Acabo de modificar un poco el script para que también funcione en temas, por lo que eso vale (esto sí provoca el efecto extraño de tener un PM archivado, sin embargo).

1 me gusta