Opção personalizada no painel de administração do tópico?

As últimas 15 horas foram um pesadelo para mim: ler plugins existentes e código-fonte apenas para obter funcionalidades extremamente básicas e escrever meu primeiro plugin. Preciso de ajuda.

Especificamente, preciso de ajuda apenas para adicionar um novo botão no painel administrativo para cada post (o botão no canto inferior esquerdo). O máximo que consegui fazer foi colocar o botão no mesmo elemento que o widget…

Mas note o ponto de bullet. Isso ocorre porque o que criei não está sendo inserido na ul como deveria. Não tenho a menor ideia de como corrigir isso.

(o div é a minha opção).

Fiz isso com o seguinte código:

import { withPluginApi } from 'discourse/lib/plugin-api';
import showModal from "discourse/lib/show-modal";

export default {
	name: 'tl-post-lock',
	initialize() {
		withPluginApi('0.8.24', function(api) {
			const user = api.getCurrentUser()

			if(user.trust_level >= api.container.lookup('site-settings:main').tl_lock_minimum) {
				// O usuário tem permissão para ver o botão

				api.decorateWidget('topic-admin-menu:after', (decorator) => {
					// Adiciona o botão ao menu administrativo
					return decorator.attach('admin-menu-button', {
						icon: 'ban',
						fullLabel: 'tl_post_lock.button_label',
						action: 'actionTlLock'
					})
				})
				
			}
		})
	}
}

Depois disso, não há como fazer com que ele realmente funcione ao clicar. Após o bloco decorateWidget, se eu escrever qualquer forma disso:

image

Recebo o seguinte erro completamente inútil, com uma linha e um caractere que nem EXISTEM.

Junto com um monte de outros erros aleatórios.

Estou perdendo a sanidade. Como faço apenas para adicionar um botão ao painel administrativo no canto inferior esquerdo, para que eu possa executar código quando clicar nele?

Finally figured it out.

api.decorateWidget('topic-admin-menu:adminMenuButtons', (decorator) => {
					// Adds the button to the admin menu
					return {
						icon: 'ban',
						fullLabel: 'tl_post_lock.button_label',
						action: 'actionTlLock'
					}
				})
				
				api.attachWidgetAction('topic-admin-menu', 'actionTlLock', () => {
					// code
				})