diff options
Diffstat (limited to 'packages/interactions/server.ts')
| -rw-r--r-- | packages/interactions/server.ts | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/packages/interactions/server.ts b/packages/interactions/server.ts index d120f1a..cc276c9 100644 --- a/packages/interactions/server.ts +++ b/packages/interactions/server.ts @@ -25,6 +25,7 @@ import { createComplaintEmbed, createAppealEmbed, createNSFWApplicationEmbed, + createAgeVerificationLogEmbed, createRoleDistributionEmbed, } from "./discord/embeds.ts"; import { JSONResponse } from "./discord/responses.ts"; @@ -35,6 +36,7 @@ const router = AutoRouter(); const COMPLAINT_CHANNEL_ID = "1415868433714778204"; const APPEAL_CHANNEL_ID = "1420340807931531385"; const NSFW_APPLY_CHANNEL_ID = "1423148301221625926"; +const AGE_VERIFY_LOG_CHANNEL_ID = "1406422619934167106"; const VERIFIED_ROLEPLAY_ROLE_ID = "1418311833303122021"; const ROLE_MANAGER_ROLE_ID = "1410993207608873070"; const ART_MEDIA_ROLE_ID = "1410333831281643630"; @@ -96,6 +98,32 @@ const sendNSFWApplicationToChannel = async ( } }; +const sendAgeVerificationLogToChannel = async ( + environment: Environment, + embed: DiscordEmbed, +): Promise<boolean> => { + const url = `https://discord.com/api/v10/channels/${AGE_VERIFY_LOG_CHANNEL_ID}/messages`; + + try { + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bot ${environment.DISCORD_TOKEN}`, + }, + body: JSON.stringify({ + embeds: [embed], + }), + }); + + return response.ok; + } catch (error) { + console.error("Error sending age verification log to channel:", error); + + return false; + } +}; + const sendAppealToChannel = async ( environment: Environment, embed: DiscordEmbed, @@ -831,13 +859,14 @@ router.post("/", async (request: Request, environment: Environment) => { const action = interaction.data.options?.[0]?.value as string; const targetUserID = interaction.data.options?.[1]?.value as string; const access = interaction.data.options?.[2]?.value as string; + const reason = interaction.data.options?.[3]?.value as string; - if (!action || !targetUserID || !access) + if (!action || !targetUserID || !access || !reason) return new JSONResponse({ type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, data: { content: - "❌ Missing required parameters. Please provide action, user, and access type.", + "❌ Missing required parameters. Please provide action, user, access type, and reason.", flags: 64, }, }); @@ -937,6 +966,34 @@ router.post("/", async (request: Request, environment: Environment) => { const accessTypeName = access === "art_media" ? "Art & Media" : "Roleplay NSFW"; + const moderator = { + username: + interaction.member?.user?.username || + interaction.user?.username || + "Unknown", + id: + interaction.member?.user?.id || interaction.user?.id || "Unknown", + avatar: + interaction.member?.user?.avatar || interaction.user?.avatar, + }; + const logEmbed = createAgeVerificationLogEmbed( + action, + { + username: targetMember.user?.username || "Unknown", + id: targetUserID, + avatar: targetMember.user?.avatar, + }, + accessTypeName, + reason, + moderator, + Date.now(), + ); + + try { + await sendAgeVerificationLogToChannel(environment, logEmbed); + } catch (logError) { + console.error("Failed to log age verification:", logError); + } return new JSONResponse({ type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, |