@vencord/types 1.14.15 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/api/Badges.d.ts +1 -1
  2. package/api/Commands/index.d.ts +1 -1
  3. package/api/Commands/types.d.ts +1 -0
  4. package/api/Notifications/notificationLog.d.ts +1 -1
  5. package/api/Settings.d.ts +1 -0
  6. package/api/Themes.d.ts +2 -0
  7. package/components/Icons.d.ts +2 -0
  8. package/components/settings/QuickAction.d.ts +1 -0
  9. package/components/settings/tabs/plugins/{LinkIconButton.d.ts → PluginModalButtons.d.ts} +6 -4
  10. package/package.json +2 -2
  11. package/plugins/_api/badges/index.d.ts +1 -1
  12. package/plugins/_core/concatenatedComponentExtractor.d.ts +2 -1
  13. package/plugins/_core/noTrack.d.ts +19 -0
  14. package/plugins/autoDndWhilePlaying.discordDesktop/index.d.ts +3 -1
  15. package/plugins/betterFolders/index.d.ts +1 -1
  16. package/plugins/betterRoleContext/index.d.ts +1 -11
  17. package/plugins/betterSettings/index.d.ts +3 -3
  18. package/plugins/callTimer/index.d.ts +8 -9
  19. package/plugins/customCommands/index.d.ts +2 -1
  20. package/plugins/customCommands/settings.d.ts +1 -1
  21. package/plugins/decor/index.d.ts +5 -2
  22. package/plugins/fakeNitro/index.d.ts +10 -4
  23. package/plugins/messageLogger/index.d.ts +19 -1
  24. package/plugins/musicRichPresence/index.d.ts +281 -0
  25. package/plugins/musicRichPresence/lastfm.d.ts +2 -0
  26. package/plugins/musicRichPresence/listenbrainz.d.ts +3 -0
  27. package/plugins/noBlockedMessages/index.d.ts +1 -0
  28. package/plugins/previewMessage/index.d.ts +3 -0
  29. package/plugins/tenorGifSearch/index.d.ts +29 -0
  30. package/plugins/viewIcons/index.d.ts +4 -3
  31. package/plugins/webKeybinds.web/index.d.ts +31 -3
  32. package/plugins/webPWA.browser/index.d.ts +39 -0
  33. package/plugins/xsOverlay/native.d.ts +1 -0
  34. package/utils/TTLMap.d.ts +12 -0
  35. package/utils/constants.d.ts +28 -4
  36. package/utils/text.d.ts +2 -1
  37. package/utils/types.d.ts +5 -0
  38. package/webpack/common/components.d.ts +3 -1
  39. package/webpack/common/stores.d.ts +4 -4
  40. package/plugins/favGifSearch/index.d.ts +0 -87
  41. package/plugins/lastfmRichPresence/index.d.ts +0 -125
package/api/Badges.d.ts CHANGED
@@ -18,7 +18,7 @@ export interface ProfileBadge {
18
18
  /** Action to perform when you click the badge */
19
19
  onClick?(event: React.MouseEvent, props: ProfileBadge & BadgeUserArgs): void;
20
20
  /** Action to perform when you right click the badge */
21
- onContextMenu?(event: React.MouseEvent, props: BadgeUserArgs & BadgeUserArgs): void;
21
+ onContextMenu?(event: React.MouseEvent, props: ProfileBadge & BadgeUserArgs): void;
22
22
  /** Should the user display this badge? */
23
23
  shouldShow?(userInfo: BadgeUserArgs): boolean;
24
24
  /** Optional props (e.g. style) for the badge, ignored for component badges */
@@ -24,4 +24,4 @@ export declare const _handleCommand: never;
24
24
  */
25
25
  export declare function prepareOption<O extends CommandOption | VencordCommand>(opt: O): O;
26
26
  export declare function registerCommand<C extends VencordCommand>(command: C, plugin: string): void;
27
- export declare function unregisterCommand(name: string): boolean;
27
+ export declare function unregisterCommand(name: string, isSubCommands?: boolean): boolean;
@@ -2,4 +2,5 @@ import { Command } from "@vencord/discord-types";
2
2
  export { ApplicationCommandInputType, ApplicationCommandOptionType, ApplicationCommandType } from "@vencord/discord-types/enums";
3
3
  export interface VencordCommand extends Command {
4
4
  isVencordCommand?: boolean;
5
+ rootCommand?: VencordCommand;
5
6
  }
@@ -4,7 +4,7 @@ interface PersistentNotificationData extends Pick<NotificationData, "title" | "b
4
4
  id: string;
5
5
  }
6
6
  export declare function persistNotification(notification: NotificationData): Promise<void>;
7
- export declare function deleteNotification(timestamp: number): Promise<void>;
7
+ export declare function deleteNotification(id: string): Promise<void>;
8
8
  export declare function useLogs(): readonly [PersistentNotificationData[], boolean];
9
9
  export declare function NotificationLog({ log, pending }: {
10
10
  log: PersistentNotificationData[];
package/api/Settings.d.ts CHANGED
@@ -27,6 +27,7 @@ export interface Settings {
27
27
  plugins: {
28
28
  [plugin: string]: {
29
29
  enabled: boolean;
30
+ isFavorite?: boolean;
30
31
  [setting: string]: any;
31
32
  };
32
33
  };
package/api/Themes.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  import { ThemeStore } from "@vencord/discord-types";
2
2
  export declare function initQuickCssThemeStore(themeStore: ThemeStore): void;
3
+ export declare function addThemeChangeListener(listener: () => void): void;
4
+ export declare function removeThemeChangeListener(listener: () => void): void;
@@ -57,4 +57,6 @@ export declare function CloudUploadIcon(props: IconProps): JSX.Element;
57
57
  export declare function ClockIcon(props: IconProps): JSX.Element;
58
58
  export declare function DownArrow(props: IconProps): JSX.Element;
59
59
  export declare function RightArrow(props: IconProps): JSX.Element;
60
+ export declare function StarFilled(props: IconProps): JSX.Element;
61
+ export declare function StarOutlined(props: IconProps): JSX.Element;
60
62
  export {};
@@ -7,6 +7,7 @@ export interface QuickActionProps {
7
7
  text: ReactNode;
8
8
  action?: () => void;
9
9
  disabled?: boolean;
10
+ style?: React.CSSProperties;
10
11
  }
11
12
  export declare function QuickAction(props: QuickActionProps): import("react").JSX.Element;
12
13
  export declare function QuickActionCard(props: PropsWithChildren): import("react").JSX.Element;
@@ -1,10 +1,12 @@
1
- import "./LinkIconButton.css";
2
- export declare function GithubLinkIcon(): import("react").JSX.Element;
3
- export declare function WebsiteLinkIcon(): import("react").JSX.Element;
1
+ import "./PluginModalButtons.css";
4
2
  interface Props {
5
3
  text: string;
6
4
  href: string;
7
5
  }
8
- export declare const WebsiteButton: (props: Props) => import("react").JSX.Element;
9
6
  export declare const GithubButton: (props: Props) => import("react").JSX.Element;
7
+ export declare const WebsiteButton: (props: Props) => import("react").JSX.Element;
8
+ export declare function FavoriteButton({ isFavorite, onClick }: {
9
+ isFavorite: boolean;
10
+ onClick: () => void;
11
+ }): import("react").JSX.Element;
10
12
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vencord/types",
3
3
  "private": false,
4
- "version": "1.14.15",
4
+ "version": "1.15.1",
5
5
  "description": "",
6
6
  "types": "index.d.ts",
7
7
  "scripts": {
@@ -19,7 +19,7 @@
19
19
  "dependencies": {
20
20
  "@types/lodash": "4.17.19",
21
21
  "@types/node": "^26.0.1",
22
- "@vencord/discord-types": "^1.0.1",
22
+ "@vencord/discord-types": "^1.0.2",
23
23
  "highlight.js": "11.11.1",
24
24
  "moment": "^2.22.2",
25
25
  "ts-pattern": "^5.6.0",
@@ -45,7 +45,7 @@ declare const _default: {
45
45
  transform: "scale(0.9)";
46
46
  };
47
47
  };
48
- onContextMenu(event: import("react").MouseEvent<Element, MouseEvent>, badge: BadgeUserArgs): void;
48
+ onContextMenu(event: import("react").MouseEvent<Element, MouseEvent>, badge: ProfileBadge & BadgeUserArgs): void;
49
49
  onClick(): void;
50
50
  }[];
51
51
  } & Record<PropertyKey, any> & import("../../../utils/types").Plugin;
@@ -1,4 +1,4 @@
1
- import { setColorPicker, setCreateScroller } from "../../webpack/common";
1
+ import { setColorPicker, setCreateScroller, setRoleMemberPopout } from "../../webpack/common";
2
2
  declare const _default: {
3
3
  name: string;
4
4
  description: string;
@@ -22,5 +22,6 @@ declare const _default: {
22
22
  })[];
23
23
  setCreateScroller: typeof setCreateScroller;
24
24
  setColorPicker: typeof setColorPicker;
25
+ setRoleMemberPopout: typeof setRoleMemberPopout;
25
26
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
26
27
  export default _default;
@@ -42,5 +42,24 @@ declare const _default: {
42
42
  };
43
43
  startAt: StartAt.Init;
44
44
  start(): void;
45
+ analyticsTrackingStoreMaker(): {
46
+ requestDrain(): void;
47
+ submitEventsImmediately(): Promise<void>;
48
+ getName(): string;
49
+ addChangeListener(callback: import("@vencord/discord-types").Callback): void;
50
+ addConditionalChangeListener(callback: () => boolean, preemptive?: boolean): void;
51
+ addReactChangeListener(callback: import("@vencord/discord-types").Callback): void;
52
+ removeChangeListener(callback: import("@vencord/discord-types").Callback): void;
53
+ removeReactChangeListener(callback: import("@vencord/discord-types").Callback): void;
54
+ doEmitChanges(event: import("@vencord/discord-types").FluxEvent): void;
55
+ emitChange(): void;
56
+ getDispatchToken(): string;
57
+ initialize(): void;
58
+ initializeIfNeeded(): void;
59
+ mustEmitChanges(callback?: import("@vencord/discord-types").ActionHandler): void;
60
+ registerActionHandlers(actionHandlers: import("@vencord/discord-types").ActionHandlers, band?: number): void;
61
+ syncWith(stores: import("@vencord/discord-types").FluxStore[], callback: import("@vencord/discord-types").SyncCallback, timeout?: number): void;
62
+ waitFor(...stores: import("@vencord/discord-types").FluxStore[]): void;
63
+ };
45
64
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
46
65
  export default _default;
@@ -23,7 +23,9 @@ declare const _default: {
23
23
  };
24
24
  }, {}>;
25
25
  flux: {
26
- RUNNING_GAMES_CHANGE({ games }: any): void;
26
+ RUNNING_GAMES_CHANGE({ games }: any): Promise<void>;
27
27
  };
28
+ start(): void;
29
+ stop(): void;
28
30
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
29
31
  export default _default;
@@ -147,7 +147,7 @@ declare const _default: {
147
147
  replacement: ({
148
148
  predicate: () => boolean;
149
149
  match: RegExp;
150
- replace: (_: string, isExpanded: string) => string;
150
+ replace: (m: string, isExpanded: string) => string;
151
151
  } | {
152
152
  predicate: () => boolean;
153
153
  match: RegExp;
@@ -1,14 +1,5 @@
1
1
  import { OptionType } from "../../utils/types";
2
- import { Guild, PopoutProps, Role } from "@vencord/discord-types";
3
- import { ComponentType } from "react";
4
- interface RoleMemberPopoutProps {
5
- popoutProps: PopoutProps;
6
- guildId: string;
7
- channelId: string;
8
- roleId: string;
9
- }
10
- type RoleMemberPopout = ComponentType<RoleMemberPopoutProps>;
11
- declare let RoleMemberPopout: RoleMemberPopout;
2
+ import { Guild, Role } from "@vencord/discord-types";
12
3
  export declare function buildExtraRoleContextMenuItems(role: Role, guild: Guild, popoutRef?: React.RefObject<any>): {
13
4
  before: import("react").JSX.Element[];
14
5
  after: import("react").JSX.Element[];
@@ -50,7 +41,6 @@ declare const _default: {
50
41
  };
51
42
  }[];
52
43
  start(): void;
53
- RoleMembers: RoleMemberPopout;
54
44
  contextMenus: {
55
45
  "dev-context"(children: (import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null)[], { id }: {
56
46
  id: string;
@@ -1,5 +1,5 @@
1
1
  import { OptionType } from "../../utils/types";
2
- import type { HTMLAttributes, ReactNode } from "react";
2
+ import type { HTMLAttributes, ReactElement, ReactNode } from "react";
3
3
  interface LayerProps extends HTMLAttributes<HTMLDivElement> {
4
4
  mode: "SHOWN" | "HIDDEN";
5
5
  baseLayer?: boolean;
@@ -57,7 +57,7 @@ declare const _default: {
57
57
  };
58
58
  predicate: () => boolean;
59
59
  })[];
60
- Layer(props: LayerProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
61
- transformSettingsEntries(list: any): ReactNode[];
60
+ Layer(props: LayerProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
61
+ transformSettingsEntries(list: ReactElement<any>[]): ReactNode[];
62
62
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
63
63
  export default _default;
@@ -12,15 +12,14 @@ declare const _default: {
12
12
  format: {
13
13
  type: OptionType.SELECT;
14
14
  description: string;
15
- options: ({
16
- label: string;
17
- value: string;
18
- default: true;
19
- } | {
20
- label: string;
21
- value: string;
22
- default?: undefined;
23
- })[];
15
+ options: readonly [{
16
+ readonly label: "30d 23:00:42";
17
+ readonly value: "stopwatch";
18
+ readonly default: true;
19
+ }, {
20
+ readonly label: "30d 23h 00m 42s";
21
+ readonly value: "human";
22
+ }];
24
23
  };
25
24
  }, {}>;
26
25
  startTime: number;
@@ -25,7 +25,8 @@ declare const _default: {
25
25
  component: typeof import("./SettingsTagList").SettingsTagList;
26
26
  };
27
27
  }, {}>;
28
- start(): Promise<void>;
28
+ start(): void;
29
+ stop(): void;
29
30
  commands: {
30
31
  name: string;
31
32
  description: string;
@@ -14,7 +14,7 @@ export interface Tag {
14
14
  name: string;
15
15
  message: string;
16
16
  }
17
- export declare function getTags(): Record<string, Tag>;
17
+ export declare function getTags(): Tag[];
18
18
  export declare function getTag(name: string): Tag;
19
19
  export declare function addTag(tag: Tag): void;
20
20
  export declare function removeTag(name: string): void;
@@ -20,10 +20,13 @@ declare const _default: {
20
20
  };
21
21
  } | {
22
22
  find: string;
23
- replacement: {
23
+ replacement: ({
24
24
  match: RegExp;
25
25
  replace: string;
26
- }[];
26
+ } | {
27
+ match: RegExp;
28
+ replace: (m: string, arrowFunctionName: string, functionName: string) => string;
29
+ })[];
27
30
  group?: undefined;
28
31
  } | {
29
32
  find: string;
@@ -23,9 +23,12 @@ declare const _default: {
23
23
  };
24
24
  emojiSize: {
25
25
  description: string;
26
- type: OptionType.SLIDER;
26
+ type: OptionType.SELECT;
27
27
  default: number;
28
- markers: number[];
28
+ options: {
29
+ label: string;
30
+ value: number;
31
+ }[];
29
32
  };
30
33
  transformEmojis: {
31
34
  description: string;
@@ -41,9 +44,12 @@ declare const _default: {
41
44
  };
42
45
  stickerSize: {
43
46
  description: string;
44
- type: OptionType.SLIDER;
47
+ type: OptionType.SELECT;
45
48
  default: number;
46
- markers: number[];
49
+ options: {
50
+ label: string;
51
+ value: number;
52
+ }[];
47
53
  };
48
54
  transformStickers: {
49
55
  description: string;
@@ -1,7 +1,23 @@
1
1
  import "./messageLogger.css";
2
2
  import { NavContextMenuPatchCallback } from "../../api/ContextMenu";
3
3
  import { OptionType } from "../../utils/types";
4
- import { Message } from "@vencord/discord-types";
4
+ import { Message, MessageAttachment } from "@vencord/discord-types";
5
+ interface MLMessage extends Message {
6
+ deleted?: boolean;
7
+ editHistory?: {
8
+ timestamp: Date;
9
+ content: string;
10
+ }[];
11
+ firstEditTimestamp?: Date;
12
+ }
13
+ interface MLAttachment extends MessageAttachment {
14
+ /**
15
+ * if the attachment was deleted
16
+ *
17
+ * a non-deleted {@link MLMessage|Message} can have deleted attachments
18
+ */
19
+ deleted?: boolean;
20
+ }
5
21
  export declare function parseEditContent(content: string, message: Message): import("react").ReactNode[];
6
22
  declare const _default: {
7
23
  name: string;
@@ -90,12 +106,14 @@ declare const _default: {
90
106
  message: Message;
91
107
  }>;
92
108
  makeEdit(newMessage: any, oldMessage: any): any;
109
+ handleUpdateAttachments(newMessage: MLMessage): MLAttachment[];
93
110
  handleDelete(cache: any, data: {
94
111
  ids: string[];
95
112
  id: string;
96
113
  mlDeleted?: boolean;
97
114
  }, isBulk: boolean): any;
98
115
  shouldIgnore(message: any, isEdit?: boolean): any;
116
+ normalizeNonce(msg: Message): void;
99
117
  EditMarker({ message, className, children, ...props }: any): import("react").JSX.Element;
100
118
  DELETED_MESSAGE_COUNT: () => {
101
119
  ast: (string | number | {
@@ -0,0 +1,281 @@
1
+ import { OptionType } from "../../utils/types";
2
+ import { Activity } from "@vencord/discord-types";
3
+ import { invalidateListenBrainzCache } from "./listenbrainz";
4
+ export interface TrackData {
5
+ name: string;
6
+ album: string;
7
+ artist: string;
8
+ trackURL?: string;
9
+ artistURL?: string;
10
+ albumURL?: string;
11
+ imageURL?: string;
12
+ serviceName?: string;
13
+ }
14
+ export interface ScrobblerBackend {
15
+ name: string;
16
+ id: string;
17
+ fetchTrackData(): Promise<TrackData | null>;
18
+ getUserURL(username: string): string;
19
+ }
20
+ declare const enum NameFormat {
21
+ StatusName = "status-name",
22
+ ArtistFirst = "artist-first",
23
+ SongFirst = "song-first",
24
+ ArtistOnly = "artist",
25
+ SongOnly = "song",
26
+ AlbumName = "album",
27
+ ServiceName = "service-name"
28
+ }
29
+ export declare const settings: import("../../utils/types").DefinedSettings<{
30
+ scrobblerBackend: {
31
+ description: string;
32
+ type: OptionType.SELECT;
33
+ options: readonly [{
34
+ readonly label: "Last.FM";
35
+ readonly value: "lastfm";
36
+ readonly default: true;
37
+ }, {
38
+ readonly label: "ListenBrainz";
39
+ readonly value: "listenbrainz";
40
+ }, {
41
+ readonly label: "ListenBrainz Compatible (self-hosted)";
42
+ readonly value: "listenbrainz-compatible";
43
+ }];
44
+ };
45
+ instanceBaseURL: {
46
+ description: string;
47
+ type: OptionType.STRING;
48
+ placeholder: string;
49
+ onChange: typeof invalidateListenBrainzCache;
50
+ };
51
+ instanceAPIBaseUrl: {
52
+ description: string;
53
+ type: OptionType.STRING;
54
+ placeholder: string;
55
+ onChange: typeof invalidateListenBrainzCache;
56
+ };
57
+ apiKey: {
58
+ displayName: string;
59
+ description: string;
60
+ type: OptionType.STRING;
61
+ };
62
+ username: {
63
+ description: string;
64
+ type: OptionType.STRING;
65
+ };
66
+ shareUsername: {
67
+ description: string;
68
+ type: OptionType.BOOLEAN;
69
+ default: false;
70
+ };
71
+ clickableLinks: {
72
+ description: string;
73
+ type: OptionType.BOOLEAN;
74
+ default: true;
75
+ };
76
+ hideWithSpotify: {
77
+ description: string;
78
+ type: OptionType.BOOLEAN;
79
+ default: true;
80
+ };
81
+ hideWithActivity: {
82
+ description: string;
83
+ type: OptionType.BOOLEAN;
84
+ default: false;
85
+ };
86
+ statusName: {
87
+ description: string;
88
+ type: OptionType.STRING;
89
+ default: string;
90
+ };
91
+ statusDisplayType: {
92
+ description: string;
93
+ type: OptionType.SELECT;
94
+ options: ({
95
+ label: string;
96
+ value: string;
97
+ default?: undefined;
98
+ } | {
99
+ label: string;
100
+ value: string;
101
+ default: true;
102
+ })[];
103
+ };
104
+ nameFormat: {
105
+ description: string;
106
+ type: OptionType.SELECT;
107
+ options: ({
108
+ label: string;
109
+ value: NameFormat;
110
+ default: true;
111
+ } | {
112
+ label: string;
113
+ value: NameFormat;
114
+ default?: undefined;
115
+ })[];
116
+ };
117
+ useListeningStatus: {
118
+ description: string;
119
+ type: OptionType.BOOLEAN;
120
+ default: false;
121
+ };
122
+ missingArt: {
123
+ description: string;
124
+ type: OptionType.SELECT;
125
+ options: ({
126
+ label: string;
127
+ value: string;
128
+ default: true;
129
+ } | {
130
+ label: string;
131
+ value: string;
132
+ default?: undefined;
133
+ })[];
134
+ };
135
+ showLogo: {
136
+ displayName: string;
137
+ description: string;
138
+ type: OptionType.BOOLEAN;
139
+ default: true;
140
+ };
141
+ showAlbumCover: {
142
+ description: string;
143
+ type: OptionType.BOOLEAN;
144
+ default: true;
145
+ };
146
+ }, {}>;
147
+ declare const _default: {
148
+ name: string;
149
+ description: string;
150
+ tags: ("Activity" | "Media")[];
151
+ searchTerms: string[];
152
+ authors: {
153
+ name: string;
154
+ id: bigint;
155
+ }[];
156
+ settings: import("../../utils/types").DefinedSettings<{
157
+ scrobblerBackend: {
158
+ description: string;
159
+ type: OptionType.SELECT;
160
+ options: readonly [{
161
+ readonly label: "Last.FM";
162
+ readonly value: "lastfm";
163
+ readonly default: true;
164
+ }, {
165
+ readonly label: "ListenBrainz";
166
+ readonly value: "listenbrainz";
167
+ }, {
168
+ readonly label: "ListenBrainz Compatible (self-hosted)";
169
+ readonly value: "listenbrainz-compatible";
170
+ }];
171
+ };
172
+ instanceBaseURL: {
173
+ description: string;
174
+ type: OptionType.STRING;
175
+ placeholder: string;
176
+ onChange: typeof invalidateListenBrainzCache;
177
+ };
178
+ instanceAPIBaseUrl: {
179
+ description: string;
180
+ type: OptionType.STRING;
181
+ placeholder: string;
182
+ onChange: typeof invalidateListenBrainzCache;
183
+ };
184
+ apiKey: {
185
+ displayName: string;
186
+ description: string;
187
+ type: OptionType.STRING;
188
+ };
189
+ username: {
190
+ description: string;
191
+ type: OptionType.STRING;
192
+ };
193
+ shareUsername: {
194
+ description: string;
195
+ type: OptionType.BOOLEAN;
196
+ default: false;
197
+ };
198
+ clickableLinks: {
199
+ description: string;
200
+ type: OptionType.BOOLEAN;
201
+ default: true;
202
+ };
203
+ hideWithSpotify: {
204
+ description: string;
205
+ type: OptionType.BOOLEAN;
206
+ default: true;
207
+ };
208
+ hideWithActivity: {
209
+ description: string;
210
+ type: OptionType.BOOLEAN;
211
+ default: false;
212
+ };
213
+ statusName: {
214
+ description: string;
215
+ type: OptionType.STRING;
216
+ default: string;
217
+ };
218
+ statusDisplayType: {
219
+ description: string;
220
+ type: OptionType.SELECT;
221
+ options: ({
222
+ label: string;
223
+ value: string;
224
+ default?: undefined;
225
+ } | {
226
+ label: string;
227
+ value: string;
228
+ default: true;
229
+ })[];
230
+ };
231
+ nameFormat: {
232
+ description: string;
233
+ type: OptionType.SELECT;
234
+ options: ({
235
+ label: string;
236
+ value: NameFormat;
237
+ default: true;
238
+ } | {
239
+ label: string;
240
+ value: NameFormat;
241
+ default?: undefined;
242
+ })[];
243
+ };
244
+ useListeningStatus: {
245
+ description: string;
246
+ type: OptionType.BOOLEAN;
247
+ default: false;
248
+ };
249
+ missingArt: {
250
+ description: string;
251
+ type: OptionType.SELECT;
252
+ options: ({
253
+ label: string;
254
+ value: string;
255
+ default: true;
256
+ } | {
257
+ label: string;
258
+ value: string;
259
+ default?: undefined;
260
+ })[];
261
+ };
262
+ showLogo: {
263
+ displayName: string;
264
+ description: string;
265
+ type: OptionType.BOOLEAN;
266
+ default: true;
267
+ };
268
+ showAlbumCover: {
269
+ description: string;
270
+ type: OptionType.BOOLEAN;
271
+ default: true;
272
+ };
273
+ }, {}>;
274
+ settingsAboutComponent(): import("react").JSX.Element | null;
275
+ start(): void;
276
+ stop(): void;
277
+ updatePresence(): Promise<void>;
278
+ getLargeImage(track: TrackData): string | undefined;
279
+ getActivity(): Promise<Activity | null>;
280
+ } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
281
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import { ScrobblerBackend } from ".";
2
+ export declare const LastFMScrobbler: ScrobblerBackend;
@@ -0,0 +1,3 @@
1
+ import { ScrobblerBackend } from ".";
2
+ export declare function invalidateListenBrainzCache(): void;
3
+ export declare const ListenBrainzScrobbler: ScrobblerBackend;
@@ -40,6 +40,7 @@ declare const _default: {
40
40
  replace: (_: string, props: string) => string;
41
41
  }[];
42
42
  })[];
43
+ shouldIgnoreUser(userId: string): boolean;
43
44
  shouldIgnoreMessage(message: Message): boolean;
44
45
  shouldHide(props: MessageDeleteProps): boolean;
45
46
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
@@ -13,5 +13,8 @@ declare const _default: {
13
13
  icon: IconComponent;
14
14
  render: ChatBarButtonFactory;
15
15
  };
16
+ flux: {
17
+ MESSAGE_DELETE({ id: messageId }: any): void;
18
+ };
16
19
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
17
20
  export default _default;
@@ -0,0 +1,29 @@
1
+ declare const _default: {
2
+ name: string;
3
+ description: string;
4
+ authors: {
5
+ name: string;
6
+ id: bigint;
7
+ }[];
8
+ patches: ({
9
+ find: string;
10
+ replacement: {
11
+ match: RegExp;
12
+ replace: string;
13
+ };
14
+ } | {
15
+ find: string;
16
+ replacement: {
17
+ match: RegExp;
18
+ replace: string;
19
+ }[];
20
+ })[];
21
+ start(): Promise<void>;
22
+ handleSearchFetch(query: string): void;
23
+ handleSuggestionsFetch(query: string): Promise<void>;
24
+ handleTrendingFetch(): Promise<void>;
25
+ handleGifSelect(id: string, query: string): void;
26
+ handleTrendingGifsFetch(): void;
27
+ tenorIntegrationSearch(integration: string, query: string): void;
28
+ } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
29
+ export default _default;
@@ -1,5 +1,6 @@
1
1
  import { NavContextMenuPatchCallback } from "../../api/ContextMenu";
2
2
  import { OptionType } from "../../utils/types";
3
+ import type { MouseEvent } from "react";
3
4
  declare const _default: {
4
5
  name: string;
5
6
  authors: {
@@ -35,8 +36,8 @@ declare const _default: {
35
36
  }[];
36
37
  };
37
38
  }, {}>;
38
- openAvatar: (url: string) => void;
39
- openBanner: (url: string) => void;
39
+ openAvatar: (url: string, event?: MouseEvent) => void;
40
+ openBanner: (url: string, event?: MouseEvent) => void;
40
41
  contextMenus: {
41
42
  "user-context": NavContextMenuPatchCallback;
42
43
  "guild-context": NavContextMenuPatchCallback;
@@ -52,7 +53,7 @@ declare const _default: {
52
53
  find: string;
53
54
  replacement: {
54
55
  match: RegExp;
55
- replace: (_: string, rest: string, bannerSrc: string) => string;
56
+ replace: (_: string, bannerSrc: string) => string;
56
57
  };
57
58
  })[];
58
59
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
@@ -1,3 +1,4 @@
1
+ import { OptionType } from "../../utils/types";
1
2
  declare const _default: {
2
3
  name: string;
3
4
  description: string;
@@ -7,8 +8,35 @@ declare const _default: {
7
8
  id: bigint;
8
9
  }[];
9
10
  enabledByDefault: true;
10
- onKey(e: KeyboardEvent): void;
11
- start(): void;
12
- stop(): void;
11
+ settings: import("../../utils/types").DefinedSettings<{
12
+ showNavigationButtons: {
13
+ type: OptionType.BOOLEAN;
14
+ description: string;
15
+ default: true;
16
+ restartNeeded: true;
17
+ };
18
+ overrideCommonKeybinds: {
19
+ type: OptionType.BOOLEAN;
20
+ description: string;
21
+ default: boolean;
22
+ restartNeeded: true;
23
+ };
24
+ }, {}>;
25
+ patches: ({
26
+ find: string;
27
+ replacement: {
28
+ match: RegExp;
29
+ replace: string;
30
+ };
31
+ predicate?: undefined;
32
+ } | {
33
+ find: string;
34
+ replacement: {
35
+ match: RegExp;
36
+ replace: string;
37
+ };
38
+ predicate: () => boolean;
39
+ })[];
40
+ getBlockedKeybinds(): string[];
13
41
  } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
14
42
  export default _default;
@@ -0,0 +1,39 @@
1
+ declare const _default: {
2
+ name: string;
3
+ description: string;
4
+ authors: {
5
+ name: string;
6
+ id: bigint;
7
+ }[];
8
+ tags: "Utility"[];
9
+ managedStyle: string;
10
+ enabledByDefault: true;
11
+ flux: {
12
+ KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS: ({ keybinds }: {
13
+ keybinds: Record<string, {
14
+ onTrigger: () => any;
15
+ }>;
16
+ }) => void;
17
+ };
18
+ ctrl: AbortController;
19
+ start(): void;
20
+ stop(): void;
21
+ patches: ({
22
+ find: string;
23
+ replacement: {
24
+ match: RegExp;
25
+ replace: string;
26
+ predicate?: undefined;
27
+ };
28
+ } | {
29
+ find: string;
30
+ replacement: {
31
+ match: RegExp;
32
+ replace: string;
33
+ predicate: () => boolean;
34
+ };
35
+ })[];
36
+ renderKeybindsButton: () => import("react").JSX.Element;
37
+ setBadge: () => void;
38
+ } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
39
+ export default _default;
@@ -1 +1,2 @@
1
1
  export declare function sendToOverlay(_: any, data: any): void;
2
+ export declare function closeSocket(): void;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A Map whose entries expire after a given amount of time. When an entry expires, it is automatically removed from the map and an optional callback is called.
3
+ */
4
+ export declare class TTLMap<K, V> extends Map<K, V> {
5
+ readonly expiryMs: number;
6
+ private readonly onExpire?;
7
+ private readonly _timers;
8
+ constructor(expiryMs: number, onExpire?: ((key: K, value: V) => void) | undefined);
9
+ set(key: K, value: V): this;
10
+ delete(key: K): boolean;
11
+ clear(): void;
12
+ }
@@ -148,10 +148,6 @@ export declare const Devs: Readonly<{
148
148
  name: string;
149
149
  id: bigint;
150
150
  };
151
- dzshn: {
152
- name: string;
153
- id: bigint;
154
- };
155
151
  Ducko: {
156
152
  name: string;
157
153
  id: bigint;
@@ -569,6 +565,10 @@ export declare const Devs: Readonly<{
569
565
  name: string;
570
566
  id: bigint;
571
567
  };
568
+ ThaUnknown: {
569
+ name: string;
570
+ id: bigint;
571
+ };
572
572
  SomeAspy: {
573
573
  name: string;
574
574
  id: bigint;
@@ -622,5 +622,29 @@ export declare const Devs: Readonly<{
622
622
  name: string;
623
623
  id: bigint;
624
624
  };
625
+ angelcube: {
626
+ name: string;
627
+ id: bigint;
628
+ };
629
+ Lunascape: {
630
+ name: string;
631
+ id: bigint;
632
+ };
633
+ paige: {
634
+ name: string;
635
+ id: bigint;
636
+ };
637
+ jax: {
638
+ name: string;
639
+ id: bigint;
640
+ };
641
+ yuna0x0: {
642
+ name: string;
643
+ id: bigint;
644
+ };
645
+ Davri: {
646
+ name: string;
647
+ id: bigint;
648
+ };
625
649
  }>;
626
650
  export declare const DevsById: Record<string, Dev>;
package/utils/text.d.ts CHANGED
@@ -16,7 +16,8 @@ type Units = typeof units[number];
16
16
  * @param unit The unit the time is on
17
17
  * @param short Whether to use short units like "d" instead of "days"
18
18
  */
19
- export declare function formatDuration(time: number, unit: Units, short?: boolean): string;
19
+ export declare function formatDurationVerbose(time: number, unit: Units, short?: boolean): string;
20
+ export declare function formatDuration(ms: number, human?: boolean): string;
20
21
  /**
21
22
  * Join an array of strings in a human readable way (1, 2 and 3)
22
23
  * @param elements Elements
package/utils/types.d.ts CHANGED
@@ -332,4 +332,9 @@ export type PluginNative<PluginExports extends Record<string, (event: Electron.I
332
332
  export type AllOrNothing<T> = T | {
333
333
  [K in keyof T]?: never;
334
334
  };
335
+ export type ConstEnumToRuntimeEnum<T> = {
336
+ [K in keyof T as T[K] extends number ? T[K] : never]: K;
337
+ } & {
338
+ [K in keyof T]: T[K];
339
+ };
335
340
  export {};
@@ -31,9 +31,11 @@ export declare const Dialog: import("../../utils/lazyReact").LazyComponentWrappe
31
31
  export declare const TabBar: import("../../utils/lazyReact").LazyComponentWrapper<import("react").ComponentType<any> & Record<string, any>>;
32
32
  export declare const Clickable: import("../../utils/lazyReact").LazyComponentWrapper<t.Clickable>;
33
33
  export declare const Avatar: import("../../utils/lazyReact").LazyComponentWrapper<t.Avatar>;
34
+ export declare const UserSummaryItem: import("../../utils/lazyReact").LazyComponentWrapper<import("react").ComponentType<any> & Record<string, any>>;
34
35
  export declare let ColorPicker: t.ColorPicker;
35
36
  export declare function setColorPicker(component: t.ColorPicker): void;
36
- export declare const UserSummaryItem: import("../../utils/lazyReact").LazyComponentWrapper<import("react").ComponentType<any> & Record<string, any>>;
37
+ export declare let RoleMemberPopout: t.RoleMemberPopout;
38
+ export declare function setRoleMemberPopout(component: t.RoleMemberPopout): void;
37
39
  export declare let createScroller: ((scrollbarClassName: string, fadeClassName: string, customThemeClassName: string) => t.ScrollerThin) | undefined;
38
40
  export declare function setCreateScroller(cs: NonNullable<typeof createScroller>): void;
39
41
  export declare let createListScroller: (scrollBarClassName: string, fadeClassName: string, someOtherClassIdkMan: string, resizeObserverClass: typeof ResizeObserver) => t.ListScrollerThin;
@@ -1,10 +1,10 @@
1
+ import { ConstEnumToRuntimeEnum } from "../../utils/types";
1
2
  import * as t from "@vencord/discord-types";
3
+ import * as enums from "@vencord/discord-types/enums";
2
4
  export declare const Flux: t.Flux;
3
5
  export type GenericStore = t.FluxStore & Record<string, any>;
4
- export declare const DraftType: any;
5
- export declare let MessageStore: Omit<t.MessageStore, "getMessages"> & GenericStore & {
6
- getMessages(chanId: string): any;
7
- };
6
+ export declare const DraftType: ConstEnumToRuntimeEnum<typeof enums.DraftType>;
7
+ export declare let MessageStore: t.MessageStore;
8
8
  export declare let PermissionStore: t.PermissionStore;
9
9
  export declare let GuildChannelStore: t.GuildChannelStore;
10
10
  export declare let ReadStateStore: t.ReadStateStore;
@@ -1,87 +0,0 @@
1
- import { OptionType } from "../../utils/types";
2
- interface SearchBarComponentProps {
3
- ref?: React.RefObject<any>;
4
- autoFocus: boolean;
5
- size: string;
6
- onChange: (query: string) => void;
7
- onClear: () => void;
8
- query: string;
9
- placeholder: string;
10
- className?: string;
11
- }
12
- type TSearchBarComponent = React.FC<SearchBarComponentProps>;
13
- interface Gif {
14
- format: number;
15
- src: string;
16
- width: number;
17
- height: number;
18
- order: number;
19
- url: string;
20
- }
21
- interface Instance {
22
- dead?: boolean;
23
- state: {
24
- resultType?: string;
25
- };
26
- props: {
27
- favCopy: Gif[];
28
- favorites: Gif[];
29
- };
30
- forceUpdate: () => void;
31
- }
32
- export declare const settings: import("../../utils/types").DefinedSettings<{
33
- searchOption: {
34
- type: OptionType.SELECT;
35
- description: string;
36
- options: readonly [{
37
- readonly label: "Entire Url";
38
- readonly value: "url";
39
- }, {
40
- readonly label: "Path Only (/somegif.gif)";
41
- readonly value: "path";
42
- }, {
43
- readonly label: "Host & Path (tenor.com somgif.gif)";
44
- readonly value: "hostandpath";
45
- readonly default: true;
46
- }];
47
- };
48
- }, {}>;
49
- declare const _default: {
50
- name: string;
51
- authors: {
52
- name: string;
53
- id: bigint;
54
- }[];
55
- description: string;
56
- tags: ("Customisation" | "Media")[];
57
- patches: {
58
- find: string;
59
- replacement: {
60
- match: RegExp;
61
- replace: string;
62
- }[];
63
- }[];
64
- settings: import("../../utils/types").DefinedSettings<{
65
- searchOption: {
66
- type: OptionType.SELECT;
67
- description: string;
68
- options: readonly [{
69
- readonly label: "Entire Url";
70
- readonly value: "url";
71
- }, {
72
- readonly label: "Path Only (/somegif.gif)";
73
- readonly value: "path";
74
- }, {
75
- readonly label: "Host & Path (tenor.com somgif.gif)";
76
- readonly value: "hostandpath";
77
- readonly default: true;
78
- }];
79
- };
80
- }, {}>;
81
- getTargetString: typeof getTargetString;
82
- instance: Instance | null;
83
- renderSearchBar(instance: Instance, SearchBarComponent: TSearchBarComponent): import("react").JSX.Element;
84
- getFav(favorites: Gif[]): Gif[];
85
- } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
86
- export default _default;
87
- export declare function getTargetString(urlStr: string): string;
@@ -1,125 +0,0 @@
1
- import { OptionType } from "../../utils/types";
2
- import { Activity } from "@vencord/discord-types";
3
- interface TrackData {
4
- name: string;
5
- album: string;
6
- artist: string;
7
- url: string;
8
- imageUrl?: string;
9
- }
10
- declare const enum NameFormat {
11
- StatusName = "status-name",
12
- ArtistFirst = "artist-first",
13
- SongFirst = "song-first",
14
- ArtistOnly = "artist",
15
- SongOnly = "song",
16
- AlbumName = "album"
17
- }
18
- declare const _default: {
19
- name: string;
20
- description: string;
21
- tags: ("Activity" | "Media")[];
22
- authors: {
23
- name: string;
24
- id: bigint;
25
- }[];
26
- settings: import("../../utils/types").DefinedSettings<{
27
- apiKey: {
28
- displayName: string;
29
- description: string;
30
- type: OptionType.STRING;
31
- };
32
- username: {
33
- description: string;
34
- type: OptionType.STRING;
35
- };
36
- shareUsername: {
37
- description: string;
38
- type: OptionType.BOOLEAN;
39
- default: false;
40
- };
41
- clickableLinks: {
42
- description: string;
43
- type: OptionType.BOOLEAN;
44
- default: true;
45
- };
46
- hideWithSpotify: {
47
- description: string;
48
- type: OptionType.BOOLEAN;
49
- default: true;
50
- };
51
- hideWithActivity: {
52
- description: string;
53
- type: OptionType.BOOLEAN;
54
- default: false;
55
- };
56
- statusName: {
57
- description: string;
58
- type: OptionType.STRING;
59
- default: string;
60
- };
61
- statusDisplayType: {
62
- description: string;
63
- type: OptionType.SELECT;
64
- options: ({
65
- label: string;
66
- value: string;
67
- default?: undefined;
68
- } | {
69
- label: string;
70
- value: string;
71
- default: true;
72
- })[];
73
- };
74
- nameFormat: {
75
- description: string;
76
- type: OptionType.SELECT;
77
- options: ({
78
- label: string;
79
- value: NameFormat;
80
- default: true;
81
- } | {
82
- label: string;
83
- value: NameFormat;
84
- default?: undefined;
85
- })[];
86
- };
87
- useListeningStatus: {
88
- description: string;
89
- type: OptionType.BOOLEAN;
90
- default: false;
91
- };
92
- missingArt: {
93
- description: string;
94
- type: OptionType.SELECT;
95
- options: ({
96
- label: string;
97
- value: string;
98
- default: true;
99
- } | {
100
- label: string;
101
- value: string;
102
- default?: undefined;
103
- })[];
104
- };
105
- showLastFmLogo: {
106
- displayName: string;
107
- description: string;
108
- type: OptionType.BOOLEAN;
109
- default: true;
110
- };
111
- showAlbumCover: {
112
- description: string;
113
- type: OptionType.BOOLEAN;
114
- default: true;
115
- };
116
- }, {}>;
117
- settingsAboutComponent(): import("react").JSX.Element;
118
- start(): void;
119
- stop(): void;
120
- fetchTrackData(): Promise<TrackData | null>;
121
- updatePresence(): Promise<void>;
122
- getLargeImage(track: TrackData): string | undefined;
123
- getActivity(): Promise<Activity | null>;
124
- } & Record<PropertyKey, any> & import("../../utils/types").Plugin;
125
- export default _default;