168 lines
5.5 KiB
JavaScript
168 lines
5.5 KiB
JavaScript
// File path: ./commands/embed.js
|
|
|
|
const fs = require("fs");
|
|
const Discord = require("discord.js");
|
|
const yaml = require("js-yaml");
|
|
|
|
const supportbot = yaml.load(fs.readFileSync("./Configs/supportbot.yml", "utf8"));
|
|
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));
|
|
const msgconfig = yaml.load(fs.readFileSync("./Configs/messages.yml", "utf8"));
|
|
|
|
const Command = require("../Structures/Command.js");
|
|
|
|
module.exports = new Command({
|
|
name: cmdconfig.Embed.Command,
|
|
description: cmdconfig.Embed.Description,
|
|
type: Discord.ApplicationCommandType.ChatInput,
|
|
options: [
|
|
{
|
|
name: "title",
|
|
description: "Embed Title",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: true,
|
|
},
|
|
{
|
|
name: "message",
|
|
description: "Embed Message",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: true,
|
|
},
|
|
{
|
|
name: "color",
|
|
description: "Embed HEX Color",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "fields",
|
|
description: "Embed Fields (title|content;title|content;...)",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "thumbnail",
|
|
description: "Embed Thumbnail URL",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "image",
|
|
description: "Embed Image URL",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "footer",
|
|
description: "Embed Footer Text",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "footericon",
|
|
description: "Embed Footer Icon URL",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "author",
|
|
description: "Embed Author Name",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "authoricon",
|
|
description: "Embed Author Icon URL",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "authorurl",
|
|
description: "Embed Author URL",
|
|
type: Discord.ApplicationCommandOptionType.String,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "timestamp",
|
|
description: "Include Timestamp",
|
|
type: Discord.ApplicationCommandOptionType.Boolean,
|
|
required: false,
|
|
},
|
|
{
|
|
name: "inline",
|
|
description: "Make Fields Inline",
|
|
type: Discord.ApplicationCommandOptionType.Boolean,
|
|
required: false,
|
|
}
|
|
],
|
|
permissions: cmdconfig.Embed.Permission,
|
|
|
|
async run(interaction) {
|
|
const { getRole } = interaction.client;
|
|
let SupportStaff = await getRole(supportbot.Roles.StaffMember.Staff, interaction.guild);
|
|
let Admin = await getRole(supportbot.Roles.StaffMember.Admin, interaction.guild);
|
|
|
|
if (!SupportStaff || !Admin) {
|
|
return interaction.reply("Some roles seem to be missing!\nPlease check for errors when starting the bot.");
|
|
}
|
|
|
|
const NoPerms = new Discord.EmbedBuilder()
|
|
.setTitle("Invalid Permissions!")
|
|
.setDescription(`${msgconfig.Error.IncorrectPerms}\n\nRole Required: \`${supportbot.Roles.StaffMember.Staff}\` or \`${supportbot.Roles.StaffMember.Admin}\``)
|
|
.setColor(supportbot.Embed.Colours.Warn);
|
|
|
|
if (
|
|
interaction.member.roles.cache.has(SupportStaff.id) ||
|
|
interaction.member.roles.cache.has(Admin.id)
|
|
) {
|
|
const EmbedTitle = interaction.options.getString("title").replace(/\\n/g, '\n');
|
|
const EmbedSubject = interaction.options.getString("message").replace(/\\n/g, '\n');
|
|
const GeneralColour = interaction.options.getString("color") || supportbot.Embed.Colours.Default;
|
|
const EmbedThumbnail = interaction.options.getString("thumbnail");
|
|
const EmbedImage = interaction.options.getString("image");
|
|
const EmbedFields = interaction.options.getString("fields");
|
|
const EmbedFooter = interaction.options.getString("footer")?.replace(/\\n/g, '\n');
|
|
const EmbedFooterIcon = interaction.options.getString("footericon");
|
|
const EmbedAuthor = interaction.options.getString("author")?.replace(/\\n/g, '\n');
|
|
const EmbedAuthorIcon = interaction.options.getString("authoricon");
|
|
const EmbedAuthorURL = interaction.options.getString("authorurl");
|
|
const EmbedTimestamp = interaction.options.getBoolean("timestamp");
|
|
const InlineFields = interaction.options.getBoolean("inline");
|
|
|
|
const EmbedMsg = new Discord.EmbedBuilder()
|
|
.setTitle(EmbedTitle)
|
|
.setDescription(EmbedSubject)
|
|
.setColor(GeneralColour)
|
|
.setThumbnail(EmbedThumbnail)
|
|
.setImage(EmbedImage);
|
|
|
|
if (EmbedFields) {
|
|
const fieldsArray = EmbedFields.split(';');
|
|
fieldsArray.forEach(field => {
|
|
const [title, value] = field.split('|');
|
|
if (title && value) {
|
|
EmbedMsg.addFields({ name: title.replace(/\\n/g, '\n'), value: value.replace(/\\n/g, '\n'), inline: InlineFields || false });
|
|
}
|
|
});
|
|
}
|
|
|
|
if (EmbedFooter) {
|
|
EmbedMsg.setFooter({ text: EmbedFooter, iconURL: EmbedFooterIcon });
|
|
}
|
|
|
|
if (EmbedAuthor) {
|
|
EmbedMsg.setAuthor({ name: EmbedAuthor, iconURL: EmbedAuthorIcon, url: EmbedAuthorURL });
|
|
}
|
|
|
|
if (EmbedTimestamp) {
|
|
EmbedMsg.setTimestamp();
|
|
}
|
|
|
|
interaction.reply({
|
|
embeds: [EmbedMsg],
|
|
});
|
|
} else {
|
|
return interaction.reply({ embeds: [NoPerms] });
|
|
}
|
|
},
|
|
});
|