n8n-nodes-discord-trigger
Version:
A node that triggers a workflow whenever a message from discord is sent.
729 lines • 36.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const discord_js_1 = require("discord.js");
const node_ipc_1 = __importDefault(require("node-ipc"));
const settings_1 = __importDefault(require("./settings"));
function default_1() {
node_ipc_1.default.config.id = 'bot';
node_ipc_1.default.config.retry = 1500;
node_ipc_1.default.config.silent = true;
function spawnClient(token, clientId) {
const client = new discord_js_1.Client({
intents: [
discord_js_1.GatewayIntentBits.Guilds,
discord_js_1.GatewayIntentBits.GuildMessages,
discord_js_1.GatewayIntentBits.GuildMembers,
discord_js_1.GatewayIntentBits.GuildPresences,
discord_js_1.GatewayIntentBits.GuildModeration,
discord_js_1.GatewayIntentBits.GuildMessageReactions,
discord_js_1.GatewayIntentBits.GuildMessageTyping,
discord_js_1.GatewayIntentBits.DirectMessages,
discord_js_1.GatewayIntentBits.DirectMessageReactions,
discord_js_1.GatewayIntentBits.MessageContent,
],
allowedMentions: {
parse: ['roles', 'users', 'everyone'],
},
partials: [discord_js_1.Partials.Message, discord_js_1.Partials.Channel, discord_js_1.Partials.Reaction, discord_js_1.Partials.User],
});
client.on('guildMemberAdd', (guildMember) => {
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('user-join' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(guildMember.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'guildMemberAdd', {
guildMember: guildMember,
guild: guildMember.guild,
user: guildMember.user,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('guildMemberRemove', (guildMember) => {
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('user-leave' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(guildMember.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'guildMemberRemove', {
guildMember: guildMember,
guild: guildMember.guild,
user: guildMember.user,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('guildMemberUpdate', (oldMember, newMember) => {
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('user-update' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(oldMember.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'guildMemberUpdate', {
oldMember: oldMember,
newMember: newMember,
guild: oldMember.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('messageReactionAdd', async (messageReaction, user) => {
var _a, _b;
let message = null;
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('message-reaction-add' !== parameters.type)
continue;
if (!message) {
try {
await messageReaction.fetch();
message = messageReaction.message;
}
catch (error) {
console.error('Something went wrong when fetching the message:', error);
continue;
}
}
const triggerOnExternalBot = ((_a = parameters.additionalFields) === null || _a === void 0 ? void 0 : _a.externalBotTrigger) || false;
if (!triggerOnExternalBot) {
if (user.bot || user.system)
continue;
}
else if (user.id === message.client.user.id)
continue;
if (parameters.guildIds.length && message.guild && !parameters.guildIds.includes(message.guild.id))
continue;
if (parameters.messageIds.length && !parameters.messageIds.includes(message.id))
continue;
if (parameters.channelIds.length) {
const isInChannel = parameters.channelIds.some((channelId) => { var _a; return (_a = message.channel.id) === null || _a === void 0 ? void 0 : _a.includes(channelId); });
if (!isInChannel)
continue;
}
const userRoles = (_b = message.member) === null || _b === void 0 ? void 0 : _b.roles.cache.map((role) => role.id);
if (parameters.roleIds.length) {
const hasRole = parameters.roleIds.some((role) => userRoles === null || userRoles === void 0 ? void 0 : userRoles.includes(role));
if (!hasRole)
continue;
}
node_ipc_1.default.server.emit(parameters.socket, 'messageReactionAdd', {
messageReaction: messageReaction,
message: message,
user: user,
guild: message.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('messageReactionRemove', async (messageReaction, user) => {
var _a, _b;
let message = null;
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('message-reaction-remove' !== parameters.type)
continue;
if (!message) {
try {
await messageReaction.fetch();
message = messageReaction.message;
}
catch (error) {
console.error('Something went wrong when fetching the message:', error);
continue;
}
}
const triggerOnExternalBot = ((_a = parameters.additionalFields) === null || _a === void 0 ? void 0 : _a.externalBotTrigger) || false;
if (!triggerOnExternalBot) {
if (user.bot || user.system)
continue;
}
else if (user.id === message.client.user.id)
continue;
if (parameters.guildIds.length && message.guild && !parameters.guildIds.includes(message.guild.id))
continue;
if (parameters.messageIds.length && !parameters.messageIds.includes(message.id))
continue;
if (parameters.channelIds.length) {
const isInChannel = parameters.channelIds.some((channelId) => { var _a; return (_a = message.channel.id) === null || _a === void 0 ? void 0 : _a.includes(channelId); });
if (!isInChannel)
continue;
}
const userRoles = (_b = message.member) === null || _b === void 0 ? void 0 : _b.roles.cache.map((role) => role.id);
if (parameters.roleIds.length) {
const hasRole = parameters.roleIds.some((role) => userRoles === null || userRoles === void 0 ? void 0 : userRoles.includes(role));
if (!hasRole)
continue;
}
node_ipc_1.default.server.emit(parameters.socket, 'messageReactionRemove', {
messageReaction: messageReaction,
message: message,
user: user,
guild: message.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('roleCreate', (role) => {
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('role-create' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(role.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'roleCreate', {
role: role,
guild: role.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('roleDelete', (role) => {
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('role-delete' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(role.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'roleDelete', {
role: role,
guild: role.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
client.on('roleUpdate', (oldRole, newRole) => {
if (oldRole.name === newRole.name &&
oldRole.color === newRole.color &&
oldRole.hoist === newRole.hoist &&
oldRole.permissions.bitfield === newRole.permissions.bitfield &&
oldRole.mentionable === newRole.mentionable &&
oldRole.icon === newRole.icon &&
oldRole.unicodeEmoji === newRole.unicodeEmoji) {
return;
}
const triggerMap = settings_1.default.triggerNodes[token];
for (const [nodeId, parameters] of Object.entries(triggerMap)) {
try {
if ('role-update' !== parameters.type)
continue;
if (parameters.guildIds.length && !parameters.guildIds.includes(oldRole.guild.id))
continue;
node_ipc_1.default.server.emit(parameters.socket, 'roleUpdate', {
oldRole,
newRole,
guild: oldRole.guild,
nodeId: nodeId
});
}
catch (e) {
console.log(e);
}
}
});
const onMessageCreate = async (message) => {
var _a, _b, _c, _d;
console.log("message created", message.id, message.content);
let messageReference = null;
let messageRerenceFetched = !(message.reference);
for (const [nodeId, parameters] of Object.entries(settings_1.default.triggerNodes[token])) {
try {
const isDirectMessage = message.channel.type === discord_js_1.ChannelType.DM;
if (parameters.type === 'direct-message' && !isDirectMessage)
continue;
if (parameters.type === 'message' && isDirectMessage)
continue;
if (parameters.type !== 'message' && parameters.type !== 'direct-message')
continue;
const pattern = parameters.pattern;
const triggerOnExternalBot = ((_a = parameters.additionalFields) === null || _a === void 0 ? void 0 : _a.externalBotTrigger) || false;
const onlyWithAttachments = ((_b = parameters.additionalFields) === null || _b === void 0 ? void 0 : _b.attachmentsRequired) || false;
if (!triggerOnExternalBot) {
if (message.author.bot || message.author.system)
continue;
}
else if (message.author.id === message.client.user.id)
continue;
if (!isDirectMessage && parameters.guildIds.length && message.guild && !parameters.guildIds.includes(message.guild.id))
continue;
const userRoles = !isDirectMessage ? (_c = message.member) === null || _c === void 0 ? void 0 : _c.roles.cache.map((role) => role.id) : [];
if (!isDirectMessage && parameters.roleIds.length) {
const hasRole = parameters.roleIds.some((role) => userRoles === null || userRoles === void 0 ? void 0 : userRoles.includes(role));
if (!hasRole)
continue;
}
if (!isDirectMessage && parameters.channelIds.length) {
const isInChannel = parameters.channelIds.some((channelId) => { var _a; return (_a = message.channel.id) === null || _a === void 0 ? void 0 : _a.includes(channelId); });
if (!isInChannel)
continue;
}
if (parameters.messageReferenceRequired && !message.reference) {
continue;
}
if (!messageRerenceFetched) {
messageReference = await message.fetchReference();
messageRerenceFetched = true;
}
const escapedTriggerValue = String(parameters.value)
.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
.replace(/-/g, '\\x2d');
const clientId = (_d = client.user) === null || _d === void 0 ? void 0 : _d.id;
const botMention = message.mentions.users.some((user) => user.id === clientId);
let regStr = `^${escapedTriggerValue}$`;
if (pattern === "botMention" && !botMention)
continue;
else if (pattern === "start" && message.content)
regStr = `^${escapedTriggerValue}`;
else if (pattern === 'end')
regStr = `${escapedTriggerValue}$`;
else if (pattern === 'contain')
regStr = `${escapedTriggerValue}`;
else if (pattern === 'regex')
regStr = `${parameters.value}`;
else if (pattern === 'every')
regStr = `(.*)`;
const reg = new RegExp(regStr, parameters.caseSensitive ? '' : 'i');
if ((pattern === "botMention" && botMention) || reg.test(message.content)) {
const messageCreateOptions = {
message,
messageReference,
guild: message === null || message === void 0 ? void 0 : message.guild,
referenceAuthor: messageReference === null || messageReference === void 0 ? void 0 : messageReference.author,
author: message.author,
nodeId: nodeId,
};
if (onlyWithAttachments && !message.attachments)
continue;
messageCreateOptions.attachments = message.attachments;
console.log("about to emit messageCreate", message.id);
node_ipc_1.default.server.emit(parameters.socket, 'messageCreate', messageCreateOptions);
}
}
catch (e) {
console.log(e);
}
}
};
client.once('ready', () => {
client.on('messageCreate', onMessageCreate);
if (client.user)
console.log(`Discord bot (${client.user.id}) is ready and listening for messages`);
});
client.login(token).catch(console.error);
return client;
}
node_ipc_1.default.serve(function () {
console.log(`ipc bot server started`);
node_ipc_1.default.server.on('triggerNodeRegistered', (data, socket) => {
if (!settings_1.default.triggerNodes[data.token])
settings_1.default.triggerNodes[data.token] = {};
settings_1.default.triggerNodes[data.token][data.nodeId] = {
...data.parameters,
socket: socket,
};
});
node_ipc_1.default.server.on('triggerNodeRemoved', (data, socket) => {
console.log(`Removing trigger node: ${data.nodeId}`);
for (const token in settings_1.default.triggerNodes) {
delete settings_1.default.triggerNodes[token][data.nodeId];
}
});
node_ipc_1.default.server.on('list:roles', (data, socket) => {
var _a;
try {
const client = settings_1.default.clientMap[data.token];
if (!client || !settings_1.default.readyClients[data.token])
return;
const guilds = client.guilds.cache.filter(guild => data.guildIds.includes(`${guild.id}`));
const rolesList = [];
for (const guild of guilds.values()) {
const roles = (_a = guild.roles.cache) !== null && _a !== void 0 ? _a : ([]);
for (const role of roles.values()) {
rolesList.push({
name: role.name,
value: role.id,
});
}
}
node_ipc_1.default.server.emit(socket, 'list:roles', rolesList);
}
catch (e) {
console.log(`${e}`);
}
});
node_ipc_1.default.server.on('list:guilds', (data, socket) => {
var _a;
try {
const client = settings_1.default.clientMap[data.token];
if (!client || !settings_1.default.readyClients[data.token])
return;
const guilds = (_a = client.guilds.cache) !== null && _a !== void 0 ? _a : [];
const guildsList = guilds.map((guild) => {
return {
name: guild.name,
value: guild.id,
};
});
node_ipc_1.default.server.emit(socket, 'list:guilds', guildsList);
}
catch (e) {
console.log(`${e}`);
}
});
node_ipc_1.default.server.on('list:channels', (data, socket) => {
var _a;
try {
const client = settings_1.default.clientMap[data.token];
if (!client || !settings_1.default.readyClients[data.token])
return;
const guilds = client.guilds.cache.filter(guild => data.guildIds.includes(`${guild.id}`));
const channelsList = [];
for (const guild of guilds.values()) {
const channels = (_a = guild.channels.cache.filter((channel) => channel.type === discord_js_1.ChannelType.GuildText)) !== null && _a !== void 0 ? _a : [];
for (const channel of channels.values()) {
channelsList.push({
name: channel.name,
value: channel.id,
});
}
}
console.log(channelsList);
node_ipc_1.default.server.emit(socket, 'list:channels', channelsList);
}
catch (e) {
console.log(`${e}`);
}
});
node_ipc_1.default.server.on('credentials', (data, socket) => {
const { token, clientId } = data;
if (!token || !clientId) {
node_ipc_1.default.server.emit(socket, 'credentials', 'missing');
return;
}
if (settings_1.default.readyClients[token]) {
node_ipc_1.default.server.emit(socket, 'credentials', 'already');
return;
}
if (settings_1.default.loginQueue[token]) {
node_ipc_1.default.server.emit(socket, 'credentials', 'login');
return;
}
settings_1.default.loginQueue[token] = true;
try {
const client = spawnClient(token, clientId);
settings_1.default.clientMap[token] = client;
settings_1.default.triggerNodes[token] = {};
settings_1.default.credentials[token] = { token, clientId };
client.once('ready', () => {
var _a;
settings_1.default.readyClients[token] = true;
settings_1.default.loginQueue[token] = false;
client.rest.setToken(token);
console.log(`Logged in as ${(_a = client.user) === null || _a === void 0 ? void 0 : _a.tag} (${clientId})`);
node_ipc_1.default.server.emit(socket, 'credentials', 'ready');
});
client.on('error', (err) => {
console.error(`Client error for ${token}`, err);
settings_1.default.loginQueue[token] = false;
node_ipc_1.default.server.emit(socket, 'credentials', 'error');
});
}
catch (err) {
settings_1.default.loginQueue[token] = false;
console.error(`Failed to login client for ${token}`, err);
node_ipc_1.default.server.emit(socket, 'credentials', 'error');
}
});
node_ipc_1.default.server.on('send:message', async (data, socket) => {
var _a;
try {
console.log(`send message for ${data.token}`);
const client = settings_1.default.clientMap[data.token];
const nodeParameters = data.nodeParameters;
if (!client || !settings_1.default.readyClients[data.token])
return;
console.log("client ready", (_a = client.user) === null || _a === void 0 ? void 0 : _a.tag);
const channel = client.channels.cache.get(nodeParameters.channelId);
if (!channel || !channel.isTextBased())
return;
const preparedMessage = prepareMessage(nodeParameters);
const message = await channel.send(preparedMessage);
node_ipc_1.default.server.emit(socket, 'callback:send:message', {
channelId: channel.id,
messageId: message.id
});
}
catch (e) {
console.log(`${e}`);
node_ipc_1.default.server.emit(socket, 'callback:send:message', false);
}
});
node_ipc_1.default.server.on('send:action', async (data, socket) => {
try {
const client = settings_1.default.clientMap[data.token];
const nodeParameters = data.nodeParameters;
if (!client || !settings_1.default.readyClients[data.token])
return;
const performAction = async () => {
var _a;
if (nodeParameters.actionType === 'removeMessages') {
const channel = client.channels.cache.get(nodeParameters.channelId);
if (!channel || !channel.isTextBased()) {
node_ipc_1.default.server.emit(socket, `callback:send:action`, false);
;
return;
}
await channel.bulkDelete(nodeParameters.removeMessagesNumber).catch((e) => console.log(`${e}`, client));
}
else if (['addRole', 'removeRole'].includes(nodeParameters.actionType)) {
const guild = await client.guilds.cache.get(nodeParameters.guildId);
if (!guild) {
node_ipc_1.default.server.emit(socket, `callback:send:action`, false);
return;
}
const user = await client.users.fetch(nodeParameters.userId);
const guildMember = await guild.members.fetch(user);
const roles = guildMember.roles;
const roleUpdateIds = (_a = (typeof nodeParameters.roleUpdateIds === 'string' ? nodeParameters.roleUpdateIds.split(',') : nodeParameters.roleUpdateIds)) !== null && _a !== void 0 ? _a : [];
for (const roleId of roleUpdateIds) {
if (!roles.cache.has(roleId) && nodeParameters.actionType === 'addRole')
roles.add(roleId);
else if (roles.cache.has(roleId) && nodeParameters.actionType === 'removeRole')
roles.remove(roleId);
}
}
};
await performAction();
console.log("action done");
node_ipc_1.default.server.emit(socket, `callback:send:action`, {
action: nodeParameters.actionType,
});
}
catch (e) {
console.log(`${e}`);
node_ipc_1.default.server.emit(socket, `callback:send:action`, false);
}
});
node_ipc_1.default.server.on('send:confirmation', async (data, socket) => {
try {
console.log(`send confirmation for ${data.token}`, data.nodeParameters);
const client = settings_1.default.clientMap[data.token];
const nodeParameters = data.nodeParameters;
if (!client || !settings_1.default.readyClients[data.token])
return;
const channel = client.channels.cache.get(nodeParameters.channelId);
if (!channel || !channel.isTextBased())
return;
let confirmationMessage = null;
let collectorTimeout = 60 * 1000;
if (nodeParameters.additionalConfirmationFields.timeout > 0) {
collectorTimeout = parseInt(nodeParameters.additionalConfirmationFields.timeout) * 1000;
}
const confirmed = await new Promise(async (resolve) => {
const preparedMessage = prepareMessage(nodeParameters);
prepareMessage.ephemeral = true;
const collector = channel.createMessageComponentCollector({
max: 1,
time: collectorTimeout,
});
let isResolved = false;
collector.on("collect", (interaction) => {
if (interaction.customId === "yes") {
interaction.message.delete();
isResolved = true;
return resolve(true);
}
else if (interaction.customId === "no") {
interaction.message.delete();
isResolved = true;
return resolve(false);
}
interaction.message.delete();
isResolved = true;
resolve(null);
});
collector.on("end", (collected) => {
if (!isResolved)
resolve(null);
confirmationMessage === null || confirmationMessage === void 0 ? void 0 : confirmationMessage.delete();
throw Error("Confirmed message could not be resolved");
});
const yesLabel = nodeParameters.additionalConfirmationFields.yesLabel || 'Yes';
const noLabel = nodeParameters.additionalConfirmationFields.noLabel || 'No';
preparedMessage.components = [new discord_js_1.ActionRowBuilder().addComponents([
new discord_js_1.ButtonBuilder()
.setCustomId(`yes`)
.setLabel(yesLabel)
.setStyle(discord_js_1.ButtonStyle.Success),
new discord_js_1.ButtonBuilder()
.setCustomId('no')
.setLabel(noLabel)
.setStyle(discord_js_1.ButtonStyle.Danger),
])];
confirmationMessage = await channel.send(preparedMessage);
});
console.log("sending callback to node ", confirmed);
node_ipc_1.default.server.emit(socket, 'callback:send:confirmation', { confirmed: confirmed, success: true });
}
catch (e) {
console.log(`${e}`);
node_ipc_1.default.server.emit(socket, 'callback:send:confirmation', { confirmed: null, success: true });
}
});
});
node_ipc_1.default.server.start();
}
function prepareMessage(nodeParameters) {
var _a, _b, _c, _d, _e, _f, _g;
const embedFiles = [];
let embed;
if (nodeParameters.embed) {
embed = new discord_js_1.EmbedBuilder();
if (nodeParameters.title)
embed.setTitle(nodeParameters.title);
if (nodeParameters.url)
embed.setURL(nodeParameters.url);
if (nodeParameters.description)
embed.setDescription(nodeParameters.description);
if (nodeParameters.color)
embed.setColor(nodeParameters.color);
if (nodeParameters.timestamp)
embed.setTimestamp(Date.parse(nodeParameters.timestamp));
if (nodeParameters.footerText) {
let iconURL = nodeParameters.footerIconUrl;
if (iconURL && iconURL.match(/^data:/)) {
const buffer = Buffer.from(iconURL.split(',')[1], 'base64');
const reg = new RegExp(/data:image\/([a-z]+);base64/gi);
let mime = (_a = reg.exec(nodeParameters.footerIconUrl)) !== null && _a !== void 0 ? _a : [];
const file = new discord_js_1.AttachmentBuilder(buffer, { name: `footer.${mime[1]}` });
embedFiles.push(file);
iconURL = `attachment://footer.${mime[1]}`;
}
embed.setFooter({
text: nodeParameters.footerText,
...(iconURL ? { iconURL } : {}),
});
}
if (nodeParameters.imageUrl) {
if (nodeParameters.imageUrl.match(/^data:/)) {
const buffer = Buffer.from(nodeParameters.imageUrl.split(',')[1], 'base64');
const reg = new RegExp(/data:image\/([a-z]+);base64/gi);
let mime = (_b = reg.exec(nodeParameters.imageUrl)) !== null && _b !== void 0 ? _b : [];
const file = new discord_js_1.AttachmentBuilder(buffer, { name: `image.${mime[1]}` });
embedFiles.push(file);
embed.setImage(`attachment://image.${mime[1]}`);
}
else
embed.setImage(nodeParameters.imageUrl);
}
if (nodeParameters.thumbnailUrl) {
if (nodeParameters.thumbnailUrl.match(/^data:/)) {
const buffer = Buffer.from(nodeParameters.thumbnailUrl.split(',')[1], 'base64');
const reg = new RegExp(/data:image\/([a-z]+);base64/gi);
let mime = (_c = reg.exec(nodeParameters.thumbnailUrl)) !== null && _c !== void 0 ? _c : [];
const file = new discord_js_1.AttachmentBuilder(buffer, { name: `thumbnail.${mime[1]}` });
embedFiles.push(file);
embed.setThumbnail(`attachment://thumbnail.${mime[1]}`);
}
else
embed.setThumbnail(nodeParameters.thumbnailUrl);
}
if (nodeParameters.authorName) {
let iconURL = nodeParameters.authorIconUrl;
if (iconURL && iconURL.match(/^data:/)) {
const buffer = Buffer.from(iconURL.split(',')[1], 'base64');
const reg = new RegExp(/data:image\/([a-z]+);base64/gi);
let mime = (_d = reg.exec(nodeParameters.authorIconUrl)) !== null && _d !== void 0 ? _d : [];
const file = new discord_js_1.AttachmentBuilder(buffer, { name: `author.${mime[1]}` });
embedFiles.push(file);
iconURL = `attachment://author.${mime[1]}`;
}
embed.setAuthor({
name: nodeParameters.authorName,
...(iconURL ? { iconURL } : {}),
...(nodeParameters.authorUrl ? { url: nodeParameters.authorUrl } : {}),
});
}
if ((_e = nodeParameters.fields) === null || _e === void 0 ? void 0 : _e.field) {
nodeParameters.fields.field.forEach((field) => {
if (embed && field.name && field.value)
embed.addFields({
name: field.name,
value: field.value,
inline: field.inline,
});
else if (embed)
embed.addFields({ name: '\u200B', value: '\u200B' });
});
}
}
let mentions = '';
nodeParameters.mentionRoles.forEach((role) => {
mentions += ` <@&${role}>`;
});
let content = '';
if (nodeParameters.content)
content += nodeParameters.content;
if (mentions)
content += mentions;
let files = [];
if ((_f = nodeParameters.files) === null || _f === void 0 ? void 0 : _f.file) {
files = (_g = nodeParameters.files) === null || _g === void 0 ? void 0 : _g.file.map((file) => {
if (file.url.match(/^data:/)) {
return Buffer.from(file.url.split(',')[1], 'base64');
}
return file.url;
});
}
if (embedFiles.length)
files = files.concat(embedFiles);
const sendObject = {
content: content !== null && content !== void 0 ? content : '',
...(embed ? { embeds: [embed] } : {}),
...(files.length ? { files } : {}),
};
return sendObject;
}
//# sourceMappingURL=bot.js.map