diff options
| author | Fuwn <[email protected]> | 2025-10-03 12:38:40 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-10-03 12:38:40 -0700 |
| commit | 6ce3edd9c2a046925c6e7a524c017143248a3814 (patch) | |
| tree | cff6ab17aea2b9588fa7142168db80c7f5754de1 /packages/interactions | |
| parent | fix(gateway:moderationAgent): Update model structure and handling guidelines (diff) | |
| download | umabotdiscord-6ce3edd9c2a046925c6e7a524c017143248a3814.tar.xz umabotdiscord-6ce3edd9c2a046925c6e7a524c017143248a3814.zip | |
feat(nsfw-apply): Add discord and server join date fields
Diffstat (limited to 'packages/interactions')
| -rw-r--r-- | packages/interactions/discord/embeds.ts | 42 | ||||
| -rw-r--r-- | packages/interactions/server.ts | 36 |
2 files changed, 66 insertions, 12 deletions
diff --git a/packages/interactions/discord/embeds.ts b/packages/interactions/discord/embeds.ts index 38dfc00..bbae714 100644 --- a/packages/interactions/discord/embeds.ts +++ b/packages/interactions/discord/embeds.ts @@ -185,23 +185,41 @@ export const createNSFWApplicationEmbed = ( applicant: { username: string; id: string; avatar?: string }, timestamp: number, isDM: boolean = true, + discordJoinDate?: string, + serverJoinDate?: string, ): DiscordEmbed => { + const fields = [ + { + name: "Applicant", + value: `<@${applicant.id}>`, + inline: true, + }, + { + name: "Timestamp", + value: `<t:${Math.floor(timestamp / 1000)}:F>`, + inline: true, + }, + ]; + + if (serverJoinDate) + fields.push({ + name: "Server Join Date", + value: `<t:${Math.floor(new Date(serverJoinDate).getTime() / 1000)}:F>`, + inline: true, + }); + + if (discordJoinDate) + fields.push({ + name: "Discord Join Date", + value: `<t:${Math.floor(new Date(discordJoinDate).getTime() / 1000)}:F>`, + inline: true, + }); + return { title: "🔞 NSFW Access Application", description: applicationContent, color: 0xff69b4, - fields: [ - { - name: "Applicant", - value: `${applicant.username} (${applicant.id})`, - inline: true, - }, - { - name: "Timestamp", - value: `<t:${Math.floor(timestamp / 1000)}:F>`, - inline: true, - }, - ], + fields, thumbnail: applicant.avatar ? { url: `https://cdn.discordapp.com/avatars/${applicant.id}/${applicant.avatar}${applicant.avatar.startsWith("a_") ? ".gif" : ".png"}?size=256`, diff --git a/packages/interactions/server.ts b/packages/interactions/server.ts index 70e9334..168a22f 100644 --- a/packages/interactions/server.ts +++ b/packages/interactions/server.ts @@ -569,12 +569,48 @@ router.post("/", async (request: Request, environment: Environment) => { avatar: interaction.member?.user?.avatar || interaction.user?.avatar, }; + let discordJoinDate: string | undefined; + let serverJoinDate: string | undefined; + + try { + const userId = interaction.member?.user?.id || interaction.user?.id; + + if (userId) { + const snowflake = BigInt(userId); + const timestamp = Number((snowflake >> 22n) + 1420070400000n); + + discordJoinDate = new Date(timestamp).toISOString(); + + if (interaction.guild_id) { + const memberResponse = await fetch( + `https://discord.com/api/v10/guilds/${interaction.guild_id}/members/${userId}`, + { + headers: { + Authorization: `Bot ${environment.DISCORD_TOKEN}`, + }, + }, + ); + + if (memberResponse.ok) { + const memberData = await memberResponse.json(); + + if (memberData.joined_at) + serverJoinDate = memberData.joined_at; + } + } + } + } catch (error) { + console.error("Error fetching join dates:", error); + } + const isDM = !interaction.guild_id; const applicationEmbed = createNSFWApplicationEmbed( applicationMessage, applicant, Date.now(), isDM, + discordJoinDate, + serverJoinDate, ); const success = await sendNSFWApplicationToChannel( environment, |