diff options
author | megumin <megumin.bakaretsurie@gmail.com> | 2022-11-11 22:50:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 23:50:09 +0100 |
commit | 30ca4f1cf9cc1a4179f5c7ef5cfb47eaff83f56a (patch) | |
tree | 8ee2a9e7f83ba8c3c2441636e5d122de3aa663b4 /src/api | |
parent | 62e0787cf25a76881fac79b5f3df0ebda706bb21 (diff) | |
download | Vencord-30ca4f1cf9cc1a4179f5c7ef5cfb47eaff83f56a.tar.gz Vencord-30ca4f1cf9cc1a4179f5c7ef5cfb47eaff83f56a.tar.bz2 Vencord-30ca4f1cf9cc1a4179f5c7ef5cfb47eaff83f56a.zip |
feat: Badge API (#206)
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/Badges.ts | 100 | ||||
-rw-r--r-- | src/api/index.ts | 7 |
2 files changed, 106 insertions, 1 deletions
diff --git a/src/api/Badges.ts b/src/api/Badges.ts new file mode 100644 index 0000000..542f78d --- /dev/null +++ b/src/api/Badges.ts @@ -0,0 +1,100 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { User } from "discord-types/general"; +import { HTMLProps } from "react"; + +export enum BadgePosition { + START, + END +} + +export interface ProfileBadge { + /** The tooltip to show on hover */ + tooltip: string; + /** The custom image to use */ + image?: string; + /** Action to perform when you click the badge */ + onClick?(): void; + /** Should the user display this badge? */ + shouldShow?(userInfo: BadgeUserArgs): boolean; + /** Optional props (e.g. style) for the badge */ + props?: HTMLProps<HTMLImageElement>; + /** Insert at start or end? */ + position?: BadgePosition; + + /** The badge name to display. Discord uses this, but we don't. */ + key?: string; +} + +const Badges = new Set<ProfileBadge>(); + +/** + * Register a new badge with the Badges API + * @param badge The badge to register + */ +export function addBadge(badge: ProfileBadge) { + Badges.add(badge); +} + +/** + * Unregister a badge from the Badges API + * @param badge The badge to remove + */ +export function removeBadge(badge: ProfileBadge) { + return Badges.delete(badge); +} + +/** + * Inject badges into the profile badges array. + * You probably don't need to use this. + */ +export function inject(badgeArray: ProfileBadge[], args: BadgeUserArgs) { + for (const badge of Badges) { + if (!badge.shouldShow || badge.shouldShow(args)) { + badge.position === BadgePosition.START + ? badgeArray.unshift(badge) + : badgeArray.push(badge); + } + } + return badgeArray; +} + +export interface BadgeUserArgs { + user: User; + profile: Profile; + premiumSince: Date; + premiumGuildSince?: Date; +} + +interface ConnectedAccount { + type: string; + id: string; + name: string; + verified: boolean; +} + +interface Profile { + connectedAccounts: ConnectedAccount[]; + premiumType: number; + premiumSince: string; + premiumGuildSince?: any; + lastFetched: number; + profileFetchFailed: boolean; + application?: any; +} diff --git a/src/api/index.ts b/src/api/index.ts index 73dafc9..bde4b3e 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -16,6 +16,7 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +import * as $Badges from "./Badges"; import * as $Commands from "./Commands"; import * as $DataStore from "./DataStore"; import * as $MessageAccessories from "./MessageAccessories"; @@ -57,5 +58,9 @@ const DataStore = $DataStore; * An API allowing you to add custom components as message accessories */ const MessageAccessories = $MessageAccessories; +/** + * An API allowing you to add badges to user profiles + */ +const Badges = $Badges; -export { Commands,DataStore, MessageAccessories, MessageEvents, Notices }; +export { Badges, Commands, DataStore, MessageAccessories, MessageEvents, Notices }; |