diff --git a/.gitea/kubernetes/backend/sealed-secret.yaml b/.gitea/kubernetes/backend/sealed-secret.yaml index 4060137..3b51b19 100644 --- a/.gitea/kubernetes/backend/sealed-secret.yaml +++ b/.gitea/kubernetes/backend/sealed-secret.yaml @@ -7,7 +7,8 @@ metadata: namespace: public-services spec: encryptedData: - MONGO_URI: AgCUTvItz+Z7ZwWJZuNmdYtNmXPLjxf+48wydwwewJ7AZshoVQSfTNTU+Cu09p6NC9EXCOwsPYQuAqor81puHh/LbYDhdFaGDXWXGg6R6ELPQkU4hDTvIiNyTdeNhn5tFNMdsqwkrsdxjrfMsH+wSHcxJpH1dTmhkEytdhElQmTVJxITtvQlxljR2i9vV87TqYp2ebaBqcj3bGX/pfGLqImOPFJMw8TZ8N1jOxEtLOS9RJJL2YnJP4WH4OQhC+FIb1gQ8N7SI2CMj5Mqt8sdxrGnPBznUGJDEED2Vv7uqRTt/4Kysfv9DN1FpyifiWjGx61tLjS9WfsBoF12JiUFEcpBhBsWHhPjBeyWd6N9LWflDCB47eTLQt/HbarRnjtFpD04jrhv7XXF8YzOtjQDhVqhRDUdybt7LjN4VGw8P4mXf7JinwV4G49orsb561yas5xSTtZgL0t0uI0OTH+AYsiyB8Q9jWlJmdKTCM0gFU19uV+fPKC6UWN9gHXX9p5KK7ZX10I2UnH3knqa/OCGFj96C6RGN4cQlErnhjCrmlyfdcFiET6vgIaYnCbv1IxwpzlooqtWfmXqpmFfshfPWPdGuEqGOBaPmFYNwXaXVKsigv8gKIbWTl+ZhEnAN51wDYVRGT36fh8KM98I1ZcaRJKYJcz8I7+MnmEUDG97boWDe0wi6dY+INnQErsxcJ9W37d3BmEB0o0PS0yKA4lJXXWByS6T8AUpUidHCgufglQIuDXo1nBqVPoSOQg0OAq/kn4zUvfbw2+l0aZKrm0UILd5ZwAuAciJ/x7XtvcGfrYEJUpN/1DC5qL4J8s= + MONGO_URI: AgBZ4poRziaXwQLAspWQkgxQIKTYVq2w1fPBSbOBugso2kk5S6UpYo2MXD4F/ERDZM82p41yoNbwA5D8qPkAXlm7rdhiJI9PA410m/96eSFtE1UHNX0KXqrK/ay+ck9G2gjXv2osvrKphAgMy2k/PKbDDUE8p4iHVqDrzpTb5O1JvPg9Lcdv3kHZQL/wFWQDI1hzjL3W8ZkdeyNM81y20aG/is66rIcRukPPcg3rPfhLIcXmNlw6ows3SZqgN4QNWrUpT3pwaxySj4v1UbusH/HQGpdAcR0AjpTfIdG7o0+wBQPCeUMDMowvIyXQn/3rfeVG0mPSwEceJPhJ527YOcd91E693/c2QZKwG0slXnDSfKcrkiVeM7Mirjz6HHm5GQnFOUz7/i0Dttb8U56HGepqLJ8xcYFE5VWy/vzfmqD9bADHw9Ivk5lfXaKgrBWYQS7GNy8h9XISIszcQdkfz6cDhErl9iU6POYX2YnU1mxl3mSOPPM3efxJ/bm0PAZA8Ezyo6ww1P96QCbUCfZt/Ju1OYVvkwBGrJfo0bXx6x5yzd9Y22EKGoo3hTcoFbRzangVjf0/Vvu9EibC3UNEqeB/NwD5Xo8FvSbovr/wrmH12DUWVJYzKyWLPJObF8rIpn9OI1dsHk53jpfJyfToguy6ZQwsDU18OTqXPKyz86X/h2+jSUwuTGa+ktTIm78Ff8KrQ6sFSeqtskwdvLte5pclErdiRTPSCGxUu8jeqQM9q/ytsf2flWEXqLxoTuHWe9w+kylbimm3nQclViY3dX6ib7H6TYZkQE/GfFg9C+B5PfN6MaE83hSbQW8= + TRACKED_PLAYERS_WEBHOOK: AgAObYj3o8BC0xnSOSSKzXw6ChSaAfax/X04isNQNRppygIkACuli9u0ywvcG3q0uneiqzr2XLj1gKzF1nknufn3QnPsina6LcuGsvok7HbzjSy9MSHjq+/9O+S5GSYuY5rhQIlpXXzhmt5HJjbX2KSxoq6CMaJYKTzEL1mkjWHgXnECbFHlANwJFRfCI6lUblz6Kvb3yjKAR3HAqo7P4c5YoI3N7ZBW77y+vgZiM+n7Iwpq1liFLW68gg1t8kGY/y+OeUdTfcyf4svhPg4la+gUHCLwufxfSI3vQDZcndFGBA2MPJ/Eoc2itKoBMzA66w3CQPU8nAS5qBln51OASqCsvX6/Ipd0bFZyBrU7j8jPN1gpaWOIwMEhKT2t5nmLyzXN1aaYv8vl9hY6NpFN6T2QOBFsJ849KyoXdN6wfmCV5rPL9blSLSAuS0sy4LOvR5COgsZyCwUycRb8ZLq/gg+r97ySPYliQnuVbMcoce78+YyZGZn3+5T3tRQQ/E7qx7ZEgALKXGwL97LDuTXmuV8BNT0fwnqWqR5n0ZQvjo7FuxQAC4XufBAAdsxb429qflDfpZf5PYOoDUnTdmx2g7enmBb/WDa3Vxz4LTxollRf31HtkH9d02EVP0JQZ7u3fQkeEm3RKffeyNoIy/1K3+PdaVGre8PEuPRTF0RnLYQjyVka4sbJJwX1MvR/6uQX4iKF50dWfohcnt8z44chQKQQhQbzK6tVUIbfhN3XT4b1SWbbMxVXTxxtXjVVnE85yQ7XEo9f1RHbDi3WL2MMnFBnYxwjdHWcZhiHhppIVa+lsGCoO2i+HN4BEfwWP9oecgdLhSZ4OLC9Ps+z9QzF9jDEQuMML5Hpj7zZ template: metadata: creationTimestamp: null diff --git a/bun.lockb b/bun.lockb index e9e4d8d..ac67934 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/projects/backend/package.json b/projects/backend/package.json index 60f4748..8e628b1 100644 --- a/projects/backend/package.json +++ b/projects/backend/package.json @@ -13,8 +13,9 @@ "@elysiajs/swagger": "^1.1.3", "@ssr/common": "workspace:common", "@tqman/nice-logger": "^1.0.1", - "@vercel/og": "^0.6.3", "@typegoose/typegoose": "^12.8.0", + "@vercel/og": "^0.6.3", + "discord-webhook-node": "^1.1.8", "elysia": "latest", "elysia-autoroutes": "^0.5.0", "elysia-decorators": "^1.0.2", diff --git a/projects/backend/src/common/config.ts b/projects/backend/src/common/config.ts index 3d6f845..7077c4a 100644 --- a/projects/backend/src/common/config.ts +++ b/projects/backend/src/common/config.ts @@ -1,4 +1,5 @@ export const Config = { mongoUri: process.env.MONGO_URI, apiUrl: process.env.API_URL || "https://ssr.fascinated.cc/api", + trackedPlayerWebhook: process.env.TRACKED_PLAYERS_WEBHOOK, }; diff --git a/projects/backend/src/service/player.service.ts b/projects/backend/src/service/player.service.ts index 35537a0..f0f04db 100644 --- a/projects/backend/src/service/player.service.ts +++ b/projects/backend/src/service/player.service.ts @@ -5,6 +5,10 @@ import { scoresaberService } from "@ssr/common/service/impl/scoresaber"; import ScoreSaberPlayerToken from "@ssr/common/types/token/scoresaber/score-saber-player-token"; import { InternalServerError } from "../error/internal-server-error"; import ScoreSaberPlayerScoreToken from "@ssr/common/types/token/scoresaber/score-saber-player-score-token"; +// @ts-ignore +import { MessageBuilder, Webhook } from "discord-webhook-node"; +import { Config } from "../common/config"; +import { formatPp } from "@ssr/common/utils/number-utils"; export class PlayerService { /** @@ -34,6 +38,20 @@ export class PlayerService { player = (await PlayerModel.create({ _id: id })) as PlayerDocument; player.trackedSince = new Date(); await this.seedPlayerHistory(player, playerToken); + + const hook = new Webhook({ + url: Config.trackedPlayerWebhook, + }); + hook.setUsername("Player Tracker"); + const embed = new MessageBuilder(); + embed.setTitle("New Player Tracked"); + embed.addField("Username", playerToken.name, true); + embed.addField("ID", playerToken.id, true); + embed.addField("PP", formatPp(playerToken.pp) + "pp", true); + embed.setDescription(`https://ssr.fascinated.cc/player/${playerToken.id}`); + embed.setThumbnail(playerToken.profilePicture); + embed.setColor("#00ff00"); + await hook.send(embed); } catch (err) { const message = `Failed to create player document for "${id}"`; console.log(message, err); diff --git a/projects/website/src/components/footer.tsx b/projects/website/src/components/footer.tsx index b21b397..140edc1 100644 --- a/projects/website/src/components/footer.tsx +++ b/projects/website/src/components/footer.tsx @@ -22,6 +22,11 @@ const items: NavbarItem[] = [ link: "https://x.com/ssr_reloaded", openInNewTab: true, }, + { + name: "Discord", + link: "https://discord.gg/kmNfWGA4A8", + openInNewTab: true, + }, ]; export default function Footer() {