diff options
| -rw-r--r-- | src/discord/embeds.ts | 23 | ||||
| -rw-r--r-- | src/server.ts | 24 |
2 files changed, 29 insertions, 18 deletions
diff --git a/src/discord/embeds.ts b/src/discord/embeds.ts index db23f80..2eeb800 100644 --- a/src/discord/embeds.ts +++ b/src/discord/embeds.ts @@ -89,6 +89,29 @@ export const createPostEmbed = (post: RedditPost): DiscordEmbed => { return embed; }; +export const createRoleDistributionEmbed = ( + roleDistribution: Array<{ name: string; count: number }>, +): DiscordEmbed => { + const totalMembers = roleDistribution.reduce( + (sum, role) => sum + role.count, + 0, + ); + + return { + title: "🎨 Colour Role Distribution", + description: `Total members with colour roles: **${totalMembers}**`, + color: 0x5865f2, + fields: roleDistribution.map((role) => ({ + name: role.name, + value: `${role.count} member${role.count !== 1 ? "s" : ""}`, + inline: true, + })), + footer: { + text: "Sorted by member count (highest to lowest)", + }, + }; +}; + export const createComplaintEmbed = ( complaintContent: string, complainant: { username: string; id: string; avatar?: string }, diff --git a/src/server.ts b/src/server.ts index ce7e8c7..2252ea7 100644 --- a/src/server.ts +++ b/src/server.ts @@ -16,7 +16,11 @@ import { } from "./reddit.ts"; import type { TimePeriod } from "./discord/types.ts"; import type { Environment, DiscordEmbed } from "./discord/interfaces.ts"; -import { createPostEmbed, createComplaintEmbed } from "./discord/embeds.ts"; +import { + createPostEmbed, + createComplaintEmbed, + createRoleDistributionEmbed, +} from "./discord/embeds.ts"; import { JSONResponse } from "./discord/responses.ts"; import { verifyDiscordRequest } from "./discord/verification.ts"; @@ -432,23 +436,7 @@ router.post("/", async (request: Request, environment: Environment) => { }, }); - const totalMembers = roleDistribution.reduce( - (sum, role) => sum + role.count, - 0, - ); - const embed: DiscordEmbed = { - title: "🎨 Colour Role Distribution", - description: `Total members with colour roles: **${totalMembers}**`, - color: 0x5865F2, - fields: roleDistribution.map((role) => ({ - name: role.name, - value: `${role.count} member${role.count !== 1 ? "s" : ""}`, - inline: true, - })), - footer: { - text: "Sorted by member count (highest to lowest)", - }, - }; + const embed = createRoleDistributionEmbed(roleDistribution); return new JSONResponse({ type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE, |