Add some support for feature flags in addition to making roll modes work with custom chat formats

This commit is contained in:
Oliver-Akins 2024-09-03 00:40:41 -06:00
parent f238db1c4d
commit 444af027b3
7 changed files with 88 additions and 7 deletions

View file

@ -24,6 +24,7 @@ async function rollDice() {
], ],
}); });
const [ statBase, successThreshold, critsEnabled ] = Object.values(answers); const [ statBase, successThreshold, critsEnabled ] = Object.values(answers);
const rollMode = game.settings.get(`core`, `rollMode`);
let successes = 0; let successes = 0;
const results = []; const results = [];
@ -39,12 +40,19 @@ async function rollDice() {
} }
} }
const m = new ChatMessage({ const chatData = ChatMessage.applyRollMode(
{
title: `Dice Pool`, title: `Dice Pool`,
content: `Rolled: ${results.join(`, `)}<br>Successes: ${successes}`, content: `Rolled: ${taf.utils.hideMessageText(results.join(`, `))}<br>Successes: ${taf.utils.hideMessageText(successes)}`,
}); flags: { taf: {
m.applyRollMode(game.settings.get(`core`, `rollMode`)); rollModedContent: true,
ui.chat.postOne(m); rollMode,
} },
},
rollMode,
);
await ChatMessage.implementation.create(chatData);
} }
rollDice() rollDice()

3
src/consts.mjs Normal file
View file

@ -0,0 +1,3 @@
export const FEATURE_FLAGS = Object.freeze({
ROLLMODECONTENT: `Roll Mode Message Content`,
});

View file

@ -0,0 +1,21 @@
import { FEATURE_FLAGS } from "../consts.mjs";
Hooks.on(`renderChatMessage`, (msg, html) => {
// Short-Circuit when the flag isn't set for the message
if (msg.getFlag(`taf`, `rollModedContent`)) {
return;
}
const featureFlags = game.settings.get(game.system.id, `flags`);
const featureFlagEnabled = featureFlags.includes(FEATURE_FLAGS.ROLLMODECONTENT);
const contentElement = html.find(`.message-content`)[0];
let content = contentElement.innerHTML;
if (featureFlagEnabled && msg.blind && !game.user.isGM) {
content = content.replace(/-=.*?=-/gm, `???`);
} else {
content = content.replace(/-=|=-/gm, ``);
}
contentElement.innerHTML = content;
});

View file

@ -7,7 +7,12 @@ import { ItemProxy } from "./documents/Item/_proxy.mjs";
// DataModel Imports // DataModel Imports
import { PlayerData } from "./documents/Actor/Player/Model.mjs"; import { PlayerData } from "./documents/Actor/Player/Model.mjs";
// Hook Imports
import "./hooks/renderChatMessage.mjs";
import "./hooks/hotReload.mjs";
// Misc Imports // Misc Imports
import "./utils/globalTaf.mjs";
import "./utils/logger.mjs"; import "./utils/logger.mjs";
import "./utils/DialogManager.mjs"; import "./utils/DialogManager.mjs";
import { registerCustomComponents } from "./components/_index.mjs"; import { registerCustomComponents } from "./components/_index.mjs";

View file

@ -1 +1,24 @@
export function registerWorldSettings() {}; import { FEATURE_FLAGS } from "../consts.mjs";
export function registerWorldSettings() {
game.settings.register(game.system.id, `flags`, {
name: `Feature Flags`,
hint: `World-based feature flags that are used to enable/disable specific behaviours`,
scope: `world`,
type: new foundry.data.fields.SetField(
new foundry.data.fields.StringField(
{
empty: false,
trim: true,
options: Object.values(FEATURE_FLAGS),
},
),
{
required: false,
initial: new Set(),
},
),
config: true,
requiresReload: true,
});
};

View file

@ -0,0 +1,10 @@
import { FEATURE_FLAGS } from "../../consts.mjs";
export function hideMessageText(content) {
const featureFlags = game.settings.get(game.system.id, `flags`);
const hideContent = featureFlags.includes(FEATURE_FLAGS.ROLLMODECONTENT);
if (hideContent) {
return `-=${content}=-`;
}
return content;
};

11
src/utils/globalTaf.mjs Normal file
View file

@ -0,0 +1,11 @@
import { FEATURE_FLAGS } from "../consts.mjs";
import { hideMessageText } from "./feature_flags/rollModeMessageContent.mjs";
globalThis.taf = Object.freeze({
utils: {
hideMessageText,
},
const: {
FEATURE_FLAGS,
},
});