diff --git a/backend/src/plugins/RoleButtons/events/buttonInteraction.ts b/backend/src/plugins/RoleButtons/events/buttonInteraction.ts index f8973d05..598ceca7 100644 --- a/backend/src/plugins/RoleButtons/events/buttonInteraction.ts +++ b/backend/src/plugins/RoleButtons/events/buttonInteraction.ts @@ -1,10 +1,13 @@ import { GuildMember } from "discord.js"; import { guildPluginEventListener } from "knub"; import { SECONDS } from "../../../utils.js"; +import { renderRecursively } from "../../../utils.js"; import { parseCustomId } from "../../../utils/parseCustomId.js"; import { RoleManagerPlugin } from "../../RoleManager/RoleManagerPlugin.js"; import { getAllRolesInButtons } from "../functions/getAllRolesInButtons.js"; import { RoleButtonsPluginType, TRoleButtonOption } from "../types.js"; +import { renderTemplate, TemplateSafeValueContainer } from "../../../templateFormatter.js"; +import { memberToTemplateSafeMember, roleToTemplateSafeRole, userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js"; const ROLE_BUTTON_CD = 5 * SECONDS; @@ -31,7 +34,6 @@ export const onButtonInteraction = guildPluginEventListener console.trace(err.message)); return; } @@ -53,14 +55,25 @@ export const onButtonInteraction = guildPluginEventListener + renderTemplate( + str, + new TemplateSafeValueContainer({ + user: member ? memberToTemplateSafeMember(member) : userToTemplateSafeUser(args.interaction.user), + role: role ? roleToTemplateSafeRole(role) : new TemplateSafeValueContainer({ name: roleName, id: option.role_id }), + }), + ); + if (member.roles.cache.has(option.role_id)) { rolesToRemove.push(option.role_id); + + const messageTemplate = config.buttons[name].remove_message || `The role **${roleName}** will be removed shortly!`; + const formatted = typeof messageTemplate === "string" + ? await renderTemplateText(messageTemplate) + : await renderRecursively(messageTemplate, renderTemplateText); + args.interaction - .reply({ - ephemeral: true, - content: `The role **${roleName}** will be removed shortly!`, - }) - // tslint:disable-next-line no-console + .reply({ ephemeral: true, ...(typeof formatted === "string" ? { content: formatted } : formatted) }) .catch((err) => console.trace(err.message)); } else { rolesToAdd.push(option.role_id); @@ -73,12 +86,13 @@ export const onButtonInteraction = guildPluginEventListener console.trace(err.message)); } @@ -89,4 +103,4 @@ export const onButtonInteraction = guildPluginEventListener