diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index f6aa89e1..a73b4a42 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -203,7 +203,7 @@ export const TagsPlugin = zeppelinGuildPlugin()("tags", { return ""; } - if (input.match(/^<(?:@(?:!|&)?|#)\d+>$/)) { + if (input.match(/^<(?:@[!&]?|#)\d+>$/)) { return input; } @@ -217,6 +217,14 @@ export const TagsPlugin = zeppelinGuildPlugin()("tags", { return ""; }, + + isMention: input => { + if (typeof input !== "string") { + return false; + } + + return /^<(?:@[!&]?|#)\d+>$/.test(input); + }, }; for (const [name, fn] of Object.entries(state.tagFunctions)) { diff --git a/backend/src/plugins/Tags/util/renderTagBody.ts b/backend/src/plugins/Tags/util/renderTagBody.ts index dfde7a71..735455dc 100644 --- a/backend/src/plugins/Tags/util/renderTagBody.ts +++ b/backend/src/plugins/Tags/util/renderTagBody.ts @@ -25,6 +25,11 @@ export async function renderTagBody( if (typeof name !== "string") return; dynamicVars[name] = val; }, + setr(name, val) { + if (typeof name !== "string") return ""; + dynamicVars[name] = val; + return val; + }, get(name) { return dynamicVars[name] == null ? "" : dynamicVars[name]; }, diff --git a/backend/src/templateFormatter.ts b/backend/src/templateFormatter.ts index 1963c816..e3575301 100644 --- a/backend/src/templateFormatter.ts +++ b/backend/src/templateFormatter.ts @@ -308,6 +308,18 @@ const baseValues = { if (end != null && isNaN(end)) return ""; return arg1.slice(parseInt(start, 10), end && parseInt(end, 10)); }, + lower(arg) { + if (typeof arg !== "string") return arg; + return arg.toLowerCase(); + }, + upper(arg) { + if (typeof arg !== "string") return arg; + return arg.toUpperCase(); + }, + upperFirst(arg) { + if (typeof arg !== "string") return arg; + return arg.charAt(0).toUpperCase() + arg.slice(1); + }, rand(from, to, seed = null) { if (isNaN(from)) return 0;