mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-10 15:13:02 -04:00
Update To Devs and Badges Sys
This commit is contained in:
parent
e4425ca98f
commit
44109d9979
58 changed files with 295 additions and 240 deletions
|
@ -2,13 +2,15 @@
|
||||||
|
|
||||||
An enhanced version of [Vencord](https://github.com/Vendicated/Vencord) by [Vendicated](https://github.com/Vendicated) called Equicord
|
An enhanced version of [Vencord](https://github.com/Vendicated/Vencord) by [Vendicated](https://github.com/Vendicated) called Equicord
|
||||||
|
|
||||||
|
Thank you to [Suncord](https://github.com/verticalsync/Suncord) by verticalsync for letting me rob your code sometimes :3
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Third-party plugins implemented into the main build.
|
- Third-party plugins implemented into the main build.
|
||||||
- 100+ plugins built-in.
|
- 100+ plugins built-in.
|
||||||
- Some highlights: SpotifyControls, MessageLogger, Experiments, GameActivityToggle, Translate, NoTrack, QuickReply, Free Emotes/Stickers, PermissionsViewer,
|
- Some highlights: SpotifyControls, MessageLogger, Experiments, GameActivityToggle, Translate, NoTrack, QuickReply, Free Emotes/Stickers, PermissionsViewer,
|
||||||
CustomCommands, ShowHiddenChannels, PronounDB
|
CustomCommands, ShowHiddenChannels, PronounDB
|
||||||
- Fairly lightweight despite the many inbuilt plugins
|
- Fairly lightweight despite the many inbuilt plugins
|
||||||
- Works on any Discord branch: Stable, Canary or PTB all work (though for the best experience, I recommend stable!)
|
- Works on any Discord branch: Stable, Canary or PTB all work (though for the best experience, I recommend stable!)
|
||||||
|
|
|
@ -80,7 +80,9 @@ export function _getBadges(args: BadgeUserArgs) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const donorBadges = (Plugins.BadgeAPI as unknown as typeof import("../plugins/_api/badges").default).getDonorBadges(args.user.id);
|
const donorBadges = (Plugins.BadgeAPI as unknown as typeof import("../plugins/_api/badges").default).getDonorBadges(args.user.id);
|
||||||
|
const equicordDonorBadges = (Plugins.BadgeAPI as unknown as typeof import("../plugins/_api/badges").default).getEquicordDonorBadges(args.user.id);
|
||||||
if (donorBadges) badges.unshift(...donorBadges);
|
if (donorBadges) badges.unshift(...donorBadges);
|
||||||
|
if (equicordDonorBadges) badges.unshift(...equicordDonorBadges);
|
||||||
|
|
||||||
return badges;
|
return badges;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ import { useAwaiter } from "@utils/react";
|
||||||
import type { ThemeHeader } from "@utils/themes";
|
import type { ThemeHeader } from "@utils/themes";
|
||||||
import { getThemeInfo, stripBOM, type UserThemeHeader } from "@utils/themes/bd";
|
import { getThemeInfo, stripBOM, type UserThemeHeader } from "@utils/themes/bd";
|
||||||
import { usercssParse } from "@utils/themes/usercss";
|
import { usercssParse } from "@utils/themes/usercss";
|
||||||
import { findByCodeLazy, findLazy } from "@webpack";
|
import { findLazy } from "@webpack";
|
||||||
import { Button, Card, Forms, React, showToast, TabBar, Tooltip, useEffect, useMemo, useRef, useState } from "@webpack/common";
|
import { Button, Card, Forms, React, showToast, TabBar, Tooltip, useEffect, useMemo, useRef, useState } from "@webpack/common";
|
||||||
import type { ComponentType, Ref, SyntheticEvent } from "react";
|
import type { ComponentType, Ref, SyntheticEvent } from "react";
|
||||||
import type { UserstyleHeader } from "usercss-meta";
|
import type { UserstyleHeader } from "usercss-meta";
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "VCSupport",
|
name: "VCSupport",
|
||||||
description: "Wumpus Dance + Support Warning",
|
description: "Wumpus Dance + Support Warning",
|
||||||
authors: [Devs.thororen],
|
authors: [EquicordDevs.thororen],
|
||||||
});
|
});
|
||||||
|
|
|
@ -35,4 +35,4 @@ export function Timer({ time }: Readonly<{ time: number; }>) {
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,4 +23,4 @@ export function TimerIcon({ height = 16, width = 16, className }: Readonly<{
|
||||||
C425,186.896,387.944,124.958,332.229,90.04z M355,272.5H212.5V130h30v112.5H355V272.5z"/>
|
C425,186.896,387.944,124.958,332.229,90.04z M355,272.5H212.5V130h30v112.5H355V272.5z"/>
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { FluxDispatcher, GuildStore, UserStore } from "@webpack/common";
|
import { FluxDispatcher, GuildStore, UserStore } from "@webpack/common";
|
||||||
import { PassiveUpdateState, VoiceState } from "@webpack/types";
|
import { PassiveUpdateState, VoiceState } from "@webpack/types";
|
||||||
|
@ -101,7 +101,7 @@ let runOneTime = true;
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "AllCallTimers",
|
name: "AllCallTimers",
|
||||||
description: "Add call timer to all users in a server voice channel.",
|
description: "Add call timer to all users in a server voice channel.",
|
||||||
authors: [Devs.MaxHerbold, Devs.D3SOX],
|
authors: [EquicordDevs.MaxHerbold, Devs.D3SOX],
|
||||||
|
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
|
|
||||||
export function TimerText({ text, className }: Readonly<{ text: string; className: string; }>) {
|
export function TimerText({ text, className }: Readonly<{ text: string; className: string; }>) {
|
||||||
return <div className={`timeCounter ${className}`} style={{
|
return <div className={`timeCounter ${className}`} style={{
|
||||||
marginTop: -6, // this margin value doesn't change the default size of the user container
|
marginTop: -6, // this margin value doesn't change the default size of the user container
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
fontFamily: "monospace",
|
fontFamily: "monospace",
|
||||||
fontSize: 11, // good size that doesn't touch username
|
fontSize: 11, // good size that doesn't touch username
|
||||||
position: "relative",
|
position: "relative",
|
||||||
}}>{text}</div>;
|
}}>{text}</div>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
import { addPreSendListener, MessageExtra, removePreSendListener } from "@api/MessageEvents";
|
import { addPreSendListener, MessageExtra, removePreSendListener } from "@api/MessageEvents";
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Flex } from "@components/Flex";
|
import { Flex } from "@components/Flex";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import { isNonNullish } from "@utils/guards";
|
import { isNonNullish } from "@utils/guards";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { Alerts, GuildStore, PermissionsBits, PermissionStore } from "@webpack/common";
|
import { Alerts, GuildStore, PermissionsBits, PermissionStore } from "@webpack/common";
|
||||||
|
@ -17,7 +17,7 @@ import { AllowedMentions, AllowedMentionsBar, AllowedMentionsProps, AllowedMenti
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "AllowedMentions",
|
name: "AllowedMentions",
|
||||||
authors: [Devs.arHSM, Devs.amia],
|
authors: [EquicordDevs.arHSM, Devs.amia],
|
||||||
description: "Fine grained control over whom to ping when sending or editing a message.",
|
description: "Fine grained control over whom to ping when sending or editing a message.",
|
||||||
dependencies: ["MessageEventsAPI"],
|
dependencies: ["MessageEventsAPI"],
|
||||||
settings: definePluginSettings({
|
settings: definePluginSettings({
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Clipboard, Menu, showToast, Toasts } from "@webpack/common";
|
import { Clipboard, Menu, showToast, Toasts } from "@webpack/common";
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ function getEmojiFormattedString(target: Target): string {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "CopyEmojiAsString",
|
name: "CopyEmojiAsString",
|
||||||
description: "Add's button to copy emoji as formatted string!",
|
description: "Add's button to copy emoji as formatted string!",
|
||||||
authors: [Devs.HAPPY_ENDERMAN, Devs.VISHNYA_NET_CHERESHNYA],
|
authors: [EquicordDevs.HAPPY_ENDERMAN, EquicordDevs.VISHNYA_NET_CHERESHNYA],
|
||||||
contextMenus: {
|
contextMenus: {
|
||||||
"expression-picker"(children, { target }: { target: Target; }) {
|
"expression-picker"(children, { target }: { target: Target; }) {
|
||||||
if (target.dataset.type !== "emoji") return;
|
if (target.dataset.type !== "emoji") return;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Clipboard, Menu } from "@webpack/common";
|
import { Clipboard, Menu } from "@webpack/common";
|
||||||
import type { Channel, User } from "discord-types/general";
|
import type { Channel, User } from "discord-types/general";
|
||||||
|
@ -45,7 +45,7 @@ const UserContextMenuPatch: NavContextMenuPatchCallback = (children, { user }: U
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "CopyUserMention",
|
name: "CopyUserMention",
|
||||||
authors: [Devs.Cortex, Devs.castdrian],
|
authors: [EquicordDevs.Cortex, Devs.castdrian],
|
||||||
description: "Adds a button to copy user's mention on the user context menu, works best with ValidUser.",
|
description: "Adds a button to copy user's mention on the user context menu, works best with ValidUser.",
|
||||||
contextMenus: {
|
contextMenus: {
|
||||||
"user-context": UserContextMenuPatch
|
"user-context": UserContextMenuPatch
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Link } from "@components/Link";
|
import { Link } from "@components/Link";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { localStorage } from "@utils/localStorage";
|
import { localStorage } from "@utils/localStorage";
|
||||||
import { closeAllModals, openModal } from "@utils/modal";
|
import { closeAllModals, openModal } from "@utils/modal";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
@ -51,7 +51,7 @@ function removeAppIcon() {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "CustomAppIcons",
|
name: "CustomAppIcons",
|
||||||
description: "Add/upload custom (In-)App Icons.",
|
description: "Add/upload custom (In-)App Icons.",
|
||||||
authors: [Devs.HAPPY_ENDERMAN, Devs.SerStars],
|
authors: [EquicordDevs.HAPPY_ENDERMAN, EquicordDevs.SerStars],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: ".PremiumUpsellTypes.APP_ICON_UPSELL",
|
find: ".PremiumUpsellTypes.APP_ICON_UPSELL",
|
||||||
|
@ -99,12 +99,12 @@ export default definePlugin({
|
||||||
<><Forms.FormTitle>
|
<><Forms.FormTitle>
|
||||||
<Forms.FormTitle>How to use?</Forms.FormTitle>
|
<Forms.FormTitle>How to use?</Forms.FormTitle>
|
||||||
</Forms.FormTitle>
|
</Forms.FormTitle>
|
||||||
<Forms.FormText>
|
<Forms.FormText>
|
||||||
<Forms.FormText>Go to <Link href="/settings/appearance" onClick={e => { e.preventDefault(); closeAllModals(); FluxDispatcher.dispatch({ type: "USER_SETTINGS_MODAL_SET_SECTION", section: "Appearance" }); }}>Appearance Settings</Link> tab.</Forms.FormText>
|
<Forms.FormText>Go to <Link href="/settings/appearance" onClick={e => { e.preventDefault(); closeAllModals(); FluxDispatcher.dispatch({ type: "USER_SETTINGS_MODAL_SET_SECTION", section: "Appearance" }); }}>Appearance Settings</Link> tab.</Forms.FormText>
|
||||||
<Forms.FormText>Scroll down to "In-app Icons" and click on "Preview App Icon".</Forms.FormText>
|
<Forms.FormText>Scroll down to "In-app Icons" and click on "Preview App Icon".</Forms.FormText>
|
||||||
<Forms.FormText>And upload your own custom icon!</Forms.FormText>
|
<Forms.FormText>And upload your own custom icon!</Forms.FormText>
|
||||||
<Forms.FormText>You can only use links when you are uploading your Custom Icon.</Forms.FormText>
|
<Forms.FormText>You can only use links when you are uploading your Custom Icon.</Forms.FormText>
|
||||||
</Forms.FormText></>
|
</Forms.FormText></>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType, StartAt } from "@utils/types";
|
import definePlugin, { OptionType, StartAt } from "@utils/types";
|
||||||
import { Forms, Menu, TextInput, useState } from "@webpack/common";
|
import { Forms, Menu, TextInput, useState } from "@webpack/common";
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ const settings = definePluginSettings({
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "CustomScreenShare",
|
name: "CustomScreenShare",
|
||||||
description: "Stream any resolution and any FPS!",
|
description: "Stream any resolution and any FPS!",
|
||||||
authors: [Devs.KawaiianPizza],
|
authors: [EquicordDevs.KawaiianPizza],
|
||||||
settingsAboutComponent: () => (
|
settingsAboutComponent: () => (
|
||||||
<Forms.FormSection>
|
<Forms.FormSection>
|
||||||
<Forms.FormTitle tag="h3">Usage</Forms.FormTitle>
|
<Forms.FormTitle tag="h3">Usage</Forms.FormTitle>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
import { definePluginSettings, migratePluginSettings } from "@api/Settings";
|
import { definePluginSettings, migratePluginSettings } from "@api/Settings";
|
||||||
import { disableStyle, enableStyle } from "@api/Styles";
|
import { disableStyle, enableStyle } from "@api/Styles";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
import styles from "./style.css?managed";
|
import styles from "./style.css?managed";
|
||||||
|
@ -54,7 +54,7 @@ migratePluginSettings("DoNotLeak", "Do Not Leak!");
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "DoNotLeak",
|
name: "DoNotLeak",
|
||||||
description: "Hide all message contents and attachments when you're streaming or sharing your screen.",
|
description: "Hide all message contents and attachments when you're streaming or sharing your screen.",
|
||||||
authors: [Devs.Perny],
|
authors: [EquicordDevs.Perny],
|
||||||
settings,
|
settings,
|
||||||
start() {
|
start() {
|
||||||
document.addEventListener("keyup", keyUpHandler);
|
document.addEventListener("keyup", keyUpHandler);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Alerts, Menu } from "@webpack/common";
|
import { Alerts, Menu } from "@webpack/common";
|
||||||
import { Message } from "discord-types/general";
|
import { Message } from "discord-types/general";
|
||||||
|
@ -56,7 +56,7 @@ async function verify(link) {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "DoubleCounterBypass",
|
name: "DoubleCounterBypass",
|
||||||
description: "Bypass Double Counter verifications easily.",
|
description: "Bypass Double Counter verifications easily.",
|
||||||
authors: [Devs.nyx],
|
authors: [EquicordDevs.nyx],
|
||||||
|
|
||||||
contextMenus: {
|
contextMenus: {
|
||||||
"message": patchMessageContextMenu,
|
"message": patchMessageContextMenu,
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { addContextMenuPatch, findGroupChildrenByChildId, NavContextMenuPatchCallback, removeContextMenuPatch } from "@api/ContextMenu";
|
import { addContextMenuPatch, findGroupChildrenByChildId, NavContextMenuPatchCallback, removeContextMenuPatch } from "@api/ContextMenu";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Menu } from "@webpack/common";
|
import { Menu } from "@webpack/common";
|
||||||
import type { Guild } from "discord-types/general";
|
import type { Guild } from "discord-types/general";
|
||||||
|
@ -26,9 +26,9 @@ export default definePlugin({
|
||||||
name: "emojiDumper",
|
name: "emojiDumper",
|
||||||
description: "Context menu to dump and download a server's emojis.",
|
description: "Context menu to dump and download a server's emojis.",
|
||||||
authors: [
|
authors: [
|
||||||
Devs.Cortex,
|
EquicordDevs.Cortex,
|
||||||
Devs.Samwich,
|
Devs.Samwich,
|
||||||
Devs.Woosh,
|
EquicordDevs.Woosh,
|
||||||
],
|
],
|
||||||
start() {
|
start() {
|
||||||
addContextMenuPatch(["guild-context", "guild-header-popout"], Patch);
|
addContextMenuPatch(["guild-context", "guild-header-popout"], Patch);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
// Import required modules and components
|
// Import required modules and components
|
||||||
import { definePluginSettings, migratePluginSettings } from "@api/Settings";
|
import { definePluginSettings, migratePluginSettings } from "@api/Settings";
|
||||||
import { disableStyle, enableStyle } from "@api/Styles";
|
import { disableStyle, enableStyle } from "@api/Styles";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
// Importing the style managed fixes on and off switch
|
// Importing the style managed fixes on and off switch
|
||||||
|
@ -81,7 +81,7 @@ migratePluginSettings("EquicordCSS", "EquicordBuiltIn");
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "EquicordCSS",
|
name: "EquicordCSS",
|
||||||
description: "CSS for Equicord users. You will need to look at the settings.",
|
description: "CSS for Equicord users. You will need to look at the settings.",
|
||||||
authors: [Devs.FoxStorm1, Devs.thororen],
|
authors: [EquicordDevs.FoxStorm1, EquicordDevs.thororen],
|
||||||
dependencies: ["ThemeAttributes"],
|
dependencies: ["ThemeAttributes"],
|
||||||
settings,
|
settings,
|
||||||
start() {
|
start() {
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
import "./styles.css";
|
import "./styles.css";
|
||||||
|
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Clipboard, Toasts } from "@webpack/common";
|
import { Clipboard, Toasts } from "@webpack/common";
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ function getUsernames(contacts: ContactsList[], type: number): string[] {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ExportContacts",
|
name: "ExportContacts",
|
||||||
description: "Export a list of friends to your clipboard. Adds a new button to the menu bar for the friends tab.",
|
description: "Export a list of friends to your clipboard. Adds a new button to the menu bar for the friends tab.",
|
||||||
authors: [Devs.dat_insanity],
|
authors: [EquicordDevs.dat_insanity],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: "fetchRelationships(){",
|
find: "fetchRelationships(){",
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { Margins } from "@utils/margins";
|
import { Margins } from "@utils/margins";
|
||||||
import { copyWithToast } from "@utils/misc";
|
import { copyWithToast } from "@utils/misc";
|
||||||
import { closeModal } from "@utils/modal";
|
import { closeModal } from "@utils/modal";
|
||||||
|
@ -286,7 +286,7 @@ const settings = definePluginSettings({
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "FakeProfileThemes",
|
name: "FakeProfileThemes",
|
||||||
description: "Allows profile theming and the usage of profile effects by hiding the colors and effect ID in your About Me using invisible, zero-width characters",
|
description: "Allows profile theming and the usage of profile effects by hiding the colors and effect ID in your About Me using invisible, zero-width characters",
|
||||||
authors: [Devs.ryan],
|
authors: [EquicordDevs.ryan],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: '"UserProfileStore"',
|
find: '"UserProfileStore"',
|
|
@ -17,7 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { addBadge, BadgePosition, ProfileBadge, removeBadge } from "@api/Badges";
|
import { addBadge, BadgePosition, ProfileBadge, removeBadge } from "@api/Badges";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { React, Tooltip } from "@webpack/common";
|
import { React, Tooltip } from "@webpack/common";
|
||||||
import { User } from "discord-types/general";
|
import { User } from "discord-types/general";
|
||||||
|
@ -111,7 +111,7 @@ const showCustom = () => Vencord.Settings.plugins.GlobalBadges.showCustom;
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "GlobalBadges",
|
name: "GlobalBadges",
|
||||||
description: "Adds global badges from other client mods",
|
description: "Adds global badges from other client mods",
|
||||||
authors: [Devs.HypedDomi, Devs.Wolfie],
|
authors: [Devs.HypedDomi, EquicordDevs.Wolfie],
|
||||||
|
|
||||||
start: () => addBadge(Badge),
|
start: () => addBadge(Badge),
|
||||||
stop: () => removeBadge(Badge),
|
stop: () => removeBadge(Badge),
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { get, set } from "@api/DataStore";
|
||||||
import { addAccessory, removeAccessory } from "@api/MessageAccessories";
|
import { addAccessory, removeAccessory } from "@api/MessageAccessories";
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { classNameFactory } from "@api/Styles";
|
import { classNameFactory } from "@api/Styles";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { Menu } from "@webpack/common";
|
import { Menu } from "@webpack/common";
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ export const settings = definePluginSettings({
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "HideMessage",
|
name: "HideMessage",
|
||||||
description: "Adds a context menu option to hide messages",
|
description: "Adds a context menu option to hide messages",
|
||||||
authors: [Devs.Hanzy],
|
authors: [EquicordDevs.Hanzy],
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
contextMenus: {
|
contextMenus: {
|
||||||
|
|
|
@ -22,7 +22,7 @@ import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
||||||
import { DataStore } from "@api/index";
|
import { DataStore } from "@api/index";
|
||||||
import { addButton, removeButton } from "@api/MessagePopover";
|
import { addButton, removeButton } from "@api/MessagePopover";
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { classes } from "@utils/misc";
|
import { classes } from "@utils/misc";
|
||||||
import { openModal } from "@utils/modal";
|
import { openModal } from "@utils/modal";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
@ -71,7 +71,7 @@ function ToolBarHeader() {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "HolyNotes",
|
name: "HolyNotes",
|
||||||
description: "Holy Notes allows you to save messages",
|
description: "Holy Notes allows you to save messages",
|
||||||
authors: [Devs.Wolfie],
|
authors: [EquicordDevs.Wolfie],
|
||||||
dependencies: ["MessagePopoverAPI", "ChatInputButtonAPI"],
|
dependencies: ["MessagePopoverAPI", "ChatInputButtonAPI"],
|
||||||
|
|
||||||
patches: [
|
patches: [
|
||||||
|
|
|
@ -8,7 +8,7 @@ import { DataStore } from "@api/index";
|
||||||
import { addPreSendListener, removePreSendListener } from "@api/MessageEvents";
|
import { addPreSendListener, removePreSendListener } from "@api/MessageEvents";
|
||||||
import ExpandableHeader from "@components/ExpandableHeader";
|
import ExpandableHeader from "@components/ExpandableHeader";
|
||||||
import { Heart } from "@components/Heart";
|
import { Heart } from "@components/Heart";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { openUserProfile } from "@utils/discord";
|
import { openUserProfile } from "@utils/discord";
|
||||||
import * as Modal from "@utils/modal";
|
import * as Modal from "@utils/modal";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
@ -370,7 +370,7 @@ class DataUI {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "IRememberYou",
|
name: "IRememberYou",
|
||||||
description: "Locally saves everyone you've been communicating with (including servers), in case of lose",
|
description: "Locally saves everyone you've been communicating with (including servers), in case of lose",
|
||||||
authors: [Devs.zoodogood],
|
authors: [EquicordDevs.zoodogood],
|
||||||
dependencies: ["MessageEventsAPI"],
|
dependencies: ["MessageEventsAPI"],
|
||||||
patches: [],
|
patches: [],
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ import { DataStore } from "@api/index";
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Flex } from "@components/Flex";
|
import { Flex } from "@components/Flex";
|
||||||
import { DeleteIcon } from "@components/Icons";
|
import { DeleteIcon } from "@components/Icons";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { useForceUpdater } from "@utils/react";
|
import { useForceUpdater } from "@utils/react";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { Button, Forms, TextInput, UserStore, UserUtils, useState } from "@webpack/common";
|
import { Button, Forms, TextInput, UserStore, UserUtils, useState } from "@webpack/common";
|
||||||
|
@ -90,7 +90,7 @@ const settings = definePluginSettings({
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "KeywordNotify",
|
name: "KeywordNotify",
|
||||||
authors: [Devs.camila314],
|
authors: [EquicordDevs.camila314],
|
||||||
description: "Sends a notification if a given message matches certain keywords or regexes",
|
description: "Sends a notification if a given message matches certain keywords or regexes",
|
||||||
settings,
|
settings,
|
||||||
patches: [
|
patches: [
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import { isNonNullish } from "@utils/guards";
|
import { isNonNullish } from "@utils/guards";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { waitFor } from "@webpack";
|
import { waitFor } from "@webpack";
|
||||||
|
@ -31,7 +31,7 @@ waitFor("HiddenVisually", mod => {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "MessageLatency",
|
name: "MessageLatency",
|
||||||
description: "Displays an indicator for messages that took ≥n seconds to send",
|
description: "Displays an indicator for messages that took ≥n seconds to send",
|
||||||
authors: [Devs.arHSM],
|
authors: [EquicordDevs.arHSM],
|
||||||
settings: definePluginSettings({
|
settings: definePluginSettings({
|
||||||
latency: {
|
latency: {
|
||||||
type: OptionType.NUMBER,
|
type: OptionType.NUMBER,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { UserStore } from "@webpack/common";
|
import { UserStore } from "@webpack/common";
|
||||||
import { User } from "discord-types/general";
|
import { User } from "discord-types/general";
|
||||||
|
@ -20,7 +20,7 @@ interface ModifiedUser extends User {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "NoNitroUpsell",
|
name: "NoNitroUpsell",
|
||||||
description: "Removes ALL of Discord's nitro upsells by tricking the client into thinking you have nitro.",
|
description: "Removes ALL of Discord's nitro upsells by tricking the client into thinking you have nitro.",
|
||||||
authors: [Devs.thororen],
|
authors: [EquicordDevs.thororen],
|
||||||
ready(user: ModifiedUser): void {
|
ready(user: ModifiedUser): void {
|
||||||
if (!user) return;
|
if (!user) return;
|
||||||
if ("_realPremiumType" in user) return;
|
if ("_realPremiumType" in user) return;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
const settings = definePluginSettings({
|
const settings = definePluginSettings({
|
||||||
|
@ -30,7 +30,7 @@ const settings = definePluginSettings({
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "PlatformSpoofer",
|
name: "PlatformSpoofer",
|
||||||
description: "Spoof what platform or device you're on",
|
description: "Spoof what platform or device you're on",
|
||||||
authors: [Devs.Drag],
|
authors: [EquicordDevs.Drag],
|
||||||
settings: settings,
|
settings: settings,
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";
|
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { findByPropsLazy } from "@webpack";
|
import { findByPropsLazy } from "@webpack";
|
||||||
import { MessageStore, UserStore } from "@webpack/common";
|
import { MessageStore, UserStore } from "@webpack/common";
|
||||||
|
@ -45,7 +45,7 @@ export default definePlugin({
|
||||||
name: "MessagePurge",
|
name: "MessagePurge",
|
||||||
description: "Purges messages from a channel",
|
description: "Purges messages from a channel",
|
||||||
dependencies: ["CommandsAPI"],
|
dependencies: ["CommandsAPI"],
|
||||||
authors: [Devs.bhop, Devs.nyx],
|
authors: [EquicordDevs.bhop, EquicordDevs.nyx],
|
||||||
commands: [
|
commands: [
|
||||||
{
|
{
|
||||||
name: "purge",
|
name: "purge",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import { addPreSendListener, removePreSendListener } from "@api/MessageEvents";
|
import { addPreSendListener, removePreSendListener } from "@api/MessageEvents";
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
const settings = definePluginSettings({
|
const settings = definePluginSettings({
|
||||||
|
@ -31,7 +31,7 @@ function replaceQuestionMarks(content: string): string {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "QuestionMarkReplace",
|
name: "QuestionMarkReplace",
|
||||||
description: "Replace all question marks with chosen string, if message only contains question marks.",
|
description: "Replace all question marks with chosen string, if message only contains question marks.",
|
||||||
authors: [Devs.nyx],
|
authors: [EquicordDevs.nyx],
|
||||||
|
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { MessageStore, showToast, UserStore } from "@webpack/common";
|
import { MessageStore, showToast, UserStore } from "@webpack/common";
|
||||||
import { MessageJSON } from "discord-types/general";
|
import { MessageJSON } from "discord-types/general";
|
||||||
|
@ -43,7 +43,7 @@ export const settings = definePluginSettings({
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ReplyPingControl",
|
name: "ReplyPingControl",
|
||||||
description: "Control whether to always or never get pinged on message replies, with a whitelist feature",
|
description: "Control whether to always or never get pinged on message replies, with a whitelist feature",
|
||||||
authors: [Devs.ant0n, Devs.MrDiamond],
|
authors: [Devs.ant0n, EquicordDevs.MrDiamond],
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
patches: [{
|
patches: [{
|
||||||
|
|
|
@ -17,12 +17,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ApplicationCommandOptionType, findOption } from "@api/Commands";
|
import { ApplicationCommandOptionType, findOption } from "@api/Commands";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "Search",
|
name: "Search",
|
||||||
authors: [Devs.JacobTm, Devs.thororen],
|
authors: [Devs.JacobTm, EquicordDevs.thororen],
|
||||||
description: "Searchs the web.",
|
description: "Searchs the web.",
|
||||||
dependencies: ["CommandsAPI"],
|
dependencies: ["CommandsAPI"],
|
||||||
commands: [{
|
commands: [{
|
||||||
|
|
|
@ -16,14 +16,14 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "SearchFix",
|
name: "SearchFix",
|
||||||
description: 'Fixes the annoying "We dropped the magnifying glass!" error.',
|
description: 'Fixes the annoying "We dropped the magnifying glass!" error.',
|
||||||
settingsAboutComponent: () => <span style={{ color: "white" }}><i><b>This fix isn't perfect, so you may have to reload the search bar to fix issues.</b></i> Discord only allows a max offset of 5000 (this is what causes the magnifying glass error). This means that you can only see precisely 5000 messages into the past, and 5000 messages into the future (when sorting by old). This plugin just jumps to the opposite sorting method to try get around Discord's restriction, but if there is a large search result, and you try to view a message that is unobtainable with both methods of sorting, the plugin will simply show offset 0 (either newest or oldest message depending on the sorting method).</span>,
|
settingsAboutComponent: () => <span style={{ color: "white" }}><i><b>This fix isn't perfect, so you may have to reload the search bar to fix issues.</b></i> Discord only allows a max offset of 5000 (this is what causes the magnifying glass error). This means that you can only see precisely 5000 messages into the past, and 5000 messages into the future (when sorting by old). This plugin just jumps to the opposite sorting method to try get around Discord's restriction, but if there is a large search result, and you try to view a message that is unobtainable with both methods of sorting, the plugin will simply show offset 0 (either newest or oldest message depending on the sorting method).</span>,
|
||||||
authors: [Devs.jaxx],
|
authors: [EquicordDevs.jaxx],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: '"SearchStore"',
|
find: '"SearchStore"',
|
||||||
|
|
|
@ -5032,4 +5032,4 @@ export const characters = [
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Vencord, a Discord client mod
|
* Vencord, a Discord client mod
|
||||||
* Copyright (c) 2024 Vendicated and contributors
|
* Copyright (c) 2024 Vendicated and contributors
|
||||||
|
|
|
@ -91,4 +91,4 @@ export default definePlugin({
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { addDecoration, removeDecoration } from "@api/MessageDecorations";
|
import { addDecoration, removeDecoration } from "@api/MessageDecorations";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import { isPluginDev } from "@utils/misc";
|
import { isPluginDev } from "@utils/misc";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { findByPropsLazy } from "@webpack";
|
import { findByPropsLazy } from "@webpack";
|
||||||
|
@ -46,6 +46,19 @@ function CheckBadge({ badge, author }: { badge: string; author: any; }): JSX.Ele
|
||||||
))}
|
))}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
case "EquicordDonor":
|
||||||
|
return (
|
||||||
|
<span style={{ order: settings.store.VencordDonorPosition }}>
|
||||||
|
{badges.getEquicordDonorBadges(author.id)?.map((badge: any) => (
|
||||||
|
<RoleIconComponent
|
||||||
|
className={roleIconClassName}
|
||||||
|
name={badge.description}
|
||||||
|
size={20}
|
||||||
|
src={badge.image}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
case "VencordContributer":
|
case "VencordContributer":
|
||||||
return isPluginDev(author.id) ? (
|
return isPluginDev(author.id) ? (
|
||||||
<span style={{ order: settings.store.VencordContributorPosition }}>
|
<span style={{ order: settings.store.VencordContributorPosition }}>
|
||||||
|
@ -96,6 +109,7 @@ function ChatBadges({ author }: any) {
|
||||||
return (
|
return (
|
||||||
<span style={{ display: "inline-flex", marginLeft: 2, verticalAlign: "top" }}>
|
<span style={{ display: "inline-flex", marginLeft: 2, verticalAlign: "top" }}>
|
||||||
{settings.store.showVencordDonor && <CheckBadge badge={"VencordDonor"} author={author} />}
|
{settings.store.showVencordDonor && <CheckBadge badge={"VencordDonor"} author={author} />}
|
||||||
|
{settings.store.showVencordDonor && <CheckBadge badge={"EquicordDonor"} author={author} />}
|
||||||
{settings.store.showVencordContributor && <CheckBadge badge={"VencordContributer"} author={author} />}
|
{settings.store.showVencordContributor && <CheckBadge badge={"VencordContributer"} author={author} />}
|
||||||
{settings.store.showDiscordProfile && <CheckBadge badge={"DiscordProfile"} author={author} />}
|
{settings.store.showDiscordProfile && <CheckBadge badge={"DiscordProfile"} author={author} />}
|
||||||
{settings.store.showDiscordNitro && <CheckBadge badge={"DiscordNitro"} author={author} />}
|
{settings.store.showDiscordNitro && <CheckBadge badge={"DiscordNitro"} author={author} />}
|
||||||
|
@ -105,7 +119,7 @@ function ChatBadges({ author }: any) {
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ShowBadgesInChat",
|
name: "ShowBadgesInChat",
|
||||||
authors: [Devs.Inbestigator, Devs.KrystalSkull],
|
authors: [Devs.Inbestigator, EquicordDevs.KrystalSkull],
|
||||||
description: "Shows the message author's badges beside their name in chat.",
|
description: "Shows the message author's badges beside their name in chat.",
|
||||||
dependencies: ["MessageDecorationsAPI"],
|
dependencies: ["MessageDecorationsAPI"],
|
||||||
patches: [
|
patches: [
|
||||||
|
|
|
@ -23,6 +23,18 @@ const settings = definePluginSettings({
|
||||||
hidden: true,
|
hidden: true,
|
||||||
default: 0
|
default: 0
|
||||||
},
|
},
|
||||||
|
showEquicordDonor: {
|
||||||
|
type: OptionType.BOOLEAN,
|
||||||
|
description: "Enable to show Vencord donor badges in chat.",
|
||||||
|
hidden: true,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
EquicordDonorPosition: {
|
||||||
|
type: OptionType.NUMBER,
|
||||||
|
description: "The position of the Vencord Donor badges.",
|
||||||
|
hidden: true,
|
||||||
|
default: 1
|
||||||
|
},
|
||||||
showVencordContributor: {
|
showVencordContributor: {
|
||||||
type: OptionType.BOOLEAN,
|
type: OptionType.BOOLEAN,
|
||||||
description: "Enable to show Vencord contributor badges in chat.",
|
description: "Enable to show Vencord contributor badges in chat.",
|
||||||
|
@ -33,7 +45,7 @@ const settings = definePluginSettings({
|
||||||
type: OptionType.NUMBER,
|
type: OptionType.NUMBER,
|
||||||
description: "The position of the Vencord Contributor badge.",
|
description: "The position of the Vencord Contributor badge.",
|
||||||
hidden: true,
|
hidden: true,
|
||||||
default: 1
|
default: 2
|
||||||
},
|
},
|
||||||
showDiscordProfile: {
|
showDiscordProfile: {
|
||||||
type: OptionType.BOOLEAN,
|
type: OptionType.BOOLEAN,
|
||||||
|
@ -45,7 +57,7 @@ const settings = definePluginSettings({
|
||||||
type: OptionType.NUMBER,
|
type: OptionType.NUMBER,
|
||||||
description: "The position of the Discord profile badges.",
|
description: "The position of the Discord profile badges.",
|
||||||
hidden: true,
|
hidden: true,
|
||||||
default: 2
|
default: 3
|
||||||
},
|
},
|
||||||
showDiscordNitro: {
|
showDiscordNitro: {
|
||||||
type: OptionType.BOOLEAN,
|
type: OptionType.BOOLEAN,
|
||||||
|
@ -57,7 +69,7 @@ const settings = definePluginSettings({
|
||||||
type: OptionType.NUMBER,
|
type: OptionType.NUMBER,
|
||||||
description: "The position of the Discord Nitro badge.",
|
description: "The position of the Discord Nitro badge.",
|
||||||
hidden: true,
|
hidden: true,
|
||||||
default: 3
|
default: 4
|
||||||
},
|
},
|
||||||
badgeSettings: {
|
badgeSettings: {
|
||||||
type: OptionType.COMPONENT,
|
type: OptionType.COMPONENT,
|
||||||
|
@ -71,6 +83,7 @@ export default settings;
|
||||||
const BadgeSettings = () => {
|
const BadgeSettings = () => {
|
||||||
const [images, setImages] = useState([
|
const [images, setImages] = useState([
|
||||||
{ src: "https://cdn.discordapp.com/emojis/1026533070955872337.png", shown: settings.store.showVencordDonor, title: "Vencord donor badges", key: "VencordDonor", position: settings.store.VencordDonorPosition },
|
{ src: "https://cdn.discordapp.com/emojis/1026533070955872337.png", shown: settings.store.showVencordDonor, title: "Vencord donor badges", key: "VencordDonor", position: settings.store.VencordDonorPosition },
|
||||||
|
{ src: "https://i.imgur.com/KsxHlbD.png", shown: settings.store.showEquicordDonor, title: "Equicord donor badges", key: "EquicordDonor", position: settings.store.EquicordDonorPosition },
|
||||||
{ src: "https://i.imgur.com/OypoHrV.png", shown: settings.store.showVencordContributor, title: "Vencord/Equicord contributor badge", key: "VencordContributer", position: settings.store.VencordContributorPosition },
|
{ src: "https://i.imgur.com/OypoHrV.png", shown: settings.store.showVencordContributor, title: "Vencord/Equicord contributor badge", key: "VencordContributer", position: settings.store.VencordContributorPosition },
|
||||||
{ src: "https://cdn.discordapp.com/badge-icons/bf01d1073931f921909045f3a39fd264.png", shown: settings.store.showDiscordProfile, title: "Discord profile badges (HypeSquad, Discord Staff, Active Developer, etc.)", key: "DiscordProfile", position: settings.store.DiscordProfilePosition },
|
{ src: "https://cdn.discordapp.com/badge-icons/bf01d1073931f921909045f3a39fd264.png", shown: settings.store.showDiscordProfile, title: "Discord profile badges (HypeSquad, Discord Staff, Active Developer, etc.)", key: "DiscordProfile", position: settings.store.DiscordProfilePosition },
|
||||||
{ src: "https://cdn.discordapp.com/badge-icons/2ba85e8026a8614b640c2837bcdfe21b.png", shown: settings.store.showDiscordNitro, title: "Nitro badge", key: "DiscordNitro", position: settings.store.DiscordNitroPosition }
|
{ src: "https://cdn.discordapp.com/badge-icons/2ba85e8026a8614b640c2837bcdfe21b.png", shown: settings.store.showDiscordNitro, title: "Nitro badge", key: "DiscordNitro", position: settings.store.DiscordNitroPosition }
|
||||||
|
@ -83,6 +96,10 @@ const BadgeSettings = () => {
|
||||||
settings.store.VencordDonorPosition = image.position;
|
settings.store.VencordDonorPosition = image.position;
|
||||||
settings.store.showVencordDonor = image.shown;
|
settings.store.showVencordDonor = image.shown;
|
||||||
break;
|
break;
|
||||||
|
case "EquiordDonor":
|
||||||
|
settings.store.EquicordDonorPosition = image.position;
|
||||||
|
settings.store.showEquicordDonor = image.shown;
|
||||||
|
break;
|
||||||
case "VencordContributer":
|
case "VencordContributer":
|
||||||
settings.store.VencordContributorPosition = image.position;
|
settings.store.VencordContributorPosition = image.position;
|
||||||
settings.store.showVencordContributor = image.shown;
|
settings.store.showVencordContributor = image.shown;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import { addChatBarButton, ChatBarButton, removeChatBarButton } from "@api/ChatButtons";
|
import { addChatBarButton, ChatBarButton, removeChatBarButton } from "@api/ChatButtons";
|
||||||
import { disableStyle, enableStyle } from "@api/Styles";
|
import { disableStyle, enableStyle } from "@api/Styles";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { FluxDispatcher } from "@webpack/common";
|
import { FluxDispatcher } from "@webpack/common";
|
||||||
|
|
||||||
|
@ -29,10 +29,10 @@ const chatBarIcon: ChatBarButton = () => {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "SoundBoardLogger",
|
name: "SoundBoardLogger",
|
||||||
authors: [
|
authors: [
|
||||||
Devs.ImpishMoxxie,
|
EquicordDevs.Moxxie,
|
||||||
Devs.fres,
|
EquicordDevs.fres,
|
||||||
Devs.echo,
|
Devs.echo,
|
||||||
Devs.thororen
|
EquicordDevs.thororen
|
||||||
],
|
],
|
||||||
settings,
|
settings,
|
||||||
patches: [
|
patches: [
|
||||||
|
|
|
@ -16,13 +16,13 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "UnlimitedAccounts",
|
name: "UnlimitedAccounts",
|
||||||
description: "Increases the amount of accounts you can add.",
|
description: "Increases the amount of accounts you can add.",
|
||||||
authors: [Devs.Balaclava, Devs.thororen],
|
authors: [EquicordDevs.Balaclava, EquicordDevs.thororen],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: "multiaccount_cta_tooltip_seen",
|
find: "multiaccount_cta_tooltip_seen",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import { definePluginSettings } from "@api/Settings";
|
import { definePluginSettings } from "@api/Settings";
|
||||||
import { Link } from "@components/Link";
|
import { Link } from "@components/Link";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { User } from "discord-types/general";
|
import { User } from "discord-types/general";
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ export default definePlugin({
|
||||||
|
|
||||||
name: "UserPFP",
|
name: "UserPFP",
|
||||||
description: "Allows you to use an animated avatar without Nitro",
|
description: "Allows you to use an animated avatar without Nitro",
|
||||||
authors: [Devs.nexpid, Devs.thororen, Devs.FoxStorm1, Devs.coolesding],
|
authors: [EquicordDevs.nexpid, EquicordDevs.thororen, EquicordDevs.FoxStorm1, EquicordDevs.coolesding],
|
||||||
settings,
|
settings,
|
||||||
settingsAboutComponent: () => (
|
settingsAboutComponent: () => (
|
||||||
<>
|
<>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs, EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { findStoreLazy } from "@webpack";
|
import { findStoreLazy } from "@webpack";
|
||||||
import { GuildChannelStore, Menu, React, RestAPI, UserStore } from "@webpack/common";
|
import { GuildChannelStore, Menu, React, RestAPI, UserStore } from "@webpack/common";
|
||||||
|
@ -125,8 +125,8 @@ const VoiceChannelContext: NavContextMenuPatchCallback = (children, { channel }:
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "VoiceChatUtilities",
|
name: "VoiceChatUtilities",
|
||||||
description: "This plugin allows you to perform multiple actions on an entire channel (move, mute, disconnect, etc.) (originally by dutake)",
|
description: "This plugin allows you to perform multiple actions on an entire channel (move, mute, disconnect, etc.) (originally by dutake)",
|
||||||
authors: [Devs.Dams, Devs.D3SOX],
|
authors: [EquicordDevs.Dams, Devs.D3SOX],
|
||||||
contextMenus: {
|
contextMenus: {
|
||||||
"channel-context": VoiceChannelContext
|
"channel-context": VoiceChannelContext
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
import "./style.css";
|
import "./style.css";
|
||||||
|
|
||||||
import ErrorBoundary from "@components/ErrorBoundary";
|
import ErrorBoundary from "@components/ErrorBoundary";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "VoiceDownload",
|
name: "VoiceDownload",
|
||||||
description: "Download voice messages.",
|
description: "Download voice messages.",
|
||||||
authors: [Devs.puv],
|
authors: [EquicordDevs.puv],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: ".rippleContainer",
|
find: ".rippleContainer",
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
import { classNameFactory } from "@api/Styles";
|
import { classNameFactory } from "@api/Styles";
|
||||||
import { Flex } from "@components/Flex";
|
import { Flex } from "@components/Flex";
|
||||||
import { Devs } from "@utils/constants";
|
import { EquicordDevs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { findByPropsLazy, findStoreLazy } from "@webpack";
|
import { findByPropsLazy, findStoreLazy } from "@webpack";
|
||||||
import { Forms, i18n, RelationshipStore, Tooltip, UserStore, useStateFromStores } from "@webpack/common";
|
import { Forms, i18n, RelationshipStore, Tooltip, UserStore, useStateFromStores } from "@webpack/common";
|
||||||
|
@ -54,7 +54,7 @@ const { encodeStreamKey }: {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "WhosWatching",
|
name: "WhosWatching",
|
||||||
description: "Lets you view what users are watching your stream by hovering over the screenshare icon",
|
description: "Lets you view what users are watching your stream by hovering over the screenshare icon",
|
||||||
authors: [Devs.fres],
|
authors: [EquicordDevs.fres],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: ".Masks.STATUS_SCREENSHARE,width:32",
|
find: ".Masks.STATUS_SCREENSHARE,width:32",
|
||||||
|
|
|
@ -45,24 +45,24 @@ const ContributorBadge: ProfileBadge = {
|
||||||
};
|
};
|
||||||
|
|
||||||
let DonorBadges = {} as Record<string, Array<Record<"tooltip" | "badge", string>>>;
|
let DonorBadges = {} as Record<string, Array<Record<"tooltip" | "badge", string>>>;
|
||||||
|
let EquicordDonorBadges = {} as Record<string, Array<Record<"tooltip" | "badge", string>>>;
|
||||||
|
|
||||||
async function loadBadges(noCache = false) {
|
async function loadBadges(url: string, noCache = false) {
|
||||||
|
|
||||||
DonorBadges = {};
|
|
||||||
|
|
||||||
const init = {} as RequestInit;
|
const init = {} as RequestInit;
|
||||||
if (noCache)
|
if (noCache) init.cache = "no-cache";
|
||||||
init.cache = "no-cache";
|
|
||||||
|
|
||||||
const one = await fetch("https://badges.vencord.dev/badges.json", init)
|
return await fetch(url, init).then(r => r.json());
|
||||||
.then(r => r.json());
|
|
||||||
|
|
||||||
const two = await fetch("https://raw.githubusercontent.com/Equicord/Ignore/main/badges.json", init)
|
|
||||||
.then(r => r.json());
|
|
||||||
|
|
||||||
DonorBadges = { ...one, ...two };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadAllBadges(noCache = false) {
|
||||||
|
const vencordBadges = await loadBadges("https://badges.vencord.dev/badges.json", noCache);
|
||||||
|
const equicordBadges = await loadBadges("https://raw.githubusercontent.com/Equicord/Ignore/main/badges.json", noCache);
|
||||||
|
|
||||||
|
DonorBadges = vencordBadges;
|
||||||
|
EquicordDonorBadges = equicordBadges;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "BadgeAPI",
|
name: "BadgeAPI",
|
||||||
description: "API to add badges to users.",
|
description: "API to add badges to users.",
|
||||||
|
@ -99,7 +99,7 @@ export default definePlugin({
|
||||||
|
|
||||||
toolboxActions: {
|
toolboxActions: {
|
||||||
async "Refetch Badges"() {
|
async "Refetch Badges"() {
|
||||||
await loadBadges(true);
|
await loadAllBadges(true);
|
||||||
Toasts.show({
|
Toasts.show({
|
||||||
id: Toasts.genId(),
|
id: Toasts.genId(),
|
||||||
message: "Successfully refetched badges!",
|
message: "Successfully refetched badges!",
|
||||||
|
@ -110,7 +110,7 @@ export default definePlugin({
|
||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
Vencord.Api.Badges.addBadge(ContributorBadge);
|
Vencord.Api.Badges.addBadge(ContributorBadge);
|
||||||
await loadBadges();
|
await loadAllBadges();
|
||||||
},
|
},
|
||||||
|
|
||||||
renderBadgeComponent: ErrorBoundary.wrap((badge: ProfileBadge & BadgeUserArgs) => {
|
renderBadgeComponent: ErrorBoundary.wrap((badge: ProfileBadge & BadgeUserArgs) => {
|
||||||
|
@ -186,5 +186,75 @@ export default definePlugin({
|
||||||
));
|
));
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
getEquicordDonorBadges(userId: string) {
|
||||||
|
return EquicordDonorBadges[userId]?.map(badge => ({
|
||||||
|
image: badge.badge,
|
||||||
|
description: badge.tooltip,
|
||||||
|
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);
|
||||||
|
// Will get my own in the future
|
||||||
|
VencordNative.native.openExternal("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 />
|
||||||
|
Equicord 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 Equicord Donors
|
||||||
|
</Forms.FormText>
|
||||||
|
<Forms.FormText className={Margins.top20}>
|
||||||
|
Please consider supporting the development of Equicord 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>
|
||||||
|
));
|
||||||
|
},
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -133,7 +133,7 @@ function ToolboxFragmentWrapper({ children }: { children: ReactNode[]; }) {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "EquicordToolbox",
|
name: "EquicordToolbox",
|
||||||
description: "Adds a button next to the inbox button in the channel header that houses Equicord quick actions",
|
description: "Adds a button next to the inbox button in the channel header that houses Equicord quick actions",
|
||||||
authors: [Devs.Ven, Devs.AutumnVN, Devs.FoxStorm1],
|
authors: [Devs.Ven, Devs.AutumnVN],
|
||||||
|
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,4 +8,4 @@ import type { SVGProps } from "react";
|
||||||
|
|
||||||
export function SpotifyIcon(props: SVGProps<SVGSVGElement>) {
|
export function SpotifyIcon(props: SVGProps<SVGSVGElement>) {
|
||||||
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" {...props}><path fill="#1ed760" d="M128 0C57.308 0 0 57.309 0 128c0 70.696 57.309 128 128 128c70.697 0 128-57.304 128-128C256 57.314 198.697.007 127.998.007zm58.699 184.614c-2.293 3.76-7.215 4.952-10.975 2.644c-30.053-18.357-67.885-22.515-112.44-12.335a7.981 7.981 0 0 1-9.552-6.007a7.968 7.968 0 0 1 6-9.553c48.76-11.14 90.583-6.344 124.323 14.276c3.76 2.308 4.952 7.215 2.644 10.975m15.667-34.853c-2.89 4.695-9.034 6.178-13.726 3.289c-34.406-21.148-86.853-27.273-127.548-14.92c-5.278 1.594-10.852-1.38-12.454-6.649c-1.59-5.278 1.386-10.842 6.655-12.446c46.485-14.106 104.275-7.273 143.787 17.007c4.692 2.89 6.175 9.034 3.286 13.72zm1.345-36.293C162.457 88.964 94.394 86.71 55.007 98.666c-6.325 1.918-13.014-1.653-14.93-7.978c-1.917-6.328 1.65-13.012 7.98-14.935C93.27 62.027 168.434 64.68 215.929 92.876c5.702 3.376 7.566 10.724 4.188 16.405c-3.362 5.69-10.73 7.565-16.4 4.187z"></path></svg>);
|
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" {...props}><path fill="#1ed760" d="M128 0C57.308 0 0 57.309 0 128c0 70.696 57.309 128 128 128c70.697 0 128-57.304 128-128C256 57.314 198.697.007 127.998.007zm58.699 184.614c-2.293 3.76-7.215 4.952-10.975 2.644c-30.053-18.357-67.885-22.515-112.44-12.335a7.981 7.981 0 0 1-9.552-6.007a7.968 7.968 0 0 1 6-9.553c48.76-11.14 90.583-6.344 124.323 14.276c3.76 2.308 4.952 7.215 2.644 10.975m15.667-34.853c-2.89 4.695-9.034 6.178-13.726 3.289c-34.406-21.148-86.853-27.273-127.548-14.92c-5.278 1.594-10.852-1.38-12.454-6.649c-1.59-5.278 1.386-10.842 6.655-12.446c46.485-14.106 104.275-7.273 143.787 17.007c4.692 2.89 6.175 9.034 3.286 13.72zm1.345-36.293C162.457 88.964 94.394 86.71 55.007 98.666c-6.325 1.918-13.014-1.653-14.93-7.978c-1.917-6.328 1.65-13.012 7.98-14.935C93.27 62.027 168.434 64.68 215.929 92.876c5.702 3.376 7.566 10.724 4.188 16.405c-3.362 5.69-10.73 7.565-16.4 4.187z"></path></svg>);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,4 +8,4 @@ import type { SVGProps } from "react";
|
||||||
|
|
||||||
export function TwitchIcon(props: SVGProps<SVGSVGElement>) {
|
export function TwitchIcon(props: SVGProps<SVGSVGElement>) {
|
||||||
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 268" {...props}><path fill="#5a3e85" d="M17.458 0L0 46.556v186.201h63.983v34.934h34.931l34.898-34.934h52.36L256 162.954V0zm23.259 23.263H232.73v128.029l-40.739 40.741H128L93.113 226.92v-34.886H40.717zm64.008 116.405H128V69.844h-23.275zm63.997 0h23.27V69.844h-23.27z"></path></svg>);
|
return (<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 268" {...props}><path fill="#5a3e85" d="M17.458 0L0 46.556v186.201h63.983v34.934h34.931l34.898-34.934h52.36L256 162.954V0zm23.259 23.263H232.73v128.029l-40.739 40.741H128L93.113 226.92v-34.886H40.717zm64.008 116.405H128V69.844h-23.275zm63.997 0h23.27V69.844h-23.27z"></path></svg>);
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,7 @@ function getApplicationIcons(activities: Activity[]) {
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "MemberListActivities",
|
name: "MemberListActivities",
|
||||||
description: "Shows activity icons in the member list",
|
description: "Shows activity icons in the member list",
|
||||||
authors: [Devs.D3SOX, Devs.nyx],
|
authors: [Devs.D3SOX],
|
||||||
tags: ["activity"],
|
tags: ["activity"],
|
||||||
|
|
||||||
settings,
|
settings,
|
||||||
|
|
|
@ -21,11 +21,6 @@ import { Devs } from "@utils/constants";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
const settings = definePluginSettings({
|
const settings = definePluginSettings({
|
||||||
coinsEnabled: {
|
|
||||||
type: OptionType.BOOLEAN,
|
|
||||||
default: false,
|
|
||||||
description: "Enable coins feature (Requires reload)"
|
|
||||||
},
|
|
||||||
speed: {
|
speed: {
|
||||||
description: "Speed of Da Cat :3",
|
description: "Speed of Da Cat :3",
|
||||||
type: OptionType.NUMBER,
|
type: OptionType.NUMBER,
|
||||||
|
@ -54,34 +49,19 @@ export default definePlugin({
|
||||||
name: "oneko",
|
name: "oneko",
|
||||||
description: "cat follow mouse (real)",
|
description: "cat follow mouse (real)",
|
||||||
// Listing adryd here because this literally just evals her script
|
// Listing adryd here because this literally just evals her script
|
||||||
authors: [Devs.Ven, Devs.adryd, Devs.Gingi, Devs.adryd],
|
authors: [Devs.Ven, Devs.adryd],
|
||||||
settings,
|
settings,
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
const { coinsEnabled } = settings.store;
|
fetch("https://raw.githubusercontent.com/adryd325/oneko.js/8fa8a1864aa71cd7a794d58bc139e755e96a236c/oneko.js")
|
||||||
if (coinsEnabled) {
|
.then(x => x.text())
|
||||||
fetch("https://raw.githubusercontent.com/0xGingi/oneko.js/acf1ae58ca8bacd9af47a783c2e134136c35f948/oneko.js")
|
.then(s => s.replace("const nekoSpeed = 10;", `const nekoSpeed = ${settings.store.speed};`))
|
||||||
.then(x => x.text())
|
.then(s => s.replace("./oneko.gif", "https://raw.githubusercontent.com/adryd325/oneko.js/14bab15a755d0e35cd4ae19c931d96d306f99f42/oneko.gif")
|
||||||
.then(s => s.replace("const nekoSpeed = 10;", `const nekoSpeed = ${settings.store.speed};`))
|
.replace("(isReducedMotion)", "(false)"))
|
||||||
.then(s => s.replace("./oneko.gif", "https://raw.githubusercontent.com/adryd325/oneko.js/14bab15a755d0e35cd4ae19c931d96d306f99f42/oneko.gif")
|
.then(eval);
|
||||||
.replace("(isReducedMotion)", "(false)"))
|
|
||||||
.then(x => x.replace("./coin.gif", "https://raw.githubusercontent.com/0xGingi/oneko.js/3de1bf554bb82b58a2c70f828e2420a881e5f283/coin.gif"))
|
|
||||||
.then(eval);
|
|
||||||
}
|
|
||||||
if (!coinsEnabled) {
|
|
||||||
fetch("https://raw.githubusercontent.com/adryd325/oneko.js/8fa8a1864aa71cd7a794d58bc139e755e96a236c/oneko.js")
|
|
||||||
.then(x => x.text())
|
|
||||||
.then(s => s.replace("const nekoSpeed = 10;", `const nekoSpeed = ${settings.store.speed};`))
|
|
||||||
.then(s => s.replace("./oneko.gif", "https://raw.githubusercontent.com/adryd325/oneko.js/14bab15a755d0e35cd4ae19c931d96d306f99f42/oneko.gif")
|
|
||||||
.replace("(isReducedMotion)", "(false)"))
|
|
||||||
.then(eval);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
document.getElementById("oneko")?.remove();
|
document.getElementById("oneko")?.remove();
|
||||||
if (typeof window.removeCoins === "function") {
|
|
||||||
window.removeCoins();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -61,7 +61,7 @@ const ReadAllButton = () => (
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "ReadAllNotificationsButton",
|
name: "ReadAllNotificationsButton",
|
||||||
description: "Read all server notifications with a single button click!",
|
description: "Read all server notifications with a single button click!",
|
||||||
authors: [Devs.kemo, Devs.KrystalSkull],
|
authors: [Devs.kemo],
|
||||||
dependencies: ["ServerListAPI"],
|
dependencies: ["ServerListAPI"],
|
||||||
|
|
||||||
renderReadAllButton: () => <ReadAllButton />,
|
renderReadAllButton: () => <ReadAllButton />,
|
||||||
|
|
|
@ -51,6 +51,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "Cynosphere",
|
name: "Cynosphere",
|
||||||
id: 150745989836308480n
|
id: 150745989836308480n
|
||||||
},
|
},
|
||||||
|
Trwy: {
|
||||||
|
name: "trey",
|
||||||
|
id: 354427199023218689n
|
||||||
|
},
|
||||||
Megu: {
|
Megu: {
|
||||||
name: "Megumin",
|
name: "Megumin",
|
||||||
id: 545581357812678656n
|
id: 545581357812678656n
|
||||||
|
@ -264,6 +268,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "Dziurwa",
|
name: "Dziurwa",
|
||||||
id: 1001086404203389018n
|
id: 1001086404203389018n
|
||||||
},
|
},
|
||||||
|
F53: {
|
||||||
|
name: "F53",
|
||||||
|
id: 280411966126948353n
|
||||||
|
},
|
||||||
AutumnVN: {
|
AutumnVN: {
|
||||||
name: "AutumnVN",
|
name: "AutumnVN",
|
||||||
id: 393694671383166998n
|
id: 393694671383166998n
|
||||||
|
@ -372,6 +380,69 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "ant0n",
|
name: "ant0n",
|
||||||
id: 145224646868860928n
|
id: 145224646868860928n
|
||||||
},
|
},
|
||||||
|
philipbry: {
|
||||||
|
name: "philipbry",
|
||||||
|
id: 554994003318276106n
|
||||||
|
},
|
||||||
|
Korbo: {
|
||||||
|
name: "Korbo",
|
||||||
|
id: 455856406420258827n
|
||||||
|
},
|
||||||
|
maisymoe: {
|
||||||
|
name: "maisy",
|
||||||
|
id: 257109471589957632n,
|
||||||
|
},
|
||||||
|
Mopi: {
|
||||||
|
name: "Mopi",
|
||||||
|
id: 1022189106614243350n
|
||||||
|
},
|
||||||
|
Grzesiek11: {
|
||||||
|
name: "Grzesiek11",
|
||||||
|
id: 368475654662127616n,
|
||||||
|
},
|
||||||
|
Samwich: {
|
||||||
|
name: "Samwich",
|
||||||
|
id: 976176454511509554n,
|
||||||
|
},
|
||||||
|
coolelectronics: {
|
||||||
|
name: "coolelectronics",
|
||||||
|
id: 696392247205298207n,
|
||||||
|
},
|
||||||
|
Av32000: {
|
||||||
|
name: "Av32000",
|
||||||
|
id: 593436735380127770n,
|
||||||
|
},
|
||||||
|
Kyuuhachi: {
|
||||||
|
name: "Kyuuhachi",
|
||||||
|
id: 236588665420251137n,
|
||||||
|
},
|
||||||
|
Elvyra: {
|
||||||
|
name: "Elvyra",
|
||||||
|
id: 708275751816003615n,
|
||||||
|
},
|
||||||
|
Inbestigator: {
|
||||||
|
name: "Inbestigator",
|
||||||
|
id: 761777382041714690n
|
||||||
|
},
|
||||||
|
newwares: {
|
||||||
|
name: "newwares",
|
||||||
|
id: 421405303951851520n
|
||||||
|
},
|
||||||
|
nakoyasha: {
|
||||||
|
name: "nakoyasha",
|
||||||
|
id: 222069018507345921n
|
||||||
|
},
|
||||||
|
Sqaaakoi: {
|
||||||
|
name: "Sqaaakoi",
|
||||||
|
id: 259558259491340288n
|
||||||
|
},
|
||||||
|
Byron: {
|
||||||
|
name: "byeoon",
|
||||||
|
id: 1167275288036655133n
|
||||||
|
}
|
||||||
|
} satisfies Record<string, Dev>);
|
||||||
|
|
||||||
|
export const EquicordDevs = Object.freeze({
|
||||||
nexpid: {
|
nexpid: {
|
||||||
name: "Nexpid",
|
name: "Nexpid",
|
||||||
id: 853550207039832084n
|
id: 853550207039832084n
|
||||||
|
@ -396,106 +467,34 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "thororen",
|
name: "thororen",
|
||||||
id: 848339671629299742n
|
id: 848339671629299742n
|
||||||
},
|
},
|
||||||
F53: {
|
|
||||||
name: "F53",
|
|
||||||
id: 280411966126948353n
|
|
||||||
},
|
|
||||||
philipbry: {
|
|
||||||
name: "philipbry",
|
|
||||||
id: 554994003318276106n
|
|
||||||
},
|
|
||||||
MrDiamond: {
|
MrDiamond: {
|
||||||
name: "MrDiamond",
|
name: "MrDiamond",
|
||||||
id: 523338295644782592n
|
id: 523338295644782592n
|
||||||
},
|
},
|
||||||
Shalev: {
|
|
||||||
name: "Shalev4R",
|
|
||||||
id: 1122950616520593428n
|
|
||||||
},
|
|
||||||
fres: {
|
fres: {
|
||||||
name: "fres",
|
name: "fres",
|
||||||
id: 843448897737064448n
|
id: 843448897737064448n
|
||||||
},
|
},
|
||||||
ImpishMoxxie: {
|
|
||||||
name: "Moxxie",
|
|
||||||
id: 712653921692155965n
|
|
||||||
},
|
|
||||||
nakoyasha: {
|
|
||||||
name: "nakoyasha",
|
|
||||||
id: 222069018507345921n
|
|
||||||
},
|
|
||||||
SimplyData: {
|
|
||||||
name: "SimplyData",
|
|
||||||
id: 301494563514613762n
|
|
||||||
},
|
|
||||||
arHSM: {
|
arHSM: {
|
||||||
name: "arHSM",
|
name: "arHSM",
|
||||||
id: 841509053422632990n
|
id: 841509053422632990n
|
||||||
},
|
},
|
||||||
Korbo: {
|
|
||||||
name: "Korbo",
|
|
||||||
id: 455856406420258827n
|
|
||||||
},
|
|
||||||
SaucyDuck: {
|
|
||||||
name: "SaucyDuck",
|
|
||||||
id: 1004904120056029256n
|
|
||||||
},
|
|
||||||
Dams: {
|
Dams: {
|
||||||
name: "Dams",
|
name: "Dams",
|
||||||
id: 769939285792653325n
|
id: 769939285792653325n
|
||||||
},
|
},
|
||||||
maisymoe: {
|
|
||||||
name: "maisy",
|
|
||||||
id: 257109471589957632n,
|
|
||||||
},
|
|
||||||
GeorgeV22: {
|
|
||||||
name: "GeorgeV22",
|
|
||||||
id: 261487490769092608n,
|
|
||||||
},
|
|
||||||
Grzesiek11: {
|
|
||||||
name: "Grzesiek11",
|
|
||||||
id: 368475654662127616n,
|
|
||||||
},
|
|
||||||
KawaiianPizza: {
|
KawaiianPizza: {
|
||||||
name: "KawaiianPizza",
|
name: "KawaiianPizza",
|
||||||
id: 501000986735673347n,
|
id: 501000986735673347n,
|
||||||
},
|
},
|
||||||
Gingi: {
|
|
||||||
name: "0xGingi",
|
|
||||||
id: 351859727568994314n,
|
|
||||||
},
|
|
||||||
Kyuuhachi: {
|
|
||||||
name: "Kyuuhachi",
|
|
||||||
id: 236588665420251137n,
|
|
||||||
},
|
|
||||||
Samwich: {
|
|
||||||
name: "Samwich",
|
|
||||||
id: 976176454511509554n,
|
|
||||||
},
|
|
||||||
Perny: {
|
Perny: {
|
||||||
name: "Perny",
|
name: "Perny",
|
||||||
id: 1101508982570504244n,
|
id: 1101508982570504244n,
|
||||||
},
|
},
|
||||||
coolelectronics: {
|
|
||||||
name: "coolelectronics",
|
|
||||||
id: 696392247205298207n,
|
|
||||||
},
|
|
||||||
varram: {
|
|
||||||
name: "varram",
|
|
||||||
id: 588937914423967766n
|
|
||||||
},
|
|
||||||
jaxx: {
|
jaxx: {
|
||||||
name: "Jaxx",
|
name: "Jaxx",
|
||||||
id: 901016640253227059n,
|
id: 901016640253227059n,
|
||||||
},
|
},
|
||||||
Mopi: {
|
|
||||||
name: "Mopi",
|
|
||||||
id: 1022189106614243350n
|
|
||||||
},
|
|
||||||
Av32000: {
|
|
||||||
name: "Av32000",
|
|
||||||
id: 593436735380127770n,
|
|
||||||
},
|
|
||||||
Balaclava: {
|
Balaclava: {
|
||||||
name: "Balaclava",
|
name: "Balaclava",
|
||||||
id: 854886148455399436n
|
id: 854886148455399436n
|
||||||
|
@ -504,30 +503,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "Moxxie",
|
name: "Moxxie",
|
||||||
id: 712653921692155965n,
|
id: 712653921692155965n,
|
||||||
},
|
},
|
||||||
Ethan: {
|
|
||||||
name: "Ethan",
|
|
||||||
id: 721717126523781240n,
|
|
||||||
},
|
|
||||||
Elvyra: {
|
|
||||||
name: "Elvyra",
|
|
||||||
id: 708275751816003615n,
|
|
||||||
},
|
|
||||||
dat_insanity: {
|
dat_insanity: {
|
||||||
name: "dat_insanity",
|
name: "dat_insanity",
|
||||||
id: 0n,
|
id: 0n,
|
||||||
},
|
},
|
||||||
newwares: {
|
|
||||||
name: "newwares",
|
|
||||||
id: 421405303951851520n
|
|
||||||
},
|
|
||||||
Trwy: {
|
|
||||||
name: "trey",
|
|
||||||
id: 354427199023218689n
|
|
||||||
},
|
|
||||||
Inbestigator: {
|
|
||||||
name: "Inbestigator",
|
|
||||||
id: 761777382041714690n
|
|
||||||
},
|
|
||||||
coolesding: {
|
coolesding: {
|
||||||
name: "cooles",
|
name: "cooles",
|
||||||
id: 406084422308331522n,
|
id: 406084422308331522n,
|
||||||
|
@ -540,10 +519,6 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "puv",
|
name: "puv",
|
||||||
id: 469441552251355137n
|
id: 469441552251355137n
|
||||||
},
|
},
|
||||||
Sqaaakoi: {
|
|
||||||
name: "Sqaaakoi",
|
|
||||||
id: 259558259491340288n,
|
|
||||||
},
|
|
||||||
HAPPY_ENDERMAN: {
|
HAPPY_ENDERMAN: {
|
||||||
name: "Happy enderman",
|
name: "Happy enderman",
|
||||||
id: 1083437693347827764n
|
id: 1083437693347827764n
|
||||||
|
@ -560,10 +535,6 @@ export const Devs = /* #__PURE__*/ Object.freeze({
|
||||||
name: "MaxHerbold",
|
name: "MaxHerbold",
|
||||||
id: 1189527130611138663n,
|
id: 1189527130611138663n,
|
||||||
},
|
},
|
||||||
Byron: {
|
|
||||||
name: "byeoon",
|
|
||||||
id: 1167275288036655133n,
|
|
||||||
},
|
|
||||||
Combatmaster: {
|
Combatmaster: {
|
||||||
name: "Combatmaster331",
|
name: "Combatmaster331",
|
||||||
id: 790562534503612437n
|
id: 790562534503612437n
|
||||||
|
|
|
@ -162,4 +162,4 @@ export function useFixedTimer({ interval = 1000, initialTime = Date.now() }: Fix
|
||||||
}, [initialTime]);
|
}, [initialTime]);
|
||||||
|
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,4 +38,4 @@ export interface PassiveUpdateState {
|
||||||
id: string;
|
id: string;
|
||||||
})[];
|
})[];
|
||||||
voiceStates?: VoiceState[];
|
voiceStates?: VoiceState[];
|
||||||
}
|
}
|
||||||
|
|
2
src/webpack/common/types/voicestate.d.ts
vendored
2
src/webpack/common/types/voicestate.d.ts
vendored
|
@ -18,4 +18,4 @@ export interface VoiceState {
|
||||||
sessionId: string;
|
sessionId: string;
|
||||||
suppress: boolean;
|
suppress: boolean;
|
||||||
requestToSpeakTimestamp: string | null;
|
requestToSpeakTimestamp: string | null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue