n8n-nodes-discord
Version:
nodes to trigger workflows from Discord or send interactive messages. Uses the components API which allows to create dialogs (e.g. attach buttons and wait for the user to click on them)
110 lines • 5.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const helpers_1 = require("../helpers");
const state_1 = __importDefault(require("../state"));
async function default_1(ipc, client) {
ipc.server.on('send:action', async (nodeParameters, socket) => {
try {
if (state_1.default.ready) {
const executionMatching = state_1.default.executionMatching[nodeParameters.executionId];
let channelId = '';
if (nodeParameters.triggerPlaceholder || nodeParameters.triggerChannel)
channelId = executionMatching.channelId;
else
channelId = nodeParameters.channelId;
if (!channelId && !nodeParameters.actionType) {
ipc.server.emit(socket, 'send:action', false);
return;
}
client.channels
.fetch(channelId)
.then(async (channel) => {
if (!channel || !channel.isTextBased())
return;
const performAction = async () => {
if (nodeParameters.actionType === 'removeMessages') {
await channel
.bulkDelete(nodeParameters.removeMessagesNumber)
.catch((e) => (0, helpers_1.addLog)(`${e}`, client));
}
else if (['addRole', 'removeRole'].includes(nodeParameters.actionType)) {
await client.users
.fetch(nodeParameters.userId)
.then(async (user) => {
await channel.guild.members
.fetch(user)
.then((member) => {
const roles = member.roles;
const roleUpdateIds = typeof nodeParameters.roleUpdateIds === 'string'
? nodeParameters.roleUpdateIds.split(',')
: nodeParameters.roleUpdateIds;
(roleUpdateIds !== null && roleUpdateIds !== void 0 ? roleUpdateIds : []).forEach((roleId) => {
if (!roles.cache.has(roleId) && nodeParameters.actionType === 'addRole')
roles.add(roleId);
else if (roles.cache.has(roleId) &&
nodeParameters.actionType === 'removeRole')
roles.remove(roleId);
});
})
.catch((e) => (0, helpers_1.addLog)(`${e}`, client));
})
.catch((e) => {
(0, helpers_1.addLog)(`${e}`, client);
});
}
};
if (nodeParameters.triggerPlaceholder && executionMatching.placeholderId) {
const realPlaceholderId = state_1.default.placeholderMatching[executionMatching.placeholderId];
if (realPlaceholderId) {
const message = (await channel.messages
.fetch(realPlaceholderId)
.catch((e) => {
(0, helpers_1.addLog)(`${e}`, client);
}));
delete state_1.default.placeholderMatching[executionMatching.placeholderId];
if (message && message.delete) {
let t = 0;
const retry = async () => {
if (state_1.default.placeholderWaiting[executionMatching.placeholderId] && t < 10) {
t++;
setTimeout(() => retry(), 300);
}
else {
await message.delete().catch((e) => {
(0, helpers_1.addLog)(`${e}`, client);
});
await performAction();
ipc.server.emit(socket, 'send:action', {
channelId,
action: nodeParameters.actionType,
});
}
};
retry();
return;
}
}
}
await performAction();
ipc.server.emit(socket, 'send:action', {
channelId,
action: nodeParameters.actionType,
});
})
.catch((e) => {
(0, helpers_1.addLog)(`${e}`, client);
ipc.server.emit(socket, 'send:action', false);
});
}
}
catch (e) {
(0, helpers_1.addLog)(`${e}`, client);
ipc.server.emit(socket, 'send:action', false);
}
});
}
exports.default = default_1;
//# sourceMappingURL=sendAction.ipc.js.map