/*
* 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");
}
});