/** * DR Quick Button — Foundry VTT v13 * Adds a button near the chat dice/controls that runs the `/dr` command. */ Hooks.once("init", () => { console.log("DR Quick Button | Initializing"); }); // Sidebar chat Hooks.on("renderChatLog", (app, html) => addDRButton(html)); // Mini/Popout chat Hooks.on("renderChatPopout", (app, html) => addDRButton(html)); function addDRButton(html) { try { // Avoid duplicates if (html.querySelector(".dr-quick-button")) return; const container = html.querySelector(".dice-tray") || html.querySelector(".chat-controls .control-buttons") || html.querySelector(".chat-controls") || html; // Build button const btn = document.createElement("button"); btn.type = "button"; btn.className = "dr-quick-button"; btn.title = "Duality Dice Roll"; btn.setAttribute("aria-label", "Duality Dice Roll"); // Inline SVG (or use icon.src = "modules/dr-quick-button/icons/dr.svg"; if external) btn.innerHTML = ` `; btn.addEventListener("click", async () => { await runDRCommand(); }); container.appendChild(btn); // fallback if fewer than 4 buttons } catch (err) { console.error("DR Quick Button | addDRButton error:", err); } } /** Run `/dr` as if typed into chat */ async function runDRCommand() { const cmd = "/dr"; try { if (ui?.chat?.processMessage) return await ui.chat.processMessage(cmd); } catch (e) { console.warn("DR Quick Button | ui.chat.processMessage failed:", e); } try { if (globalThis.ChatLog?.instance?.processMessage) { return await globalThis.ChatLog.instance.processMessage(cmd); } } catch (e) { console.warn("DR Quick Button | ChatLog.instance.processMessage failed:", e); } try { const form = ui.chat?.element?.querySelector?.("form#chat-form"); const textarea = form?.querySelector?.("textarea[name='message']"); if (form && textarea) { const prev = textarea.value; textarea.value = cmd; form.dispatchEvent(new Event("submit", { bubbles: true, cancelable: true })); setTimeout(() => (textarea.value = prev ?? ""), 0); return; } } catch (e) { console.warn("DR Quick Button | Fallback submit failed:", e); } ui.notifications?.warn?.("Couldn't run /dr automatically. Try typing /dr in chat."); }