[Plugins] Rework and refactor

This commit is contained in:
Beef 2023-01-30 00:40:56 +00:00
parent 4c9fe8fcaf
commit 44652c4002
3 changed files with 16 additions and 14 deletions

18
src/def.d.ts vendored
View file

@ -1,7 +1,7 @@
import * as _spitroast from "spitroast";
import _React from "react";
import _RN from "react-native";
import { Events } from "./lib/emitter";
import { Events } from "@lib/emitter";
type MetroModules = { [id: number]: any };
@ -64,7 +64,7 @@ interface Settings {
developerSettings: boolean;
}
export interface ApplicationCommand {
interface ApplicationCommand {
description: string;
name: string;
options: ApplicationCommandOption[];
@ -77,7 +77,7 @@ export interface ApplicationCommand {
type: ApplicationCommandType;
}
export enum ApplicationCommandInputType {
declare enum ApplicationCommandInputType {
BUILT_IN,
BUILT_IN_TEXT,
BUILT_IN_INTEGRATION,
@ -85,7 +85,7 @@ export enum ApplicationCommandInputType {
PLACEHOLDER,
}
export interface ApplicationCommandOption {
interface ApplicationCommandOption {
name: string;
description: string;
required?: boolean;
@ -94,7 +94,7 @@ export interface ApplicationCommandOption {
displayDescription: string;
}
export enum ApplicationCommandOptionType {
declare enum ApplicationCommandOptionType {
SUB_COMMAND = 1,
SUB_COMMAND_GROUP,
STRING,
@ -108,18 +108,18 @@ export enum ApplicationCommandOptionType {
ATTACHMENT,
}
export enum ApplicationCommandType {
declare enum ApplicationCommandType {
CHAT = 1,
USER,
MESSAGE,
}
export interface CommandContext {
interface CommandContext {
channel: any;
guild: any;
}
export interface CommandResult {
interface CommandResult {
content: string;
tts?: boolean;
}
@ -252,7 +252,7 @@ interface VendettaObject {
};
plugins: {
plugins: Indexable<Plugin>;
fetchPlugin: (id: string) => void;
fetchPlugin: (id: string, enabled: boolean) => void;
evalPlugin: (plugin: Plugin) => void;
stopPlugin: (id: string) => void;
removePlugin: (id: string) => void;

View file

@ -14,15 +14,15 @@ export const plugins = wrapSync(createStorage<Indexable<Plugin>>("VENDETTA_PLUGI
for (let p of Object.keys(store)) {
const plugin: Plugin = store[p];
if (store[p].update) await fetchPlugin(plugin.id);
if (store[p].enabled && plugins[p]) await startPlugin(p);
if (plugin.update) await fetchPlugin(plugin.id, false);
if (plugin.enabled && plugins[p]) await startPlugin(p);
}
return store;
}));
const loadedPlugins: Indexable<EvaledPlugin> = {};
export async function fetchPlugin(id: string) {
export async function fetchPlugin(id: string, enabled = true) {
if (!id.endsWith("/")) id += "/";
if (typeof id !== "string" || id in plugins) throw new Error("Plugin ID invalid or taken");
@ -53,6 +53,8 @@ export async function fetchPlugin(id: string) {
update: true,
js: pluginJs,
};
if (enabled) await startPlugin(id);
}
export async function evalPlugin(plugin: Plugin) {

View file

@ -3,7 +3,7 @@ import { Forms } from "@ui/components";
import { showToast } from "@ui/toasts";
import { getAssetIDByName } from "@ui/assets";
import { useProxy } from "@lib/storage";
import { plugins, fetchPlugin } from "@lib/plugins";
import { plugins, fetchPlugin, startPlugin } from "@lib/plugins";
import PluginCard from "@ui/settings/components/PluginCard";
const { FormInput, FormRow } = Forms;