🧹🧹
This commit is contained in:
parent
42d8211871
commit
07a9adbce2
35 changed files with 48 additions and 137 deletions
|
@ -24,7 +24,7 @@
|
|||
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-pattern src/userplugins",
|
||||
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
|
||||
"lint:fix": "pnpm lint --fix",
|
||||
"test": "pnpm build && pnpm lint && pnpm lint-styles && pnpm testTsc",
|
||||
"test": "pnpm build && pnpm lint && pnpm lint-styles && pnpm testTsc && pnpm generatePluginJson",
|
||||
"testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc",
|
||||
"testTsc": "tsc --noEmit",
|
||||
"uninject": "node scripts/runInstaller.mjs",
|
||||
|
|
|
@ -64,7 +64,7 @@ export const globPlugins = kind => ({
|
|||
});
|
||||
|
||||
build.onLoad({ filter, namespace: "import-plugins" }, async () => {
|
||||
const pluginDirs = ["plugins", "userplugins"];
|
||||
const pluginDirs = ["plugins/_api", "plugins/_core", "plugins", "userplugins"];
|
||||
let code = "";
|
||||
let plugins = "\n";
|
||||
let i = 0;
|
||||
|
@ -72,8 +72,9 @@ export const globPlugins = kind => ({
|
|||
if (!existsSync(`./src/${dir}`)) continue;
|
||||
const files = await readdir(`./src/${dir}`);
|
||||
for (const file of files) {
|
||||
if (file.startsWith(".")) continue;
|
||||
if (file.startsWith("_") || file.startsWith(".")) continue;
|
||||
if (file === "index.ts") continue;
|
||||
|
||||
const fileBits = file.split(".");
|
||||
if (fileBits.length > 2 && ["ts", "tsx"].includes(fileBits.at(-1))) {
|
||||
const mod = fileBits.at(-2);
|
||||
|
|
|
@ -171,8 +171,8 @@ async function parseFile(fileName: string) {
|
|||
throw fail("no default export called 'definePlugin' found");
|
||||
}
|
||||
|
||||
async function getEntryPoint(dirent: Dirent) {
|
||||
const base = join("./src/plugins", dirent.name);
|
||||
async function getEntryPoint(dir: string, dirent: Dirent) {
|
||||
const base = join(dir, dirent.name);
|
||||
if (!dirent.isDirectory()) return base;
|
||||
|
||||
for (const name of ["index.ts", "index.tsx"]) {
|
||||
|
@ -186,13 +186,23 @@ async function getEntryPoint(dirent: Dirent) {
|
|||
throw new Error(`${dirent.name}: Couldn't find entry point`);
|
||||
}
|
||||
|
||||
function isPluginFile({ name }: { name: string; }) {
|
||||
if (name === "index.ts") return false;
|
||||
return !name.startsWith("_") && !name.startsWith(".");
|
||||
}
|
||||
|
||||
(async () => {
|
||||
parseDevs();
|
||||
const plugins = readdirSync("./src/plugins", { withFileTypes: true }).filter(d => d.name !== "index.ts");
|
||||
|
||||
const promises = plugins.map(async dirent => parseFile(await getEntryPoint(dirent)));
|
||||
const plugins = ["src/plugins", "src/plugins/_core"].flatMap(dir =>
|
||||
readdirSync(dir, { withFileTypes: true })
|
||||
.filter(isPluginFile)
|
||||
.map(async dirent =>
|
||||
parseFile(await getEntryPoint(dir, dirent))
|
||||
)
|
||||
);
|
||||
|
||||
const data = JSON.stringify(await Promise.all(promises));
|
||||
const data = JSON.stringify(await Promise.all(plugins));
|
||||
|
||||
if (process.argv.length > 2) {
|
||||
writeFileSync(process.argv[2], data);
|
||||
|
|
|
@ -22,7 +22,7 @@ import { ComponentType, HTMLProps } from "react";
|
|||
|
||||
import Plugins from "~plugins";
|
||||
|
||||
export enum BadgePosition {
|
||||
export const enum BadgePosition {
|
||||
START,
|
||||
END
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ export function _getBadges(args: BadgeUserArgs) {
|
|||
: badges.push({ ...badge, ...args });
|
||||
}
|
||||
}
|
||||
const donorBadges = (Plugins.BadgeAPI as unknown as typeof import("../plugins/apiBadges").default).getDonorBadges(args.user.id);
|
||||
const donorBadges = (Plugins.BadgeAPI as unknown as typeof import("../plugins/_api/badges").default).getDonorBadges(args.user.id);
|
||||
if (donorBadges) badges.unshift(...donorBadges);
|
||||
|
||||
return badges;
|
||||
|
|
|
@ -24,7 +24,7 @@ export interface CommandContext {
|
|||
guild?: Guild;
|
||||
}
|
||||
|
||||
export enum ApplicationCommandOptionType {
|
||||
export const enum ApplicationCommandOptionType {
|
||||
SUB_COMMAND = 1,
|
||||
SUB_COMMAND_GROUP = 2,
|
||||
STRING = 3,
|
||||
|
@ -38,7 +38,7 @@ export enum ApplicationCommandOptionType {
|
|||
ATTACHMENT = 11,
|
||||
}
|
||||
|
||||
export enum ApplicationCommandInputType {
|
||||
export const enum ApplicationCommandInputType {
|
||||
BUILT_IN = 0,
|
||||
BUILT_IN_TEXT = 1,
|
||||
BUILT_IN_INTEGRATION = 2,
|
||||
|
@ -64,7 +64,7 @@ export interface ChoicesOption {
|
|||
displayName?: string;
|
||||
}
|
||||
|
||||
export enum ApplicationCommandType {
|
||||
export const enum ApplicationCommandType {
|
||||
CHAT_INPUT = 1,
|
||||
USER = 2,
|
||||
MESSAGE = 3,
|
||||
|
|
|
@ -20,7 +20,7 @@ import { Logger } from "@utils/Logger";
|
|||
|
||||
const logger = new Logger("ServerListAPI");
|
||||
|
||||
export enum ServerListRenderPosition {
|
||||
export const enum ServerListRenderPosition {
|
||||
Above,
|
||||
In,
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, onMouseLe
|
|||
);
|
||||
}
|
||||
|
||||
enum SearchStatus {
|
||||
const enum SearchStatus {
|
||||
ALL,
|
||||
ENABLED,
|
||||
DISABLED
|
||||
|
|
|
@ -20,7 +20,7 @@ import { Settings } from "@api/Settings";
|
|||
import { Devs } from "@utils/constants";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
|
||||
enum Methods {
|
||||
const enum Methods {
|
||||
Random,
|
||||
Consistent,
|
||||
Timestamp,
|
||||
|
|
|
@ -74,7 +74,7 @@ interface Activity {
|
|||
flags: number;
|
||||
}
|
||||
|
||||
enum ActivityType {
|
||||
const enum ActivityType {
|
||||
PLAYING = 0,
|
||||
LISTENING = 2,
|
||||
WATCHING = 3,
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
/*
|
||||
* Vencord, a modification for Discord's desktop app
|
||||
* Copyright (c) 2022 Vendicated and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { ApplicationCommandOptionType } from "@api/Commands";
|
||||
import { Settings } from "@api/Settings";
|
||||
import { makeRange } from "@components/PluginSettings/components";
|
||||
import { Devs } from "@utils/constants";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
|
||||
export default definePlugin({
|
||||
name: "Fart2",
|
||||
authors: [Devs.Animal],
|
||||
description: "Enable farting v2, a slash command that allows you to perform or request that someone perform a little toot.",
|
||||
dependencies: ["CommandsAPI"],
|
||||
commands: [{
|
||||
name: "fart",
|
||||
description: "A simple command in which you may either request that a user do a little toot for you, or conduct one yourself.",
|
||||
options: [
|
||||
{
|
||||
type: ApplicationCommandOptionType.USER,
|
||||
name: "user",
|
||||
description: "A Discord™ user of which you would humbly request a toot from.",
|
||||
required: false
|
||||
}
|
||||
],
|
||||
|
||||
execute(args) {
|
||||
const fart = new Audio("https://raw.githubusercontent.com/ItzOnlyAnimal/AliuPlugins/main/fart.mp3");
|
||||
fart.volume = Settings.plugins.Fart2.volume;
|
||||
fart.play();
|
||||
|
||||
return {
|
||||
content: (args[0]) ? `<@${args[0].value}> fart` : "fart"
|
||||
};
|
||||
},
|
||||
}],
|
||||
options: {
|
||||
volume: {
|
||||
description: "how loud you wanna fart (aka volume)",
|
||||
type: OptionType.SLIDER,
|
||||
markers: makeRange(0, 1, 0.1),
|
||||
default: 0.5,
|
||||
stickToMarkers: false,
|
||||
}
|
||||
}
|
||||
});
|
|
@ -24,7 +24,7 @@ import definePlugin from "@utils/types";
|
|||
import { findByPropsLazy, findStoreLazy } from "@webpack";
|
||||
import { Tooltip } from "webpack/common";
|
||||
|
||||
enum ActivitiesTypes {
|
||||
const enum ActivitiesTypes {
|
||||
Game,
|
||||
Embedded
|
||||
}
|
||||
|
|
|
@ -63,12 +63,12 @@ interface TrackData {
|
|||
}
|
||||
|
||||
// only relevant enum values
|
||||
enum ActivityType {
|
||||
const enum ActivityType {
|
||||
PLAYING = 0,
|
||||
LISTENING = 2,
|
||||
}
|
||||
|
||||
enum ActivityFlag {
|
||||
const enum ActivityFlag {
|
||||
INSTANCE = 1 << 0,
|
||||
}
|
||||
|
||||
|
|
|
@ -18,37 +18,8 @@
|
|||
|
||||
import { definePluginSettings } from "@api/Settings";
|
||||
import { Devs } from "@utils/constants";
|
||||
import { ModalContent, ModalFooter, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
import { findByProps, findStoreLazy } from "@webpack";
|
||||
import { Button, Text } from "@webpack/common";
|
||||
|
||||
const UserGuildSettingsStore = findStoreLazy("UserGuildSettingsStore");
|
||||
|
||||
function NoDMNotificationsModal({ modalProps }: { modalProps: ModalProps; }) {
|
||||
return (
|
||||
<ModalRoot {...modalProps} size={ModalSize.MEDIUM}>
|
||||
<ModalContent>
|
||||
<div style={{ display: "flex", flexDirection: "column", justifyContent: "center", "alignItems": "center", textAlign: "center", height: "100%", padding: "8px 0", gap: "16px" }}>
|
||||
<Text variant="text-lg/semibold">You seem to have been affected by a bug that caused DM notifications to be muted and break if you used the MuteNewGuild plugin.</Text>
|
||||
<Text variant="text-lg/semibold">If you haven't received any notifications for private messages, this is why. This issue is now fixed, so they should work again. Please verify, and in case they are still broken, ask for help in the Vencord support channel!</Text>
|
||||
<Text variant="text-lg/semibold">We're very sorry for any inconvenience caused by this issue :(</Text>
|
||||
</div>
|
||||
</ModalContent>
|
||||
<ModalFooter>
|
||||
<div style={{ display: "flex", justifyContent: "center", width: "100%" }}>
|
||||
<Button
|
||||
onClick={modalProps.onClose}
|
||||
size={Button.Sizes.MEDIUM}
|
||||
color={Button.Colors.BRAND}
|
||||
>
|
||||
Understood!
|
||||
</Button>
|
||||
</div>
|
||||
</ModalFooter>
|
||||
</ModalRoot>
|
||||
);
|
||||
}
|
||||
import { findByProps } from "@webpack";
|
||||
|
||||
const settings = definePluginSettings({
|
||||
guild: {
|
||||
|
@ -92,15 +63,5 @@ export default definePlugin({
|
|||
suppress_roles: settings.store.role
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
start() {
|
||||
const [isMuted, isEveryoneSupressed, isRolesSupressed] = [UserGuildSettingsStore.isMuted(null), UserGuildSettingsStore.isSuppressEveryoneEnabled(null), UserGuildSettingsStore.isSuppressRolesEnabled(null)];
|
||||
|
||||
if (isMuted || isEveryoneSupressed || isRolesSupressed) {
|
||||
findByProps("updateGuildNotificationSettings").updateGuildNotificationSettings(null, { muted: false, suppress_everyone: false, suppress_roles: false });
|
||||
|
||||
openModal(modalProps => <NoDMNotificationsModal modalProps={modalProps} />);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -24,7 +24,7 @@ import { useForceUpdater } from "@utils/react";
|
|||
import definePlugin, { OptionType } from "@utils/types";
|
||||
import { GuildStore, PresenceStore, RelationshipStore } from "@webpack/common";
|
||||
|
||||
enum IndicatorType {
|
||||
const enum IndicatorType {
|
||||
SERVER = 1 << 0,
|
||||
FRIEND = 1 << 1,
|
||||
BOTH = SERVER | FRIEND,
|
||||
|
|
|
@ -46,18 +46,18 @@ export type ShikiSpec = {
|
|||
}) => Promise<IThemedToken[][]>;
|
||||
};
|
||||
|
||||
export enum StyleSheets {
|
||||
export const enum StyleSheets {
|
||||
Main = "MAIN",
|
||||
DevIcons = "DEVICONS",
|
||||
}
|
||||
|
||||
export enum HljsSetting {
|
||||
export const enum HljsSetting {
|
||||
Never = "NEVER",
|
||||
Secondary = "SECONDARY",
|
||||
Primary = "PRIMARY",
|
||||
Always = "ALWAYS",
|
||||
}
|
||||
export enum DeviconSetting {
|
||||
export const enum DeviconSetting {
|
||||
Disabled = "DISABLED",
|
||||
Greyscale = "GREYSCALE",
|
||||
Color = "COLOR"
|
||||
|
|
|
@ -29,12 +29,12 @@ import openRolesAndUsersPermissionsModal, { PermissionType, RoleOrUserPermission
|
|||
import { sortPermissionOverwrites } from "../../permissionsViewer/utils";
|
||||
import { settings, VIEW_CHANNEL } from "..";
|
||||
|
||||
enum SortOrderTypes {
|
||||
const enum SortOrderTypes {
|
||||
LATEST_ACTIVITY = 0,
|
||||
CREATION_DATE = 1
|
||||
}
|
||||
|
||||
enum ForumLayoutTypes {
|
||||
const enum ForumLayoutTypes {
|
||||
DEFAULT = 0,
|
||||
LIST = 1,
|
||||
GRID = 2
|
||||
|
@ -61,7 +61,7 @@ interface ExtendedChannel extends Channel {
|
|||
availableTags?: Array<Tag>;
|
||||
}
|
||||
|
||||
enum ChannelTypes {
|
||||
const enum ChannelTypes {
|
||||
GUILD_TEXT = 0,
|
||||
GUILD_VOICE = 2,
|
||||
GUILD_ANNOUNCEMENT = 5,
|
||||
|
@ -69,12 +69,12 @@ enum ChannelTypes {
|
|||
GUILD_FORUM = 15
|
||||
}
|
||||
|
||||
enum VideoQualityModes {
|
||||
const enum VideoQualityModes {
|
||||
AUTO = 1,
|
||||
FULL = 2
|
||||
}
|
||||
|
||||
enum ChannelFlags {
|
||||
const enum ChannelFlags {
|
||||
PINNED = 1 << 1,
|
||||
REQUIRE_TAG = 1 << 4
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ const ChannelListClasses = findByPropsLazy("channelName", "subtitle", "modeMuted
|
|||
export const VIEW_CHANNEL = 1n << 10n;
|
||||
const CONNECT = 1n << 20n;
|
||||
|
||||
enum ShowMode {
|
||||
const enum ShowMode {
|
||||
LockIcon,
|
||||
HiddenIconWithMutedStyle
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ import { Alerts, Forms, UserStore } from "@webpack/common";
|
|||
import gitHash from "~git-hash";
|
||||
import plugins from "~plugins";
|
||||
|
||||
import settings from "./settings";
|
||||
import settings from "./_core/settings";
|
||||
|
||||
const REMEMBER_DISMISS_KEY = "Vencord-SupportHelper-Dismiss";
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ export const importApngJs = makeLazy(async () => {
|
|||
});
|
||||
|
||||
// https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk
|
||||
export enum ApngDisposeOp {
|
||||
export const enum ApngDisposeOp {
|
||||
/**
|
||||
* no disposal is done on this frame before rendering the next; the contents of the output buffer are left as is.
|
||||
*/
|
||||
|
@ -53,7 +53,7 @@ export enum ApngDisposeOp {
|
|||
}
|
||||
|
||||
// TODO: Might need to somehow implement this
|
||||
export enum ApngBlendOp {
|
||||
export const enum ApngBlendOp {
|
||||
SOURCE,
|
||||
OVER
|
||||
}
|
||||
|
|
|
@ -21,14 +21,14 @@ import type { ComponentType, PropsWithChildren, ReactNode, Ref } from "react";
|
|||
|
||||
import { LazyComponent } from "./react";
|
||||
|
||||
export enum ModalSize {
|
||||
export const enum ModalSize {
|
||||
SMALL = "small",
|
||||
MEDIUM = "medium",
|
||||
LARGE = "large",
|
||||
DYNAMIC = "dynamic",
|
||||
}
|
||||
|
||||
enum ModalTransitionState {
|
||||
const enum ModalTransitionState {
|
||||
ENTERING,
|
||||
ENTERED,
|
||||
EXITING,
|
||||
|
|
|
@ -117,7 +117,7 @@ export interface PluginDef {
|
|||
tags?: string[];
|
||||
}
|
||||
|
||||
export enum OptionType {
|
||||
export const enum OptionType {
|
||||
STRING,
|
||||
NUMBER,
|
||||
BIGINT,
|
||||
|
|
Loading…
Reference in a new issue