diff --git a/src/plugins/settings/SettingsConstants.ts b/src/plugins/settings/SettingsConstants.ts index a18e8c3..a9f4d7e 100644 --- a/src/plugins/settings/SettingsConstants.ts +++ b/src/plugins/settings/SettingsConstants.ts @@ -15,7 +15,9 @@ export const MobileSetting = { HERMES_VERSION: 'HERMES_VERSION', CALL_GARBAGE_COLLECTOR: 'CALL_GARBAGE_COLLECTOR', - TRIGGER_ERROR_BOUNDARY: 'TRIGGER_ERROR_BOUNDARY', + EVALUATE_JAVASCRIPT: 'EVALUATE_JAVASCRIPT', + EVALUATE_JAVASCRIPT_INSPECT_DEPTH: 'EVALUATE_JAVASCRIPT_INSPECT_DEPTH', + EVALUATE_JAVASCRIPT_AWAIT_RESULT: 'EVALUATE_JAVASCRIPT_AWAIT_RESULT', REVENGE_NOT_IMPLEMENTED: 'REVENGE_NOT_IMPLEMENTED', } as const @@ -26,7 +28,6 @@ export const UserSettingsSections = { [MobileSetting.REVENGE_THEMES]: 'Revenge Themes', [MobileSetting.REVENGE_FONTS]: 'Revenge Fonts', [MobileSetting.REVENGE_DEVELOPER]: 'Revenge Developer', - [MobileSetting.TRIGGER_ERROR_BOUNDARY]: 'Trigger Error Boundary', } as const export const AlwaysHidden = () => false diff --git a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx index ffa2e92..84e06fe 100644 --- a/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx +++ b/src/plugins/settings/definitions/CallGarbageCollectorSetting.tsx @@ -2,9 +2,9 @@ import { React } from '@revenge-mod/react' import AssetIcon from '../components/icons/AssetIcon' -import type { SettingsRowConfig } from '@revenge-mod/discord/ui/settings' +import type { SettingsItem } from '@revenge-mod/discord/ui/settings' -const CallGarbageCollectorSetting: SettingsRowConfig = { +const CallGarbageCollectorSetting: SettingsItem = { parent: null, IconComponent: () => , title: () => 'Call Garbage Collector', diff --git a/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx b/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx new file mode 100644 index 0000000..52cd181 --- /dev/null +++ b/src/plugins/settings/definitions/EvaluateJavaScriptSetting.tsx @@ -0,0 +1,121 @@ +import { React } from '@revenge-mod/react' + +import { AlertActionCreators } from '@revenge-mod/discord/actions' +import { nodeUtils } from '@revenge-mod/discord/polyfills' +import { Components } from '@revenge-mod/discord/ui' + +import { getErrorStack } from '@revenge-mod/utils/errors' + +import AssetIcon from '../components/icons/AssetIcon' + +import type { SettingsItem } from '@revenge-mod/discord/ui/settings' + +const ALERT_KEY = 'evaluate-javascript' + +const EvaluateJavaScriptSetting: SettingsItem = { + parent: null, + IconComponent: () => , + title: () => 'Evaluate JavaScript', + useDescription: () => 'Runs a JavaScript code snippet.', + onPress: () => AlertActionCreators.openAlert(ALERT_KEY, ), + type: 'pressable', +} + +const { + AlertActionButton, + AlertModal, + Button, + Slider, + Stack, + TableRow, + TableRowGroup, + TableSwitchRow, + Text, + TextArea, +} = Components + +function EvaluateJavaScriptAlert() { + const code = React.useRef('') + const [awaitResult, setAwaitResult] = React.useState(true) + const [showHidden, setShowHidden] = React.useState(true) + const [inspectDepth, setInspectDepth] = React.useState(3) + const [loading, setLoading] = React.useState(false) + + return ( + +