/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import { addMessageDecoration, removeMessageDecoration } from "@api/MessageDecorations"; import { Devs, EquicordDevs } from "@utils/constants"; import { isEquicordPluginDev, isPluginDev } from "@utils/misc"; import definePlugin from "@utils/types"; import { findByPropsLazy, findComponentByCodeLazy } from "@webpack"; import badges from "plugins/_api/badges"; const roleIconClassName = findByPropsLazy("roleIcon", "separator").roleIcon; const RoleIconComponent = findComponentByCodeLazy("#{intl::ROLE_ICON_ALT_TEXT}"); import "./styles.css"; import { User } from "discord-types/general"; import { JSX } from "react"; import settings from "./settings"; const discordBadges: readonly [number, string, string][] = Object.freeze([ [0, "Discord Staff", "5e74e9b61934fc1f67c65515d1f7e60d"], [1, "Partnered Server Owner", "3f9748e53446a137a052f3454e2de41e"], [2, "HypeSquad Events", "bf01d1073931f921909045f3a39fd264"], [6, "HypeSquad Bravery", "8a88d63823d8a71cd5e390baa45efa02"], [7, "HypeSquad Brilliance", "011940fd013da3f7fb926e4a1cd2e618"], [8, "HypeSquad Balance", "3aa41de486fa12454c3761e8e223442e"], [3, "Discord Bug Hunter", "2717692c7dca7289b35297368a940dd0"], [14, "Discord Bug Hunter", "848f79194d4be5ff5f81505cbd0ce1e6"], [22, "Active Developer", "6bdc42827a38498929a4920da12695d9"], [17, "Early Verified Bot Developer", "6df5892e0f35b051f8b61eace34f4967"], [9, "Early Supporter", "7060786766c9c840eb3019e725d2b358"], [18, "Moderator Programs Alumni", "fee1624003e2fee35cb398e125dc479b"] ]); function CheckBadge({ badge, author }: { badge: string; author: User; }): JSX.Element | null { switch (badge) { case "EquicordDonor": const equicordDonorBadges = badges.getEquicordDonorBadges(author.id)?.slice(0, 12); if (!equicordDonorBadges || equicordDonorBadges.length === 0) return null; return ( {equicordDonorBadges.map((badge: any) => ( ))} ); case "EquicordContributer": return isEquicordPluginDev(author.id) ? ( ) : null; case "VencordDonor": return ( {badges.getDonorBadges(author.id)?.map(badge => ( ))} ); case "VencordContributer": return isPluginDev(author.id) ? ( ) : null; case "DiscordProfile": const chatBadges = discordBadges .filter(badge => (author.flags || author.publicFlags) & (1 << badge[0])) .map(badge => ( )); return chatBadges.length > 0 ? ( {chatBadges} ) : null; case "DiscordNitro": return (author?.premiumType ?? 0) > 0 ? ( ) : null; default: return null; } } function ChatBadges({ author }: { author: User; }) { return ( {settings.store.showEquicordDonor && } {settings.store.showEquicordContributor && } {settings.store.showVencordDonor && } {settings.store.showVencordContributor && } {settings.store.showDiscordProfile && } {settings.store.showDiscordNitro && } ); } export default definePlugin({ name: "ShowBadgesInChat", authors: [Devs.Inbestigator, EquicordDevs.KrystalSkull], description: "Shows the message author's badges beside their name in chat.", dependencies: ["MessageDecorationsAPI"], settings, start: () => { addMessageDecoration("vc-show-badges-in-chat", props => props.message?.author ? : null); }, stop: () => { removeMessageDecoration("vc-show-badges-in-chat"); } });