aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/apiBadges.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/apiBadges.tsx')
-rw-r--r--src/plugins/apiBadges.tsx93
1 files changed, 92 insertions, 1 deletions
diff --git a/src/plugins/apiBadges.tsx b/src/plugins/apiBadges.tsx
index e26a7a1..831bf86 100644
--- a/src/plugins/apiBadges.tsx
+++ b/src/plugins/apiBadges.tsx
@@ -17,9 +17,16 @@
*/
import { BadgePosition, ProfileBadge } from "../api/Badges";
+import DonateButton from "../components/DonateButton";
+import ErrorBoundary from "../components/ErrorBoundary";
+import { Flex } from "../components/Flex";
+import { Heart } from "../components/Heart";
import { Devs } from "../utils/constants";
import IpcEvents from "../utils/IpcEvents";
+import Logger from "../utils/Logger";
+import { closeModal, Modals, openModal } from "../utils/modal";
import definePlugin from "../utils/types";
+import { Forms, Margins } from "../webpack/common";
const CONTRIBUTOR_BADGE = "https://media.discordapp.net/stickers/1026517526106087454.webp";
@@ -40,6 +47,8 @@ const ContributorBadge: ProfileBadge = {
onClick: () => VencordNative.ipc.invoke(IpcEvents.OPEN_EXTERNAL, "https://github.com/Vendicated/Vencord")
};
+const DonorBadges = {} as Record<string, Pick<ProfileBadge, "image" | "tooltip">>;
+
export default definePlugin({
name: "BadgeAPI",
description: "API to add badges to users.",
@@ -64,7 +73,89 @@ export default definePlugin({
}
}
],
- start() {
+
+ async start() {
Vencord.Api.Badges.addBadge(ContributorBadge);
+ const badges = await fetch("https://gist.githubusercontent.com/Vendicated/51a3dd775f6920429ec6e9b735ca7f01/raw/badges.csv").then(r => r.text());
+ const lines = badges.trim().split("\n");
+ if (lines.shift() !== "id,tooltip,image") {
+ new Logger("BadgeAPI").error("Invalid badges.csv file!");
+ return;
+ }
+ for (const line of lines) {
+ const [id, tooltip, image] = line.split(",");
+ DonorBadges[id] = { image, tooltip };
+ }
},
+
+ addDonorBadge(badges: ProfileBadge[], userId: string) {
+ const badge = DonorBadges[userId];
+ if (badge) {
+ badges.unshift({
+ ...badge,
+ position: BadgePosition.START,
+ props: {
+ style: {
+ borderRadius: "50%",
+ transform: "scale(0.9)" // The image is a bit too big compared to default badges
+ }
+ },
+ onClick() {
+ const modalKey = openModal(props => (
+ <ErrorBoundary noop onError={() => {
+ closeModal(modalKey);
+ VencordNative.ipc.invoke(IpcEvents.OPEN_EXTERNAL, "https://github.com/sponsors/Vendicated");
+ }}>
+ <Modals.ModalRoot {...props}>
+ <Modals.ModalHeader>
+ <Flex style={{ width: "100%", justifyContent: "center" }}>
+ <Forms.FormTitle
+ tag="h2"
+ style={{
+ width: "100%",
+ textAlign: "center",
+ margin: 0
+ }}
+ >
+ <Heart />
+ Vencord Donor
+ </Forms.FormTitle>
+ </Flex>
+ </Modals.ModalHeader>
+ <Modals.ModalContent>
+ <Flex>
+ <img
+ role="presentation"
+ src="https://cdn.discordapp.com/emojis/1026533070955872337.png"
+ alt=""
+ style={{ margin: "auto" }}
+ />
+ <img
+ role="presentation"
+ src="https://cdn.discordapp.com/emojis/1026533090627174460.png"
+ alt=""
+ style={{ margin: "auto" }}
+ />
+ </Flex>
+ <div style={{ padding: "1em" }}>
+ <Forms.FormText>
+ This Badge is a special perk for Vencord Donors
+ </Forms.FormText>
+ <Forms.FormText className={Margins.marginTop20}>
+ Please consider supporting the development of Vencord by becoming a donor. It would mean a lot!!
+ </Forms.FormText>
+ </div>
+ </Modals.ModalContent>
+ <Modals.ModalFooter>
+ <Flex style={{ width: "100%", justifyContent: "center" }}>
+ <DonateButton />
+ </Flex>
+ </Modals.ModalFooter>
+ </Modals.ModalRoot>
+ </ErrorBoundary>
+ ));
+ },
+ });
+ }
+ }
});