Add {{firstDisplayedMessageId}} macro

a585f3abcc26c81f24bb3e5eb0c1703ee9910052

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +17 -0Showing whitespace changes
public/scripts/macros.js+16 -0
@@ -212,6 +212,21 @@ function getFirstIncludedMessageId() {
212212}
213213
214214/**
215+ * Returns the ID of the first displayed message in the chat.
216+ *
217+ * @returns {number|null} The ID of the first displayed message
218+ */
219+function getFirstDisplayedMessageId() {
220+ const mesId = Number(document.querySelector('#chat .mes')?.getAttribute('mesid'));
221+
222+ if (!isNaN(mesId) && mesId >= 0) {
223+ return mesId;
224+ }
225+
226+ return null;
227+}
228+
229+/**
215230 * Returns the last message in the chat
216231 *
217232 * @returns {string} The last message in the chat
@@ -467,6 +482,7 @@ export function evaluateMacros(content, env, postProcessFn) {
467482 { regex: /{{lastUserMessage}}/gi, replace: () => getLastUserMessage() },
468483 { regex: /{{lastCharMessage}}/gi, replace: () => getLastCharMessage() },
469484 { regex: /{{firstIncludedMessageId}}/gi, replace: () => String(getFirstIncludedMessageId() ?? '') },
485+ { regex: /{{firstDisplayedMessageId}}/gi, replace: () => String(getFirstDisplayedMessageId() ?? '') },
470486 { regex: /{{lastSwipeId}}/gi, replace: () => String(getLastSwipeId() ?? '') },
471487 { regex: /{{currentSwipeId}}/gi, replace: () => String(getCurrentSwipeId() ?? '') },
472488 { regex: /{{reverse:(.+?)}}/gi, replace: (_, str) => Array.from(str).reverse().join('') },
public/scripts/templates/macros.html+1 -0
@@ -29,6 +29,7 @@
2929 <li><tt>&lcub;&lcub;lastCharMessage&rcub;&rcub;</tt> – <span data-i18n="help_macros_lastChar">the text of the latest character chat message.</span></li>
3030 <li><tt>&lcub;&lcub;lastMessageId&rcub;&rcub;</tt> – <span data-i18n="help_macros_21">index # of the latest chat message. Useful for slash command batching.</span></li>
3131 <li><tt>&lcub;&lcub;firstIncludedMessageId&rcub;&rcub;</tt> – <span data-i18n="help_macros_22">the ID of the first message included in the context. Requires generation to be ran at least once in the current session.</span></li>
32+ <li><tt>&lcub;&lcub;firstDisplayedMessageId&rcub;&rcub;</tt> – <span data-i18n="help_macros_firstDisplayedMessageId">the ID of the first message loaded into the visible chat.</span></li>
3233 <li><tt>&lcub;&lcub;currentSwipeId&rcub;&rcub;</tt> – <span data-i18n="help_macros_23">the 1-based ID of the current swipe in the last chat message. Empty string if the last message is user or prompt-hidden.</span></li>
3334 <li><tt>&lcub;&lcub;lastSwipeId&rcub;&rcub;</tt> – <span data-i18n="help_macros_24">the number of swipes in the last chat message. Empty string if the last message is user or prompt-hidden.</span></li>
3435 <li><tt>&lcub;&lcub;reverse:(content)&rcub;&rcub;</tt> – <span data-i18n="help_macros_reverse">reverses the content of the macro.</span></li>