Oggi ho riscontrato questo problema:
https://meta.discourse.org/t/required-tags-should-only-be-required-based-on-type-of-user/392238
ma per ora, finché il team non ci lavorerà (speriamo), ho deciso di chiedere a Claude un aiuto per costruire un Componente che mi permetta di avere un messaggio personalizzato nel Composer per ricordarmi di aggiungere un tag. Posso aggiungere uno o più utenti, tramite ID, e posso limitarlo a determinate categorie, anch’esse tramite ID.
Se l’ID (utente e categorie) NON è nella lista, vedo questo:

Se l’ID è nella lista, vedo il messaggio:

Se questo può essere utile ad altri, eccolo qui (basta creare un componente e aggiungere lo script nella scheda JS):
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("0.8.31", (api) => {
// Configurazione: Aggiungi qui i tuoi ID utente e ID categoria
const TARGET_USER_IDS = [2]; // Sostituisci con gli ID utente effettivi
const TARGET_CATEGORY_IDS = [4,49]; // Sostituisci con gli ID categoria effettivi
const REMINDER_MESSAGE = "🛑 Aggiungi il tag appropriato a questo post!";
let previousCategoryId = null;
let checkInterval = null;
function checkAndUpdateMessage() {
const composer = api.container.lookup("controller:composer");
if (!composer || !composer.model) {
// Il Composer è scomparso, smetti di controllare
if (checkInterval) {
clearInterval(checkInterval);
checkInterval = null;
}
return;
}
const currentUser = api.getCurrentUser();
if (!currentUser || !TARGET_USER_IDS.includes(currentUser.id)) return;
const model = composer.model;
const categoryId = model.categoryId;
// Agisci solo se la categoria è cambiata
if (categoryId === previousCategoryId) return;
previousCategoryId = categoryId;
const currentReply = model.reply || "";
// Rimuovi il messaggio se è stato aggiunto
if (currentReply.startsWith(REMINDER_MESSAGE)) {
model.set("reply", currentReply.replace(REMINDER_MESSAGE, "").trim());
}
// Aggiungi il messaggio se nella categoria di destinazione e il composer è vuoto
if (categoryId && TARGET_CATEGORY_IDS.includes(categoryId)) {
const cleanReply = model.reply || "";
if (cleanReply.trim().length === 0) {
model.set("reply", REMINDER_MESSAGE);
}
}
}
// Controlla all'apertura del composer
api.onAppEvent("composer:opened", () => {
previousCategoryId = null;
checkAndUpdateMessage();
// Avvia il polling per i cambiamenti di categoria
if (checkInterval) clearInterval(checkInterval);
checkInterval = setInterval(checkAndUpdateMessage, 300);
});
// Smetti di controllare alla chiusura del composer
api.onAppEvent("composer:closed", () => {
if (checkInterval) {
clearInterval(checkInterval);
checkInterval = null;
}
previousCategoryId = null;
});
});