From 3135ec7415381d835ba38571d65c5310da49cc08 Mon Sep 17 00:00:00 2001 From: Tarrgon <61888458+Tarrgon@users.noreply.github.com> Date: Fri, 30 May 2025 13:39:13 -0400 Subject: [PATCH] Recursive alt check --- src/events/handle-member-join.ts | 42 +++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/events/handle-member-join.ts b/src/events/handle-member-join.ts index 6fe9dcc..09518a1 100644 --- a/src/events/handle-member-join.ts +++ b/src/events/handle-member-join.ts @@ -6,23 +6,41 @@ export async function handleMemberJoin(member: GuildMember) { const guildSettings = await Database.getGuildSettings(member.guild.id); if (guildSettings?.new_member_channel_id) { - const e621UserIds = await Database.getE621Ids(member.id); const channel = await member.guild.channels.fetch(guildSettings.new_member_channel_id) as GuildTextBasedChannel; if (channel) { - let content = `${member.toString()}'s e621 and discord account(s):\n`; - - for (const e621Id of e621UserIds) { - content += `- ${config.E621_BASE_URL}/users/${e621Id}\n`; - - const discordIds = await Database.getDiscordIds(e621Id); - - for (const discordId of discordIds) { - content += `- - <@${discordId}>\n`; - } - } + const content = `${member.toString()}'s e621 and discord account(s):\n${await getE621Alts(member.id)}`; channel.send(content).catch(console.error); } } +} + +async function getE621Alts(discordId: string, depth = 1, ignore: number[] = []): Promise { + const e621UserIds = await Database.getE621Ids(discordId); + + const toIgnore = ignore.concat(e621UserIds); + + let content = ''; + + for (const e621Id of e621UserIds) { + if (ignore.includes(e621Id)) continue; + content += `${'- '.repeat(depth)}${config.E621_BASE_URL}/users/${e621Id}\n${await getDiscordAlts(e621Id, depth + 1, toIgnore)}`; + } + + return content; +} + +async function getDiscordAlts(e621Id: number, depth = 1, ignore: number[] = []): Promise { + const discordIds = await Database.getDiscordIds(e621Id); + + let content = ''; + + for (const discordId of discordIds) { + const alts = await getE621Alts(discordId, depth + 1, ignore); + + if (alts) content += `${'- '.repeat(depth)}<@${discordId}>\n${alts}`; + } + + return content; } \ No newline at end of file