@getsolara/solara.js
Version:
A lightweight and modular Discord bot framework built on discord.js v14, with truly optional feature packages.
31 lines • 1.97 kB
JavaScript
const { ButtonBuilder, ButtonStyle } = require('discord.js');
module.exports = {
name: "$addButton",
description: "Adds a button to the current message component row. Args: customIDOrURL;label;style(Primary/Secondary/Success/Danger/Link);[disabled(true)];[emoji]",
takesBrackets: true,
execute: async (context, args) => {
if (args.length < 3) return "[Error: $addButton requires customID/URL, label, and style]";
const [customIdOrUrl, label, styleStr, disabledStr, emoji] = args;
let style; let isLink = false;
switch(styleStr?.toLowerCase()){
case 'primary': style = ButtonStyle.Primary; break; case 'secondary': style = ButtonStyle.Secondary; break;
case 'success': style = ButtonStyle.Success; break; case 'danger': style = ButtonStyle.Danger; break;
case 'link': style = ButtonStyle.Link; isLink = true; break;
default: return `[Error: Invalid button style "${styleStr}". Use Primary, Secondary, Success, Danger, or Link]`;
}
const button = new ButtonBuilder().setLabel(label);
if (emoji) { try { button.setEmoji(emoji); } catch(e) { /* ignore */ } }
if (isLink) {
if (!customIdOrUrl.startsWith('http:') && !customIdOrUrl.startsWith('https:') && !customIdOrUrl.startsWith('discord:')) return "[Error: Link button requires a valid URL]";
button.setURL(customIdOrUrl).setStyle(style);
} else {
if (customIdOrUrl.length > 100) return "[Error: Button customID cannot exceed 100 characters]";
if (!customIdOrUrl) return "[Error: Non-link buttons require a customID]";
button.setCustomId(customIdOrUrl).setStyle(style);
if(disabledStr?.toLowerCase() === 'true') button.setDisabled(true);
}
context.components = context.components || [];
context.components.push(button.toJSON());
return "";
}
};