Skip to content

Commit

Permalink
fix: questions discord notification (#4116)
Browse files Browse the repository at this point in the history
  • Loading branch information
mariojsnunes authored Feb 1, 2025
1 parent 646f507 commit 527b477
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 30 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ jobs:
--build-secret VITE_HIDE_MEMBER_PINS_BY_DEFAULT="$VITE_HIDE_MEMBER_PINS_BY_DEFAULT"
- run:
name: Set Supabase Secrets
command: flyctl -a << parameters.FLY_APP_NAME >> secrets set SUPABASE_API_URL=$SUPABASE_API_URL SUPABASE_KEY=$SUPABASE_KEY FIREBASE_PROJECT_ID=$FIREBASE_PROJECT_ID FIREBASE_PRIVATE_KEY="$FIREBASE_PRIVATE_KEY" FIREBASE_CLIENT_EMAIL=$FIREBASE_CLIENT_EMAIL
command: flyctl -a << parameters.FLY_APP_NAME >> secrets set SUPABASE_API_URL=$SUPABASE_API_URL SUPABASE_KEY=$SUPABASE_KEY DISCORD_WEBHOOK_URL=$DISCORD_WEBHOOK_URL FIREBASE_PROJECT_ID=$FIREBASE_PROJECT_ID FIREBASE_PRIVATE_KEY="$FIREBASE_PRIVATE_KEY" FIREBASE_CLIENT_EMAIL=$FIREBASE_CLIENT_EMAIL
deploy-supabase:
docker:
- image: cimg/node:20.7.0
Expand Down
23 changes: 0 additions & 23 deletions functions/src/Integrations/firebase-discord.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,29 +126,6 @@ function sendDiscordMessage(content: string) {
})
}

export const notifyQuestionPublished = functions
.runWith({ memory: '512MB' })
.firestore.document('questions_rev20230926/{id}')
// currently, questions are immediately posted with no review.
// if that changes, this code will need to be updated.
.onCreate(async (snapshot) => {
const info = snapshot.data()
console.log(info)

const username = info._createdBy
const title = info.title
const slug = info.slug

try {
const response = await axios.post(DISCORD_WEBHOOK_URL, {
content: `❓ ${username} has a new question: ${title}\nHelp them out and answer here: <${SITE_URL}/questions/${slug}>`,
})
handleResponse(response)
} catch (error) {
handleErr(error)
}
})

const handleResponse = (res: AxiosResponse) => {
console.log('post success')
return res
Expand Down
1 change: 0 additions & 1 deletion functions/src/Integrations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ exports.notifyHowtoAwaitingModeration = Slack.notifyHowtoAwaitingModeration

exports.notifyPinPublished = Discord.notifyPinPublished
exports.notifyLibraryItemPublished = Discord.notifyLibraryItemPublished
exports.notifyQuestionPublished = Discord.notifyQuestionPublished
exports.notifyResearchUpdatePublished = Discord.notifyResearchUpdatePublished

exports.patreonAuth = Patreon.patreonAuth
27 changes: 22 additions & 5 deletions src/routes/api.questions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import { verifyFirebaseToken } from 'src/firestore/firestoreAdmin.server'
import { Question } from 'src/models/question.model'
import { ITEMS_PER_PAGE } from 'src/pages/Question/constants'
import { createSupabaseServerClient } from 'src/repository/supabase.server'
import { discordServiceServer } from 'src/services/discordService.server'
import { convertToSlug } from 'src/utils/slug'
import { SUPPORTED_IMAGE_EXTENSIONS } from 'src/utils/storage'

import type { LoaderFunctionArgs } from '@remix-run/node'
import type { SupabaseClient } from '@supabase/supabase-js'
import type { DBProfile } from 'src/models/profile.model'
import type { DBQuestion } from 'src/models/question.model'
import type { QuestionSortOption } from 'src/pages/Question/QuestionSortOptions'

Expand Down Expand Up @@ -141,23 +143,23 @@ export const action = async ({ request }: LoaderFunctionArgs) => {
},
)
}
const userRequest = await client
const profileRequest = await client
.from('profiles')
.select()
.eq('firebase_auth_id', tokenValidation.user_id)
.limit(1)

if (userRequest.error || !userRequest.data?.at(0)) {
console.log(userRequest.error)
if (profileRequest.error || !profileRequest.data?.at(0)) {
console.log(profileRequest.error)
return Response.json({}, { status: 400, statusText: 'User not found' })
}

const user = userRequest.data[0]
const profile = profileRequest.data[0] as DBProfile

const questionResult = await client
.from('questions')
.insert({
created_by: user.id,
created_by: profile.id,
title: data.title,
description: data.description,
moderation: IModerationStatus.ACCEPTED,
Expand Down Expand Up @@ -192,6 +194,8 @@ export const action = async ({ request }: LoaderFunctionArgs) => {
}
}

notifyDiscord(question, profile, new URL(request.url).origin)

return Response.json({ question }, { headers, status: 201 })
} catch (error) {
console.log(error)
Expand All @@ -202,6 +206,19 @@ export const action = async ({ request }: LoaderFunctionArgs) => {
}
}

function notifyDiscord(
question: Question,
profile: DBProfile,
siteUrl: string,
) {
const title = question.title
const slug = question.slug

discordServiceServer.postWebhookRequest(
`❓ ${profile.username} has a new question: ${title}\nHelp them out and answer here: <${siteUrl}/questions/${slug}>`,
)
}

async function isDuplicateSlug(slug: string, client: SupabaseClient) {
const { data } = await client
.from('questions')
Expand Down
25 changes: 25 additions & 0 deletions src/services/discordService.server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const postWebhookRequest = async (message: string) => {
try {
const discordWebhookUrl = process.env.DISCORD_WEBHOOK_URL as string

if (!discordWebhookUrl) {
return
}

await fetch(discordWebhookUrl as string, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
content: message,
}),
})
} catch (error) {
console.error(error)
}
}

export const discordServiceServer = {
postWebhookRequest,
}

0 comments on commit 527b477

Please sign in to comment.