diff --git a/packages/nodes-base/nodes/Discord/v2/actions/message/send.operation.ts b/packages/nodes-base/nodes/Discord/v2/actions/message/send.operation.ts index 38968bd1887e2..7e761614a6928 100644 --- a/packages/nodes-base/nodes/Discord/v2/actions/message/send.operation.ts +++ b/packages/nodes-base/nodes/Discord/v2/actions/message/send.operation.ts @@ -4,7 +4,7 @@ import type { INodeExecutionData, INodeProperties, } from 'n8n-workflow'; -import { NodeOperationError } from 'n8n-workflow'; +import { NodeApiError, NodeOperationError } from 'n8n-workflow'; import { updateDisplayOptions } from '../../../../../utils/utilities'; import { discordApiMultiPartRequest, discordApiRequest } from '../../transport'; import { @@ -16,7 +16,6 @@ import { import { checkAccessToChannel, - checkIfUserGuildMember, parseDiscordError, prepareEmbeds, prepareErrorData, @@ -168,7 +167,23 @@ export async function execute( }) as string; if (isOAuth2) { - await checkIfUserGuildMember.call(this, guildId, userId, i); + try { + await discordApiRequest.call(this, 'GET', `/guilds/${guildId}/members/${userId}`); + } catch (error) { + if (error instanceof NodeApiError && error.httpCode === '404') { + throw new NodeOperationError( + this.getNode(), + `User with the id ${userId} is not a member of the selected guild`, + { + itemIndex: i, + }, + ); + } + + throw new NodeOperationError(this.getNode(), error, { + itemIndex: i, + }); + } } channelId = ( diff --git a/packages/nodes-base/nodes/Discord/v2/helpers/utils.ts b/packages/nodes-base/nodes/Discord/v2/helpers/utils.ts index 4d964f2ebb179..b3852f9527a4b 100644 --- a/packages/nodes-base/nodes/Discord/v2/helpers/utils.ts +++ b/packages/nodes-base/nodes/Discord/v2/helpers/utils.ts @@ -271,37 +271,6 @@ export async function checkAccessToChannel( checkAccessToGuild(this.getNode(), guildId, userGuilds, itemIndex); } -export async function checkIfUserGuildMember( - this: IExecuteFunctions, - guildId: string, - userId: string, - itemIndex = 0, -) { - let lastUserId; - let members; - - while (true) { - members = (await discordApiRequest.call(this, 'GET', `/guilds/${guildId}/members`, undefined, { - limit: 100, - after: lastUserId, - })) as Array<{ user: { id: string } }>; - - if (!members?.length) { - throw new NodeOperationError( - this.getNode(), - `User with the id ${userId} is not a member of the selected guild`, - { - itemIndex, - }, - ); - } else if (members.some((member) => member.user.id === userId)) { - break; - } else { - lastUserId = members[members.length - 1].user.id; - } - } -} - export async function setupChannelGetter(this: IExecuteFunctions, userGuilds: IDataObject[]) { const isOAuth2 = this.getNodeParameter('authentication', 0) === 'oAuth2';