Script de usuário para fechar e arquivar tópicos no Discourse

(Talvez possa caber em Dev, mas coloquei aqui já que não tinha certeza)

Enquanto organizava minha caixa de entrada no fórum que gerencio, fechando e arquivando antigos pedidos de associação de grupo por PM, fiquei irritado por ter que fazer isso manualmente.

Apresento aqui o userscript para fazer isso por você! Basta clicar com o botão direito, ir para a opção “Tampermonkey” e executar o script “Fechar e Arquivar”!

Código:

// ==UserScript==
// @name         Fechar e Arquivar
// @namespace    http://tampermonkey.net/
// @version      2025-02-14
// @description  Fecha e Arquiva o tópico/mensagem privada atualmente aberto quando executado
// @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 curtida

Espere… então, como eu executo isto? Onde devo colocá-lo?

É um script escrito para a extensão de navegador Tampermonkey

1 curtida

Ele faz mais do que o atalho a quando estamos em uma página de PM?

Sim - Também fecha à tarde.

As postagens arquivadas não podem ser respondidas:

Não sei, eu apenas as fecho caso algum membro da equipe as encontre por engano, fica mais claro que elas não devem ser respondidas.

Você é um administrador ou apenas um moderador? Se você for administrador, provavelmente poderia criar um componente de tema em vez de depender de um userscript.

Dito isso, para sites em que você não pode editar o código, os userscripts ainda são uma solução interessante para várias melhorias.

Eu os uso para muitos sites.

No meta.discourse.org, tenho um que adiciona um atalho Ctrl+Shift+k para envolver meu texto selecionado com tags <kbd> dentro do compositor :slight_smile:

// ==UserScript==
// @name         Atalho <kbd> para meta.discourse.org
// @namespace    Violentmonkey Scripts
// @version      1.0
// @description  Insere tags <kbd> em textareas no meta.discourse.org com 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();
            }
        }
    });
})();

Além disso, eu não uso o Tampermonkey, pois é de código fechado, prefiro usar software de código aberto, e existem vários concorrentes (todos parecem iguais e os scripts são compatíveis entre si). Acho que o mais usado é o Violentmonkey.

1 curtida

Eu apenas o coloquei em um userscript porque estava com preguiça de fazer um TC para ele, e foi mais rápido de editar e testar (originalmente eu apenas o executei no console algumas vezes para testá-lo)

Oooooooh, isso é realmente muito bom de ter, obrigado por compartilhar!

Acabei de modificar um pouco o script para que ele também funcione em tópicos, pelo que isso vale (isso causa o efeito estranho de ter uma mensagem privada arquivada, porém).

1 curtida