From 545241be852f53b7efa893b48800ac45bc6ea0e2 Mon Sep 17 00:00:00 2001 From: Erik Zuuring Date: Tue, 27 Jun 2023 10:56:21 +0300 Subject: [PATCH 1/2] Send discord memberlist to n8n --- discord-scripts/fjord.ts | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/discord-scripts/fjord.ts b/discord-scripts/fjord.ts index 79469ef4..1934012f 100644 --- a/discord-scripts/fjord.ts +++ b/discord-scripts/fjord.ts @@ -2,6 +2,8 @@ import { ApplicationCommandOptionType, Client, CommandInteraction, + Guild, + GuildMember, TextChannel, } from "discord.js" import axios from "axios" @@ -121,6 +123,58 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { } if (process.env.HUBOT_N8N_WEBHOOK) { + if (discordClient.user) { + const handleGuild = async (guild: Guild) => { + await guild.members.fetch() + + const membersList: { + username: string + nickname: string | null + id: string + }[] = [] + + guild.members.cache.forEach((member: GuildMember) => { + membersList.push({ + username: member.user.username, + nickname: member.nickname, + id: member.id, + }) + }) + + robot.logger.info(`Members of ${guild.name}:`) + robot.logger.info(JSON.stringify(membersList, null, 2)) + + const membersListString = encodeURIComponent( + JSON.stringify(membersList), + ) + + const webhookUrl = process.env.HUBOT_N8N_WEBHOOK + + const options = { + headers: { + workflowType: "member-list", + }, + } + + await axios + .get(`${webhookUrl}?membersList=${membersListString}`, options) + .then(() => { + robot.logger.info("Discord Memberlist sent to n8n") + }) + .catch((error) => { + robot.logger.info(`Memberlist failed to send: ${error.message}`) + }) + } + + const storeMemberList = async () => { + const guilds = Array.from(discordClient.guilds.cache.values()) + const guildPromises = guilds.map(handleGuild) + await Promise.all(guildPromises) + } + + storeMemberList() + } + discordClient.on("interactionCreate", async (interaction) => { if ( (interaction.isButton() && interaction.customId.startsWith("debug")) || From d0155e6ae18a96d1f93c59bafe698385316adc67 Mon Sep 17 00:00:00 2001 From: Erik Zuuring Date: Tue, 27 Jun 2023 14:58:57 +0300 Subject: [PATCH 2/2] remove logging + add global const for webhookURL --- discord-scripts/fjord.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/discord-scripts/fjord.ts b/discord-scripts/fjord.ts index 1934012f..5180a4ae 100644 --- a/discord-scripts/fjord.ts +++ b/discord-scripts/fjord.ts @@ -12,6 +12,7 @@ import { Robot } from "hubot" // This is the WIP discord implementation of commands to trigger certain workflows on the thesis n8n platform. Most of the integration uses webhooks and chat commands with response headers . export default async function manageFjord(discordClient: Client, robot: Robot) { const { application } = discordClient + const webhookUrl = process.env.HUBOT_N8N_WEBHOOK if (application) { const existingFjordCommand = (await application.commands.fetch()).find( @@ -141,15 +142,10 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { }) }) - robot.logger.info(`Members of ${guild.name}:`) - robot.logger.info(JSON.stringify(membersList, null, 2)) - const membersListString = encodeURIComponent( JSON.stringify(membersList), ) - const webhookUrl = process.env.HUBOT_N8N_WEBHOOK - const options = { headers: { workflowType: "member-list", @@ -219,7 +215,6 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { const repositoryOwner = repositoryOwnerOption.value const repositoryName = repositoryNameOption.value - const webhookUrl = process.env.HUBOT_N8N_WEBHOOK const queryParams = new URLSearchParams({ repositoryOwner, repositoryName, @@ -272,7 +267,6 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { const repositoryOwner = repositoryOwnerOption.value const repositoryName = repositoryNameOption.value - const webhookUrl = process.env.HUBOT_N8N_WEBHOOK const queryParams = new URLSearchParams({ repositoryOwner, repositoryName, @@ -326,7 +320,6 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { const repositoryOwner = repositoryOwnerOption.value const repositoryName = repositoryNameOption.value - const webhookUrl = process.env.HUBOT_N8N_WEBHOOK const queryParams = new URLSearchParams({ repositoryOwner, repositoryName, @@ -376,7 +369,6 @@ export default async function manageFjord(discordClient: Client, robot: Robot) { ) { const workflowName = workflowNameOption.value - const webhookUrl = process.env.HUBOT_N8N_WEBHOOK const queryParams = new URLSearchParams({ workflowName, })