summaryrefslogtreecommitdiff
path: root/packages/interactions
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-03 12:38:40 -0700
committerFuwn <[email protected]>2025-10-03 12:38:40 -0700
commit6ce3edd9c2a046925c6e7a524c017143248a3814 (patch)
treecff6ab17aea2b9588fa7142168db80c7f5754de1 /packages/interactions
parentfix(gateway:moderationAgent): Update model structure and handling guidelines (diff)
downloadumabotdiscord-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.ts42
-rw-r--r--packages/interactions/server.ts36
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,