diff --git a/packages/discord-types/enums/index.ts b/packages/discord-types/enums/index.ts index 0ab498877..3d80895cd 100644 --- a/packages/discord-types/enums/index.ts +++ b/packages/discord-types/enums/index.ts @@ -1,3 +1,4 @@ +export * from "./channel"; export * from "./commands"; export * from "./messages"; -export * from "./channel"; \ No newline at end of file +export * from "./misc"; diff --git a/packages/discord-types/enums/misc.ts b/packages/discord-types/enums/misc.ts new file mode 100644 index 000000000..d1419ba3e --- /dev/null +++ b/packages/discord-types/enums/misc.ts @@ -0,0 +1,4 @@ +export const enum CloudUploadPlatform { + REACT_NATIVE = 0, + WEB = 1, +} diff --git a/packages/discord-types/src/index.d.ts b/packages/discord-types/src/index.d.ts index d302e326f..10a46a020 100644 --- a/packages/discord-types/src/index.d.ts +++ b/packages/discord-types/src/index.d.ts @@ -4,6 +4,7 @@ export * from "./components"; export * from "./flux"; export * from "./fluxEvents"; export * from "./menu"; +export * from "./modules"; export * from "./stores"; export * from "./passiveupdatestate"; export * from "./utils"; diff --git a/packages/discord-types/src/modules/CloudUpload.d.ts b/packages/discord-types/src/modules/CloudUpload.d.ts new file mode 100644 index 000000000..02192ed59 --- /dev/null +++ b/packages/discord-types/src/modules/CloudUpload.d.ts @@ -0,0 +1,74 @@ +import EventEmitter from "events"; +import { CloudUploadPlatform } from "../../enums"; + +interface BaseUploadItem { + platform: CloudUploadPlatform; + id?: string; + origin?: string; + isThumbnail?: boolean; + clip?: unknown; +} + +export interface ReactNativeUploadItem extends BaseUploadItem { + platform: CloudUploadPlatform.REACT_NATIVE; + uri: string; + filename?: string; + mimeType?: string; + durationSecs?: number; + waveform?: string; + isRemix?: boolean; +} + +export interface WebUploadItem extends BaseUploadItem { + platform: CloudUploadPlatform.WEB; + file: File; +} + +export type CloudUploadItem = ReactNativeUploadItem | WebUploadItem; + +export class CloudUpload extends EventEmitter { + constructor(item: CloudUploadItem, channelId: string, showLargeMessageDialog?: boolean, reactNativeFileIndex?: number); + + channelId: string; + classification: string; + clip: unknown; + contentHash: unknown; + currentSize: number; + description: string | null; + durationSecs: number | undefined; + etag: string | undefined; + error: unknown; + filename: string; + id: string; + isImage: boolean; + isRemix: boolean | undefined; + isThumbnail: boolean; + isVideo: boolean; + item: { + file: File; + platform: CloudUploadPlatform; + origin: string; + }; + loaded: number; + mimeType: string; + origin: string; + postCompressionSize: number | undefined; + preCompressionSize: number; + responseUrl: string; + sensitive: boolean; + showLargeMessageDialog: boolean; + spoiler: boolean; + startTime: number; + status: "NOT_STARTED" | "STARTED" | "UPLOADING" | "ERROR" | "COMPLETED" | "CANCELLED" | "REMOVED_FROM_MSG_DRAFT"; + uniqueId: string; + uploadedFilename: string; + waveform: string | undefined; + + // there are many more methods than just these but I didn't find them particularly useful + upload(): Promise; + cancel(): void; + delete(): Promise; + getSize(): number; + maybeConvertToWebP(): Promise; + removeFromMsgDraft(): void; +} diff --git a/packages/discord-types/src/modules/index.d.ts b/packages/discord-types/src/modules/index.d.ts new file mode 100644 index 000000000..fe0c1e248 --- /dev/null +++ b/packages/discord-types/src/modules/index.d.ts @@ -0,0 +1 @@ +export * from "./CloudUpload"; diff --git a/src/api/MessageEvents.ts b/src/api/MessageEvents.ts index b08cb114e..bf4efd2d5 100644 --- a/src/api/MessageEvents.ts +++ b/src/api/MessageEvents.ts @@ -17,7 +17,7 @@ */ import { Logger } from "@utils/Logger"; -import type { Channel, CustomEmoji, Message } from "@vencord/discord-types"; +import type { Channel, CloudUpload, CustomEmoji, Message } from "@vencord/discord-types"; import { MessageStore } from "@webpack/common"; import type { Promisable } from "type-fest"; @@ -30,32 +30,6 @@ export interface MessageObject { tts: boolean; } -export interface Upload { - classification: string; - currentSize: number; - description: string | null; - filename: string; - id: string; - isImage: boolean; - isRemix?: boolean; - isThumbnail: boolean; - isVideo: boolean; - item: { - file: File; - platform: number; - }; - loaded: number; - mimeType: string; - preCompressionSize: number; - responseUrl: string; - sensitive: boolean; - showLargeMessageDialog: boolean; - spoiler: boolean; - status: "NOT_STARTED" | "STARTED" | "UPLOADING" | "ERROR" | "COMPLETED" | "CANCELLED"; - uniqueId: string; - uploadedFilename: string; -} - export interface MessageReplyOptions { messageReference: Message["messageReference"]; allowedMentions?: { @@ -68,7 +42,7 @@ export interface MessageReplyOptions { export interface MessageOptions { stickers?: string[]; - uploads?: Upload[]; + uploads?: CloudUpload[]; replyOptions: MessageReplyOptions; content: string; channel: Channel; diff --git a/src/api/Notices.ts b/src/api/Notices.tsx similarity index 73% rename from src/api/Notices.ts rename to src/api/Notices.tsx index cd5d58767..5285ca148 100644 --- a/src/api/Notices.ts +++ b/src/api/Notices.tsx @@ -16,7 +16,10 @@ * along with this program. If not, see . */ +import ErrorBoundary from "@components/ErrorBoundary"; +import { isPrimitiveReactNode } from "@utils/react"; import { waitFor } from "@webpack"; +import { ReactNode } from "react"; let NoticesModule: any; waitFor(m => m.show && m.dismiss && !m.suppressAll, m => NoticesModule = m); @@ -36,7 +39,11 @@ export function nextNotice() { } } -export function showNotice(message: string, buttonText: string, onOkClick: () => void) { - noticesQueue.push(["GENERIC", message, buttonText, onOkClick]); +export function showNotice(message: ReactNode, buttonText: string, onOkClick: () => void) { + const notice = isPrimitiveReactNode(message) + ? message + : "Error Showing Notice"}>{message}; + + noticesQueue.push(["GENERIC", notice, buttonText, onOkClick]); if (!currentNotice) nextNotice(); } diff --git a/src/debug/runReporter.ts b/src/debug/runReporter.ts index 0bf5a5418..a7292013b 100644 --- a/src/debug/runReporter.ts +++ b/src/debug/runReporter.ts @@ -4,9 +4,9 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import { initWs } from "@plugins/devCompanion.dev/initWs"; import { Logger } from "@utils/Logger"; import * as Webpack from "@webpack"; -import { initWs } from "plugins/devCompanion.dev/initWs"; import { getBuildNumber, patchTimings } from "webpack/patchWebpack"; import { addPatch, patches } from "../plugins"; diff --git a/src/equicordplugins/alwaysExpandProfiles/index.ts b/src/equicordplugins/alwaysExpandProfiles/index.ts index f54c2904a..e06f8179c 100644 --- a/src/equicordplugins/alwaysExpandProfiles/index.ts +++ b/src/equicordplugins/alwaysExpandProfiles/index.ts @@ -5,7 +5,7 @@ */ import { migratePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import { openUserProfile } from "@utils/discord"; import definePlugin from "@utils/types"; import { User } from "@vencord/discord-types"; @@ -14,7 +14,7 @@ migratePluginSettings("AlwaysExpandProfiles", "AlwaysExpandProfile"); export default definePlugin({ name: "AlwaysExpandProfiles", description: "Always expands profile popouts to the full modal", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], patches: [ { find: '"view-profile"', diff --git a/src/equicordplugins/betterActivities/index.tsx b/src/equicordplugins/betterActivities/index.tsx index 86fc8c7ed..797e57ccf 100644 --- a/src/equicordplugins/betterActivities/index.tsx +++ b/src/equicordplugins/betterActivities/index.tsx @@ -7,7 +7,7 @@ import "./styles.css"; import { migratePluginSettings } from "@api/Settings"; -import { Devs, EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { patchActivityList } from "./patch-helpers/activityList"; @@ -19,12 +19,7 @@ migratePluginSettings("BetterActivities", "MemberListActivities"); export default definePlugin({ name: "BetterActivities", description: "Shows activity icons in the member list and allows showing all activities", - authors: [ - Devs.D3SOX, - Devs.Arjix, - Devs.AutumnVN, - EquicordDevs.thororen - ], + authors: [Devs.D3SOX, Devs.Arjix, Devs.AutumnVN, Devs.thororen], tags: ["activity"], settings, diff --git a/src/equicordplugins/betterCommands/index.ts b/src/equicordplugins/betterCommands/index.ts index 9212c6c14..c6044c384 100644 --- a/src/equicordplugins/betterCommands/index.ts +++ b/src/equicordplugins/betterCommands/index.ts @@ -5,7 +5,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ @@ -19,7 +19,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterCommands", description: "Enhances the command system with miscellaneous improvements.", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/bypassPinPrompt/index.ts b/src/equicordplugins/bypassPinPrompt/index.ts index d050f723c..952feb032 100644 --- a/src/equicordplugins/bypassPinPrompt/index.ts +++ b/src/equicordplugins/bypassPinPrompt/index.ts @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; export default definePlugin({ name: "BypassPinPrompt", description: "Bypass the pin prompt when using the pin functions", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], patches: [ { find: '"Channel Pins"', diff --git a/src/equicordplugins/channelBadges/index.tsx b/src/equicordplugins/channelBadges/index.tsx index dba79c867..fccd21bd3 100644 --- a/src/equicordplugins/channelBadges/index.tsx +++ b/src/equicordplugins/channelBadges/index.tsx @@ -6,7 +6,7 @@ import "./style.css"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; import { Channel } from "@vencord/discord-types"; import { GuildStore, React, SelectedGuildStore } from "@webpack/common"; @@ -32,7 +32,7 @@ function renderBadge(id: number, title: string) { export default definePlugin({ name: "ChannelBadges", description: "Adds badges to channels based on their type", - authors: [EquicordDevs.creations, EquicordDevs.thororen], + authors: [EquicordDevs.creations, Devs.thororen], settings, patches: [ // TY TypingIndicator diff --git a/src/equicordplugins/characterCounter/index.tsx b/src/equicordplugins/characterCounter/index.tsx index 59b5f348d..e6cbbd577 100644 --- a/src/equicordplugins/characterCounter/index.tsx +++ b/src/equicordplugins/characterCounter/index.tsx @@ -7,7 +7,7 @@ import "./style.css"; import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { UserStore } from "@webpack/common"; @@ -22,7 +22,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "CharacterCounter", description: "Adds a character counter to the chat input", - authors: [EquicordDevs.creations, EquicordDevs.Panniku, EquicordDevs.thororen], + authors: [EquicordDevs.creations, EquicordDevs.Panniku, Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/discordDevBanner/index.tsx b/src/equicordplugins/discordDevBanner/index.tsx index a0c480ee9..0d39a4245 100644 --- a/src/equicordplugins/discordDevBanner/index.tsx +++ b/src/equicordplugins/discordDevBanner/index.tsx @@ -6,7 +6,7 @@ import "./styles.css"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; import { makeDevBanner, settings } from "./components"; @@ -14,7 +14,7 @@ import { makeDevBanner, settings } from "./components"; export default definePlugin({ name: "DiscordDevBanner", description: "Enables the Discord developer banner, in which displays the build-ID", - authors: [EquicordDevs.KrystalSkull, EquicordDevs.thororen], + authors: [EquicordDevs.KrystalSkull, Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/equicordHelper/index.tsx b/src/equicordplugins/equicordHelper/index.tsx index c7a55d132..bd9672f90 100644 --- a/src/equicordplugins/equicordHelper/index.tsx +++ b/src/equicordplugins/equicordHelper/index.tsx @@ -18,7 +18,7 @@ import "@equicordplugins/_misc/styles.css"; -import { EQUICORD_HELPERS, EquicordDevs, GUILD_ID } from "@utils/constants"; +import { Devs, EQUICORD_HELPERS, EquicordDevs, GUILD_ID } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin from "@utils/types"; import { Button, ChannelStore, Flex, Forms, GuildMemberStore, showToast, Toasts } from "@webpack/common"; @@ -30,7 +30,7 @@ import { toggleEnabled } from "./utils"; export default definePlugin({ name: "EquicordHelper", description: "Fixes some misc issues with discord", - authors: [EquicordDevs.thororen, EquicordDevs.nyx, EquicordDevs.Naibuu], + authors: [Devs.thororen, EquicordDevs.nyx, EquicordDevs.Naibuu], settingsAboutComponent: () => <> This plugin was created to allow us as the Equicord Team & Contributors diff --git a/src/equicordplugins/equissant/index.ts b/src/equicordplugins/equissant/index.ts index eb484ac64..1975caf77 100644 --- a/src/equicordplugins/equissant/index.ts +++ b/src/equicordplugins/equissant/index.ts @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; let clickCount = 0; @@ -33,7 +33,7 @@ function play() { export default definePlugin({ name: "Equissant", description: "Crossant every 10 clicks :trolley:", - authors: [EquicordDevs.SomeAspy, EquicordDevs.thororen], + authors: [EquicordDevs.SomeAspy, Devs.thororen], start() { document.addEventListener("click", play); }, diff --git a/src/equicordplugins/fastDeleteChannels/index.tsx b/src/equicordplugins/fastDeleteChannels/index.tsx index b112ca46a..a12c4c77c 100644 --- a/src/equicordplugins/fastDeleteChannels/index.tsx +++ b/src/equicordplugins/fastDeleteChannels/index.tsx @@ -5,7 +5,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { Constants, PermissionsBits, PermissionStore, React, RestAPI, useCallback, useEffect, useState } from "@webpack/common"; @@ -74,7 +74,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "FastDeleteChannels", description: "Adds a trash icon to delete channels", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, patches: [ // TY TypingIndicator diff --git a/src/equicordplugins/fixFileExtensions/index.tsx b/src/equicordplugins/fixFileExtensions/index.tsx index b570d8287..7c05e1a3f 100644 --- a/src/equicordplugins/fixFileExtensions/index.tsx +++ b/src/equicordplugins/fixFileExtensions/index.tsx @@ -7,7 +7,7 @@ import { Upload } from "@api/MessageEvents"; import { Settings } from "@api/Settings"; import { tarExtMatcher } from "@plugins/anonymiseFileNames"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { ReporterTestable } from "@utils/types"; const extensionMap = { @@ -26,7 +26,7 @@ export const reverseExtensionMap = Object.entries(extensionMap).reduce((acc, [ta export default definePlugin({ name: "FixFileExtensions", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], description: "Fixes file extensions by renaming them to a compatible supported format if possible", reporterTestable: ReporterTestable.None, patches: [ diff --git a/src/equicordplugins/forwardAnywhere/index.ts b/src/equicordplugins/forwardAnywhere/index.ts index 42d3e08a1..0f38b467b 100644 --- a/src/equicordplugins/forwardAnywhere/index.ts +++ b/src/equicordplugins/forwardAnywhere/index.ts @@ -5,7 +5,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import { sendMessage } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; import { Message } from "@vencord/discord-types"; @@ -25,7 +25,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ForwardAnywhere", description: "If a forward fails send it as a normal message also allows nsfw forwards", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/guildPickerDumper/index.tsx b/src/equicordplugins/guildPickerDumper/index.tsx index 00063f5e6..8fa7c34de 100644 --- a/src/equicordplugins/guildPickerDumper/index.tsx +++ b/src/equicordplugins/guildPickerDumper/index.tsx @@ -67,7 +67,7 @@ migratePluginSettings("GuildPickerDumper", "EmojiDumper"); export default definePlugin({ name: "GuildPickerDumper", description: "Context menu to dump and download a server's emojis and stickers.", - authors: [EquicordDevs.Cortex, Devs.Samwich, EquicordDevs.Synth, EquicordDevs.thororen], + authors: [EquicordDevs.Cortex, Devs.Samwich, EquicordDevs.Synth, Devs.thororen], contextMenus: { "guild-context": Patch, "guild-header-popout": Patch diff --git a/src/equicordplugins/guildTagSettings/index.ts b/src/equicordplugins/guildTagSettings/index.ts index 47db34d96..715dc4f2a 100644 --- a/src/equicordplugins/guildTagSettings/index.ts +++ b/src/equicordplugins/guildTagSettings/index.ts @@ -20,7 +20,7 @@ import "@equicordplugins/_misc/styles.css"; import { definePluginSettings } from "@api/Settings"; import { disableStyle, enableStyle } from "@api/Styles"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import clanBadges from "../_misc/clanBadges.css?managed"; @@ -46,7 +46,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "GuildTagSettings", description: "Settings for Guild Tags", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/instantScreenshare/index.tsx b/src/equicordplugins/instantScreenshare/index.tsx index 21b5a833d..b98823ec6 100644 --- a/src/equicordplugins/instantScreenshare/index.tsx +++ b/src/equicordplugins/instantScreenshare/index.tsx @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { Devs, EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { VoiceState } from "@vencord/discord-types"; import { findByCodeLazy } from "@webpack"; @@ -38,7 +38,7 @@ async function autoStartStream() { export default definePlugin({ name: "InstantScreenshare", description: "Instantly screenshare when joining a voice channel", - authors: [Devs.HAHALOSAH, EquicordDevs.thororen], + authors: [Devs.HAHALOSAH, Devs.thororen], settings, flux: { async VOICE_STATE_UPDATES({ voiceStates }: { voiceStates: VoiceState[]; }) { diff --git a/src/equicordplugins/moreCommands/index.ts b/src/equicordplugins/moreCommands/index.ts index 19560cfee..7423f6f81 100644 --- a/src/equicordplugins/moreCommands/index.ts +++ b/src/equicordplugins/moreCommands/index.ts @@ -30,7 +30,7 @@ migratePluginSettings("MoreCommands", "CuteAnimeBoys", "CuteNekos", "CutePats", export default definePlugin({ name: "MoreCommands", description: "Adds various fun and useful commands", - authors: [Devs.Arjix, Devs.amy, Devs.Samu, EquicordDevs.zyqunix, EquicordDevs.ShadyGoat, EquicordDevs.thororen, Devs.Korbo], + authors: [Devs.Arjix, Devs.amy, Devs.Samu, EquicordDevs.zyqunix, EquicordDevs.ShadyGoat, Devs.thororen, Devs.Korbo], commands: [ ...choice, ...system, diff --git a/src/equicordplugins/musicControls/index.tsx b/src/equicordplugins/musicControls/index.tsx index d76237c33..0e5cf40a7 100644 --- a/src/equicordplugins/musicControls/index.tsx +++ b/src/equicordplugins/musicControls/index.tsx @@ -34,7 +34,7 @@ import { YtmPlayer } from "./youtubeMusic/PlayerComponent"; export default definePlugin({ name: "MusicControls", description: "Music Controls and Lyrics for multiple services ", - authors: [Devs.Ven, Devs.afn, Devs.KraXen72, Devs.Av32000, Devs.nin0dev, EquicordDevs.thororen, EquicordDevs.vmohammad, Devs.Joona], + authors: [Devs.Ven, Devs.afn, Devs.KraXen72, Devs.Av32000, Devs.nin0dev, Devs.thororen, EquicordDevs.vmohammad, Devs.Joona], settings, tags: [ // Spotify diff --git a/src/equicordplugins/musicControls/spotify/PlayerComponent.tsx b/src/equicordplugins/musicControls/spotify/PlayerComponent.tsx index 1c4a2d0a9..0b842d990 100644 --- a/src/equicordplugins/musicControls/spotify/PlayerComponent.tsx +++ b/src/equicordplugins/musicControls/spotify/PlayerComponent.tsx @@ -21,7 +21,7 @@ import "./spotifyStyles.css"; import { Settings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import { Flex } from "@components/Flex"; -import { ImageIcon, LinkIcon, OpenExternalIcon } from "@components/Icons"; +import { CopyIcon, ImageIcon, LinkIcon, OpenExternalIcon } from "@components/Icons"; import { debounce } from "@shared/debounce"; import { openImageModal } from "@utils/discord"; import { classes, copyWithToast } from "@utils/misc"; @@ -76,27 +76,28 @@ function Button(props: React.ButtonHTMLAttributes) { ); } -function CopyContextMenu({ name, path }: { name: string; path: string; }) { - const copyId = `spotify-copy-${name}`; - const openId = `spotify-open-${name}`; - +function CopyContextMenu({ name, type, path }: { type: string; name: string; path: string; }) { return ( FluxDispatcher.dispatch({ type: "CONTEXT_MENU_CLOSE" })} - aria-label={`Spotify ${name} Menu`} + navId="vc-spotify-menu" + onClose={ContextMenuApi.closeContextMenu} + aria-label={`Spotify ${type} Menu`} > copyWithToast(name)} + icon={CopyIcon} + /> + copyWithToast("https://open.spotify.com" + path)} icon={LinkIcon} /> SpotifyStore.openExternal(path)} icon={OpenExternalIcon} /> @@ -104,11 +105,6 @@ function CopyContextMenu({ name, path }: { name: string; path: string; }) { ); } -function makeContextMenu(name: string, path: string) { - return (e: React.MouseEvent) => - ContextMenuApi.openContextMenu(e, () => ); -} - function Controls() { const [isPlaying, shuffle, repeat] = useStateFromStores( [SpotifyStore], @@ -259,13 +255,14 @@ function AlbumContextMenu({ track }: { track: Track; }) { ); } -function makeLinkProps(name: string, condition: unknown, path: string) { +function makeLinkProps(type: "Song" | "Artist" | "Album", condition: unknown, name: string, path: string) { if (!condition) return {}; return { role: "link", onClick: () => SpotifyStore.openExternal(path), - onContextMenu: makeContextMenu(name, path) + onContextMenu: e => + ContextMenuApi.openContextMenu(e, () => ) } satisfies React.HTMLAttributes; } @@ -306,7 +303,7 @@ function Info({ track }: { track: Track; }) { id={cl("song-title")} className={cl("ellipoverflow")} title={track.name} - {...makeLinkProps("Song", track.id, `/track/${track.id}`)} + {...makeLinkProps("Song", track.id, track.name, `/track/${track.id}`)} > {track.name} @@ -319,7 +316,7 @@ function Info({ track }: { track: Track; }) { className={cl("artist")} style={{ fontSize: "inherit" }} title={a.name} - {...makeLinkProps("Artist", a.id, `/artist/${a.id}`)} + {...makeLinkProps("Artist", a.id, a.name, `/artist/${a.id}`)} > {a.name} @@ -336,7 +333,7 @@ function Info({ track }: { track: Track; }) { className={cl("album")} style={{ fontSize: "inherit" }} title={track.album.name} - {...makeLinkProps("Album", track.album.id, `/album/${track.album.id}`)} + {...makeLinkProps("Album", track.album.id, track.album.name, `/album/${track.album.id}`)} > {track.album.name} diff --git a/src/equicordplugins/noNitroUpsell/index.ts b/src/equicordplugins/noNitroUpsell/index.ts index a45d7a975..e4dba7699 100644 --- a/src/equicordplugins/noNitroUpsell/index.ts +++ b/src/equicordplugins/noNitroUpsell/index.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { User } from "@vencord/discord-types"; import { UserStore } from "@webpack/common"; @@ -36,7 +36,7 @@ function ready(user: ModifiedUser) { export default definePlugin({ name: "NoNitroUpsell", description: "Removes ALL of Discord's nitro upsells by tricking the client into thinking you have nitro.", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], patches: [ { find: "#{intl::USER_PROFILE_ENTRY_POINTS_AMP_UP_YOUR_PROFILE}", diff --git a/src/equicordplugins/randomVoice/index.tsx b/src/equicordplugins/randomVoice/index.tsx index 63977609e..7d82d9a37 100644 --- a/src/equicordplugins/randomVoice/index.tsx +++ b/src/equicordplugins/randomVoice/index.tsx @@ -8,7 +8,7 @@ import { definePluginSettings } from "@api/Settings"; import { disableStyle, enableStyle } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; import { debounce } from "@shared/debounce"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { makeRange, OptionType } from "@utils/types"; import { findByCode, findByProps, findByPropsLazy, findComponentByCodeLazy } from "@webpack"; import { ChannelRouter, ChannelStore, ContextMenuApi, GuildStore, MediaEngineStore, Menu, PermissionsBits, PermissionStore, React, SelectedChannelStore, Toasts, UserStore, VoiceActions, VoiceStateStore } from "@webpack/common"; @@ -162,7 +162,7 @@ interface VoiceState { export default definePlugin({ name: "RandomVoice", description: "Adds a Button near the Mute button to join a random voice call.", - authors: [EquicordDevs.xijexo, EquicordDevs.omaw, EquicordDevs.thororen], + authors: [EquicordDevs.xijexo, EquicordDevs.omaw, Devs.thororen], patches: [ { find: "#{intl::ACCOUNT_SPEAKING_WHILE_MUTED}", diff --git a/src/equicordplugins/saveFavoriteGIFs/index.tsx b/src/equicordplugins/saveFavoriteGIFs/index.tsx index 8d263b78b..668bdbde4 100644 --- a/src/equicordplugins/saveFavoriteGIFs/index.tsx +++ b/src/equicordplugins/saveFavoriteGIFs/index.tsx @@ -6,7 +6,7 @@ import { ChatBarButton, ChatBarButtonFactory } from "@api/ChatButtons"; import { showNotification } from "@api/Notifications"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { saveFile } from "@utils/web"; import { findComponentByCodeLazy } from "@webpack"; @@ -56,6 +56,6 @@ const button: ChatBarButtonFactory = ({ isMainChat }) => { export default definePlugin({ name: "SaveFavoriteGIFs", description: "Save favorite GIF urls to a file", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], renderChatBarButton: button, }); diff --git a/src/equicordplugins/soundBoardLogger/index.tsx b/src/equicordplugins/soundBoardLogger/index.tsx index a779b69ad..369b2137e 100644 --- a/src/equicordplugins/soundBoardLogger/index.tsx +++ b/src/equicordplugins/soundBoardLogger/index.tsx @@ -20,7 +20,7 @@ import { getListeners } from "./utils"; export default definePlugin({ name: "SoundBoardLogger", - authors: [Devs.Moxxie, EquicordDevs.Fres, Devs.amy, EquicordDevs.thororen], + authors: [Devs.Moxxie, EquicordDevs.Fres, Devs.amy, Devs.thororen], description: "Logs all soundboards that are played in a voice chat and allows you to download them", dependencies: ["ChatInputButtonAPI"], patches: [ diff --git a/src/equicordplugins/spotifyActivityToggle/index.tsx b/src/equicordplugins/spotifyActivityToggle/index.tsx index ebee29f76..ab59fd249 100644 --- a/src/equicordplugins/spotifyActivityToggle/index.tsx +++ b/src/equicordplugins/spotifyActivityToggle/index.tsx @@ -5,7 +5,7 @@ */ import ErrorBoundary from "@components/ErrorBoundary"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { findComponentByCodeLazy } from "@webpack"; import { Constants, React, RestAPI, useEffect, useState } from "@webpack/common"; @@ -81,7 +81,7 @@ function SpotifyActivityToggleButton() { export default definePlugin({ name: "SpotifyActivityToggle", description: "Adds a toggle button for Spotify activity visibility.", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], patches: [ { find: "#{intl::ACCOUNT_SPEAKING_WHILE_MUTED}", diff --git a/src/equicordplugins/statusWhilePlaying.desktop/index.ts b/src/equicordplugins/statusWhilePlaying.desktop/index.ts index 874055a29..00913ab20 100644 --- a/src/equicordplugins/statusWhilePlaying.desktop/index.ts +++ b/src/equicordplugins/statusWhilePlaying.desktop/index.ts @@ -6,7 +6,7 @@ import { definePluginSettings } from "@api/Settings"; import { getUserSettingLazy } from "@api/UserSettings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { PresenceStore, UserStore } from "@webpack/common"; @@ -41,7 +41,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "StatusWhilePlaying", description: "Automatically updates your online status (online, idle, dnd) when launching games", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, flux: { RUNNING_GAMES_CHANGE(event) { diff --git a/src/equicordplugins/unlimitedAccounts/index.ts b/src/equicordplugins/unlimitedAccounts/index.ts index faa3b3096..52dffe838 100644 --- a/src/equicordplugins/unlimitedAccounts/index.ts +++ b/src/equicordplugins/unlimitedAccounts/index.ts @@ -17,7 +17,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ @@ -32,7 +32,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "UnlimitedAccounts", description: "Increases the amount of accounts you can add.", - authors: [EquicordDevs.thororen], + authors: [Devs.thororen], settings, patches: [ { diff --git a/src/equicordplugins/userpfp/index.tsx b/src/equicordplugins/userpfp/index.tsx index fb8a4b198..bdc15e950 100644 --- a/src/equicordplugins/userpfp/index.tsx +++ b/src/equicordplugins/userpfp/index.tsx @@ -6,7 +6,7 @@ import { definePluginSettings } from "@api/Settings"; import { Link } from "@components/Link"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { User } from "@vencord/discord-types"; @@ -29,7 +29,7 @@ export default definePlugin({ data, name: "UserPFP", description: "Allows you to use an animated avatar without Nitro", - authors: [EquicordDevs.nexpid, EquicordDevs.thororen], + authors: [EquicordDevs.nexpid, Devs.thororen], settings, settingsAboutComponent: () => ( <> diff --git a/src/equicordplugins/vcSupport/index.ts b/src/equicordplugins/vcSupport/index.ts index a7c958b05..391462061 100644 --- a/src/equicordplugins/vcSupport/index.ts +++ b/src/equicordplugins/vcSupport/index.ts @@ -4,7 +4,7 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import { isEquicordPluginDev, isPluginDev } from "@utils/misc"; import definePlugin from "@utils/types"; import { UserStore } from "@webpack/common"; @@ -12,7 +12,7 @@ import { UserStore } from "@webpack/common"; export default definePlugin({ name: "VCSupport", description: "Wumpus Dance + Support Warnings", - authors: [EquicordDevs.thororen, EquicordDevs.coolesding], + authors: [Devs.thororen, EquicordDevs.coolesding], required: true, start() { const selfId = UserStore.getCurrentUser()?.id; diff --git a/src/equicordplugins/voiceChannelLog.dev/index.tsx b/src/equicordplugins/voiceChannelLog.dev/index.tsx index da4662d13..5f8a20044 100644 --- a/src/equicordplugins/voiceChannelLog.dev/index.tsx +++ b/src/equicordplugins/voiceChannelLog.dev/index.tsx @@ -108,7 +108,7 @@ let clientOldChannelId: string | undefined; export default definePlugin({ name: "VoiceChannelLog", description: "Logs who joins and leaves voice channels", - authors: [Devs.Sqaaakoi, EquicordDevs.thororen, EquicordDevs.nyx], + authors: [Devs.Sqaaakoi, Devs.thororen, EquicordDevs.nyx], contextMenus: { "channel-context": patchChannelContextMenu }, diff --git a/src/equicordplugins/voiceJoinMessages/index.ts b/src/equicordplugins/voiceJoinMessages/index.ts index 845dd6e84..ae321763b 100644 --- a/src/equicordplugins/voiceJoinMessages/index.ts +++ b/src/equicordplugins/voiceJoinMessages/index.ts @@ -5,7 +5,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { Devs, EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import { humanFriendlyJoin } from "@utils/text"; import definePlugin, { OptionType } from "@utils/types"; import { Message, User } from "@vencord/discord-types"; @@ -104,7 +104,7 @@ let clientOldChannelId: string | undefined; export default definePlugin({ name: "VoiceJoinMessages", description: "Recieve client-side ephemeral messages when your friends join voice channels", - authors: [Devs.Sqaaakoi, EquicordDevs.thororen], + authors: [Devs.Sqaaakoi, Devs.thororen], settings, flux: { VOICE_STATE_UPDATES({ voiceStates }: { voiceStates: VoiceState[]; }) { diff --git a/src/globals.d.ts b/src/globals.d.ts index aad0d5448..cbbbdb0b4 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -65,6 +65,7 @@ declare global { */ export var DiscordNative: any; export var Vesktop: any; + export var Equibop: any; export var VesktopNative: any; interface Window extends Record { diff --git a/src/plugins/_api/messagePopover.ts b/src/plugins/_api/messagePopover.ts index a49658fb3..af8616732 100644 --- a/src/plugins/_api/messagePopover.ts +++ b/src/plugins/_api/messagePopover.ts @@ -27,7 +27,7 @@ export default definePlugin({ { find: "#{intl::MESSAGE_UTILITIES_A11Y_LABEL}", replacement: { - match: /(?<=:null),(.{0,40}togglePopout:.+?}\)),(.+?)\]}\):null,(?<=\((\i\.\i),{label:.+?:null,(\i)\?\(0,\i\.jsxs?\)\(\i\.Fragment.+?message:(\i).+?)/, + match: /(?<=\]\}\)),(.{0,40}togglePopout:.+?}\)),(.+?)\]}\):null,(?<=\((\i\.\i),{label:.+?:null,(\i)\?\(0,\i\.jsxs?\)\(\i\.Fragment.+?message:(\i).+?)/, replace: (_, ReactButton, PotionButton, ButtonComponent, showReactButton, message) => "" + `]}):null,Vencord.Api.MessagePopover._buildPopoverElements(${ButtonComponent},${message}),${showReactButton}?${ReactButton}:null,${showReactButton}&&${PotionButton},` } diff --git a/src/plugins/_core/supportHelper.tsx b/src/plugins/_core/supportHelper.tsx index b943dca9e..47601741a 100644 --- a/src/plugins/_core/supportHelper.tsx +++ b/src/plugins/_core/supportHelper.tsx @@ -165,7 +165,7 @@ function generatePluginList() { } if (enabledPlugins.length > 100 && !(isPluginDev(UserStore.getCurrentUser()?.id) || isEquicordPluginDev(UserStore.getCurrentUser()?.id))) { - return Alerts.show({ + Alerts.show({ title: "You are attempting to get support!", body: