UNPKG

n8n-nodes-discord-trigger

Version:

A node that triggers a workflow whenever a message from discord is sent.

199 lines 7.48 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ipcRequest = exports.checkWorkflowStatus = exports.getRoles = exports.getGuilds = exports.getChannels = exports.connection = void 0; const node_ipc_1 = __importDefault(require("node-ipc")); const axios_1 = __importDefault(require("axios")); const connection = (credentials) => { return new Promise((resolve, reject) => { if (!credentials || !credentials.token || !credentials.clientId) { reject('credentials missing'); return; } const timeout = setTimeout(() => reject('timeout'), 15000); node_ipc_1.default.config.retry = 1500; node_ipc_1.default.connectTo('bot', () => { node_ipc_1.default.of.bot.emit('credentials', credentials); node_ipc_1.default.of.bot.on('credentials', (data) => { clearTimeout(timeout); if (data === 'error') reject('Invalid credentials'); else if (data === 'missing') reject('Token or clientId missing'); else if (data === 'login') reject('Already logging in'); else if (data === 'different') resolve('Already logging in with different credentials'); else resolve(data); }); }); }); }; exports.connection = connection; const getChannels = async (that, guildIds) => { const endMessage = ' - Close and reopen this node modal once you have made changes.'; const credentials = await that.getCredentials('discordBotTriggerApi').catch((e) => e); const res = await (0, exports.connection)(credentials).catch((e) => e); if (!['ready', 'already'].includes(res)) { return [ { name: res + endMessage, value: 'false', }, ]; } const channelsRequest = () => new Promise((resolve) => { const timeout = setTimeout(() => resolve(''), 15000); node_ipc_1.default.config.retry = 1500; node_ipc_1.default.connectTo('bot', () => { node_ipc_1.default.of.bot.emit('list:channels', { guildIds: guildIds, token: credentials.token }); node_ipc_1.default.of.bot.on('list:channels', (data) => { clearTimeout(timeout); resolve(data); }); }); }); const channels = await channelsRequest().catch((e) => e); let message = 'Unexpected error'; if (channels) { if (Array.isArray(channels) && channels.length) return channels; else message = 'Your Discord server has no text channels, please add at least one text channel' + endMessage; } return [ { name: message, value: 'false', }, ]; }; exports.getChannels = getChannels; const getGuilds = async (that) => { const endMessage = ' - Close and reopen this node modal once you have made changes.'; const credentials = await that.getCredentials('discordBotTriggerApi').catch((e) => e); const res = await (0, exports.connection)(credentials).catch((e) => e); if (!['ready', 'already'].includes(res)) { return [ { name: res + endMessage, value: 'false', }, ]; } const guildsRequest = () => new Promise((resolve) => { const timeout = setTimeout(() => resolve(''), 15000); node_ipc_1.default.config.retry = 1500; node_ipc_1.default.connectTo('bot', () => { node_ipc_1.default.of.bot.emit('list:guilds', { token: credentials.token }); node_ipc_1.default.of.bot.on('list:guilds', (data) => { clearTimeout(timeout); resolve(data); }); }); }); const guilds = await guildsRequest().catch((e) => e); let message = 'Unexpected error'; if (guilds) { if (Array.isArray(guilds) && guilds.length) return guilds; else message = 'Your bot is not part of any guilds. Please add the bot to at least one guild.' + endMessage; } return [ { name: message, value: 'false', }, ]; }; exports.getGuilds = getGuilds; const getRoles = async (that, selectedGuildIds) => { const endMessage = ' - Close and reopen this node modal once you have made changes.'; const credentials = await that.getCredentials('discordBotTriggerApi').catch((e) => e); const res = await (0, exports.connection)(credentials).catch((e) => e); if (!['ready', 'already'].includes(res)) { return [ { name: res + endMessage, value: 'false', }, ]; } const rolesRequest = () => new Promise((resolve) => { const timeout = setTimeout(() => resolve(''), 15000); node_ipc_1.default.config.retry = 1500; node_ipc_1.default.connectTo('bot', () => { node_ipc_1.default.of.bot.emit('list:roles', { guildIds: selectedGuildIds, token: credentials.token }); node_ipc_1.default.of.bot.on('list:roles', (data) => { clearTimeout(timeout); resolve(data); }); }); }); const roles = await rolesRequest().catch((e) => e); let message = 'Unexpected error'; if (roles) { if (Array.isArray(roles)) { const filtered = roles.filter((r) => r.name !== '@everyone'); if (filtered.length) return filtered; else message = 'Your Discord server has no roles, please add at least one if you want to restrict the trigger to specific users' + endMessage; } else message = 'Something went wrong' + endMessage; } return [ { name: message, value: 'false', }, ]; }; exports.getRoles = getRoles; const checkWorkflowStatus = async (n8nApiUrl, apiToken, workflowId) => { const apiUrl = `${removeTrailingSlash(n8nApiUrl)}/workflows/${workflowId}`; return new Promise((resolve, reject) => { axios_1.default.get(apiUrl, { headers: { 'X-N8N-API-KEY': `${apiToken}`, }, }).then(response => { resolve(response.data.active); }).catch(e => { console.error('Error checking workflow status:', e.message); reject(e); }); }); }; exports.checkWorkflowStatus = checkWorkflowStatus; const ipcRequest = (type, parameters) => { return new Promise((resolve) => { node_ipc_1.default.config.retry = 1500; node_ipc_1.default.connectTo('bot', () => { node_ipc_1.default.of.bot.on(`callback:${type}`, (data) => { console.log("response fired", data); resolve(data); }); node_ipc_1.default.of.bot.emit(type, parameters); }); }); }; exports.ipcRequest = ipcRequest; function removeTrailingSlash(url) { if (url.endsWith('/')) { return url.slice(0, -1); } return url; } //# sourceMappingURL=helper.js.map