From 501c92c3500c90d299cf81c61bb6379be9070e0b Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Sun, 28 Sep 2025 20:47:31 +0200 Subject: [PATCH] Send discord message at every profile creation --- backend/api/src/create-user.ts | 12 +++++++++++- common/src/discord/core.ts | 18 ++++++++++++++++++ common/src/secrets.ts | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 common/src/discord/core.ts diff --git a/backend/api/src/create-user.ts b/backend/api/src/create-user.ts index 9c1c31e3..bde7c0e6 100644 --- a/backend/api/src/create-user.ts +++ b/backend/api/src/create-user.ts @@ -13,6 +13,7 @@ import {createSupabaseDirectClient} from 'shared/supabase/init' import {insert} from 'shared/supabase/utils' import {convertPrivateUser, convertUser} from 'common/supabase/users' import {getBucket} from "shared/firebase-utils"; +import {sendDiscordNewUser} from "common/discord/core"; export const createUser: APIHandler<'create-user'> = async ( props, @@ -123,7 +124,16 @@ export const createUser: APIHandler<'create-user'> = async ( log('created user ', {username: user.username, firebaseId: auth.uid}) const continuation = async () => { - await track(auth.uid, 'create profile', {username: user.username}) + try { + await track(auth.uid, 'create profile', {username: user.username}) + } catch (e) { + console.log('Failed to track create profile', e) + } + try { + await sendDiscordNewUser(user) + } catch (e) { + console.log('Failed to send discord new user', e) + } } return { diff --git a/common/src/discord/core.ts b/common/src/discord/core.ts new file mode 100644 index 00000000..1d00cbbc --- /dev/null +++ b/common/src/discord/core.ts @@ -0,0 +1,18 @@ +import {User} from "common/user"; + +export const sendDiscordNewUser = async (user: User) => { + const webhookUrl = process.env.DISCORD_WEBHOOK_NEW_USERS + + if (!webhookUrl) return + + const response = await fetch(webhookUrl!, { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({content: `**${user.name}** just created a profile at https://www.compassmeet.com/${user.username}`}), + }) + + if (!response.ok) { + const text = await response.text() + console.error(text) + } +} \ No newline at end of file diff --git a/common/src/secrets.ts b/common/src/secrets.ts index 43d9cc75..06f4c1ae 100644 --- a/common/src/secrets.ts +++ b/common/src/secrets.ts @@ -18,6 +18,7 @@ export const secrets = ( 'RESEND_KEY', 'COMPASS_API_KEY', 'NEXT_PUBLIC_FIREBASE_API_KEY', + 'DISCORD_WEBHOOK_NEW_USERS', // Some typescript voodoo to keep the string literal types while being not readonly. ] as const ).concat()