fix(plugins): refactor plugins to work with new APIs

This commit is contained in:
PalmDevs 2025-05-08 19:00:49 +07:00
parent d08d1a9795
commit fbdea3c9da
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
27 changed files with 84 additions and 81 deletions

View file

@ -1,18 +1,18 @@
import { getAssetByName, getAssetId } from '@revenge-mod/assets'
import { Components } from '@revenge-mod/discord/ui'
import components from '@revenge-mod/discord/design/components'
import type { DiscordModules } from '@revenge-mod/discord/types'
export default function AssetIcon(props: AssetIconProps) {
export default function TableRowAssetIcon(props: TableRowAssetIconProps) {
return (
<Components.TableRow.Icon
<components.TableRow.Icon
source={props.name ? getAssetId(getAssetByName(props.name)!)! : props.id!}
{...props}
/>
)
}
export type AssetIconProps = Omit<DiscordModules.Components.TableRowIconProps, 'source'> &
export type TableRowAssetIconProps = Omit<DiscordModules.Components.TableRowIconProps, 'source'> &
(
| {
name: string

View file

@ -1,22 +1,23 @@
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 components from '@revenge-mod/discord/design/components'
import { nodeUtil } from '@revenge-mod/externals/browserify'
import { getErrorStack } from '@revenge-mod/utils/errors'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { pluginApi } from '..'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ALERT_KEY = 'evaluate-javascript'
const EvaluateJavaScriptSetting: SettingsItem = {
parent: null,
IconComponent: () => <AssetIcon name="FileIcon" />,
IconComponent: () => <TableRowAssetIcon name="FileIcon" />,
title: () => 'Evaluate JavaScript',
useDescription: () => 'Runs a JavaScript code snippet.',
onPress: () => AlertActionCreators.openAlert(ALERT_KEY, <EvaluateJavaScriptAlert />),
@ -34,7 +35,7 @@ const {
TableSwitchRow,
Text,
TextArea,
} = Components
} = components
function EvaluateJavaScriptAlert() {
const code = React.useRef('')
@ -111,7 +112,7 @@ function EvaluateJavaScriptAlert() {
const res = globalThis.eval?.(code.current)
alert(
nodeUtils.inspect(awaitResult && res instanceof Promise ? await res : res, {
nodeUtil.inspect(awaitResult && res instanceof Promise ? await res : res, {
depth: inspectDepth,
showHidden,
}),

View file

@ -1,15 +1,15 @@
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import { DevToolsContext, connectToDevTools, useIsDevToolsOpen } from '../devtools'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReactDevToolsConnectSetting: SettingsItem = {
parent: MobileSetting.REVENGE_DEVELOPER,
IconComponent: () => <AssetIcon name="LinkIcon" />,
IconComponent: () => <TableRowAssetIcon name="LinkIcon" />,
title: () => 'Connect to React DevTools',
usePredicate: () => {
const dtOpen = useIsDevToolsOpen()

View file

@ -1,15 +1,15 @@
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import { disconnectFromDevTools, useIsDevToolsOpen } from '../devtools'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReactDevToolsDisconnectSetting: SettingsItem = {
parent: MobileSetting.REVENGE_DEVELOPER,
IconComponent: () => <AssetIcon name="DenyIcon" variant="danger" />,
IconComponent: () => <TableRowAssetIcon name="DenyIcon" variant="danger" />,
variant: 'danger',
title: () => 'Disconnect from React DevTools',
usePredicate: useIsDevToolsOpen,

View file

@ -1,15 +1,15 @@
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import { DevToolsContext } from '../devtools'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReactDevToolsVersionSetting: SettingsItem = {
parent: MobileSetting.REVENGE_DEVELOPER,
IconComponent: () => <AssetIcon name="ScienceIcon" />,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React DevTools',
useDescription: () => __REACT_DEVTOOLS__!.version,
usePredicate: () => DevToolsContext.available,

View file

@ -1,13 +1,13 @@
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting, UserSettingsSections } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeDeveloperSetting: SettingsItem = {
parent: null,
type: 'route',
IconComponent: () => <AssetIcon name="WrenchIcon" />,
IconComponent: () => <TableRowAssetIcon name="WrenchIcon" />,
title: () => 'Developer',
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_DEVELOPER],

View file

@ -1,8 +1,10 @@
import { type PluginApi, PluginFlags } from '@revenge-mod/plugins'
import { PluginFlags } from '@revenge-mod/plugins'
import { InternalPluginFlags, registerPlugin } from '@revenge-mod/plugins/_'
import { _data } from '@revenge-mod/discord/_/settings'
import { onceSettingsModulesLoaded } from '@revenge-mod/discord/settings'
import { _data } from '@revenge-mod/discord/_/modules/settings'
import { onceSettingsModulesLoaded } from '@revenge-mod/discord/modules/settings'
import type { PluginApi } from '@revenge-mod/plugins/types'
registerPlugin(
{

View file

@ -1,4 +1,4 @@
import { addSettingsItemToSection, registerSettingsItems } from '@revenge-mod/discord/settings'
import { addSettingsItemToSection, registerSettingsItems } from '@revenge-mod/discord/modules/settings'
import { MobileSetting } from './constants'

View file

@ -1,5 +1,5 @@
import { SettingListRenderer } from '@revenge-mod/discord/settings'
import { Components } from '@revenge-mod/discord/ui'
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings'
import components from '@revenge-mod/discord/design/components'
import { React, ReactNative } from '@revenge-mod/react'
import { MobileSetting } from '../constants'
@ -8,7 +8,7 @@ import { DevToolsContext } from '../devtools'
// TODO(plugins/settings): debug bridge
export default function RevengeDeveloperSettingScreen() {
return (
<Components.Stack spacing={0} style={{ flexGrow: 1 }}>
<components.Stack spacing={0} style={{ flexGrow: 1 }}>
{globalThis.__REACT_DEVTOOLS__ && <ReactDevToolsAddressSetting />}
<SettingListRenderer.SettingsList
sections={[
@ -28,14 +28,14 @@ export default function RevengeDeveloperSettingScreen() {
},
]}
/>
</Components.Stack>
</components.Stack>
)
}
export function ReactDevToolsAddressSetting() {
return (
<ReactNative.View style={{ paddingHorizontal: 16, paddingTop: 16 }}>
<Components.TextInput
<components.TextInput
editable={!DevToolsContext.open}
isDisabled={DevToolsContext.open}
leadingText="ws://"

View file

@ -1,17 +1,17 @@
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
// @ts-expect-error
const props = HermesInternal.getRuntimeProperties()
const HermesVersionSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="TranscriptOutlineIcon" />,
IconComponent: () => <TableRowAssetIcon name="TranscriptOutlineIcon" />,
title: () => 'Hermes',
useDescription: () => `${props['Bytecode Version']} (${props.Build})`,
type: 'static',

View file

@ -1,17 +1,17 @@
import { React, ReactNative } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const { major, minor, patch, prerelease } = ReactNative.Platform.constants.reactNativeVersion
const version = `${major}.${minor}.${patch}${prerelease ? `-${prerelease}` : ''}`
const ReactNativeVersionSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="ScienceIcon" />,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React Native',
useDescription: () => version,
type: 'static',

View file

@ -2,13 +2,13 @@ import { React } from '@revenge-mod/react'
import { MobileSetting } from '../constants'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReactVersionSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="ScienceIcon" />,
IconComponent: () => <TableRowAssetIcon name="ScienceIcon" />,
title: () => 'React',
useDescription: () => React.version,
type: 'static',

View file

@ -1,15 +1,15 @@
import { BundleUpdaterManager } from '@revenge-mod/discord/native'
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const ReloadAppSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="RetryIcon" />,
IconComponent: () => <TableRowAssetIcon name="RetryIcon" />,
title: () => 'Reload App',
onPress: () => BundleUpdaterManager.reload(),
type: 'pressable',

View file

@ -1,15 +1,15 @@
import { React, ReactNative } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { DiscordServerURL } from '~/constants'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeDiscordServerSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="Discord" />,
IconComponent: () => <TableRowAssetIcon name="Discord" />,
title: () => 'Discord Server',
onPress: () => ReactNative.Linking.openURL(DiscordServerURL),
type: 'pressable',

View file

@ -1,13 +1,13 @@
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting, UserSettingsSections } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeFontsSetting: SettingsItem = {
parent: null,
type: 'route',
IconComponent: () => <AssetIcon name="TextIcon" />,
IconComponent: () => <TableRowAssetIcon name="TextIcon" />,
title: () => 'Fonts',
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_PLUGINS],

View file

@ -1,15 +1,15 @@
import { React, ReactNative } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { GitHubOrganizationURL } from '~/constants'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeGitHubOrganizationSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon name="img_account_sync_github_white" />,
IconComponent: () => <TableRowAssetIcon name="img_account_sync_github_white" />,
title: () => 'GitHub',
onPress: () => ReactNative.Linking.openURL(GitHubOrganizationURL),
type: 'pressable',

View file

@ -1,12 +1,12 @@
import { React } from '@revenge-mod/react'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeNotImplementedSetting: SettingsItem = {
parent: null,
IconComponent: () => <AssetIcon name="CircleXIcon-primary" variant="danger" />,
IconComponent: () => <TableRowAssetIcon name="CircleXIcon-primary" variant="danger" />,
title: () => 'Not Implemented',
useDescription: () => 'This feature is not implemented yet. Check back later!',
variant: 'danger',

View file

@ -1,15 +1,15 @@
import { getEnabledPluginsCount } from '@revenge-mod/plugins/_'
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting, UserSettingsSections } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengePluginsSetting: SettingsItem = {
parent: null,
type: 'route',
IconComponent: () => <AssetIcon name="PuzzlePieceIcon" />,
IconComponent: () => <TableRowAssetIcon name="PuzzlePieceIcon" />,
title: () => 'Plugins',
useTrailing: () => `${getEnabledPluginsCount()} enabled`,
screen: {

View file

@ -1,14 +1,14 @@
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import RevengeIcon from '~assets/RevengeIcon'
import { MobileSetting, UserSettingsSections } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeSetting: SettingsItem = {
parent: null,
type: 'route',
IconComponent: () => <AssetIcon id={RevengeIcon} />,
IconComponent: () => <TableRowAssetIcon id={RevengeIcon} />,
title: () => 'Revenge',
useTrailing: () => `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__}`,
screen: {

View file

@ -1,13 +1,13 @@
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import { MobileSetting, UserSettingsSections } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeThemesSetting: SettingsItem = {
parent: null,
type: 'route',
IconComponent: () => <AssetIcon name="PaintPaletteIcon" />,
IconComponent: () => <TableRowAssetIcon name="PaintPaletteIcon" />,
title: () => 'Themes',
screen: {
route: UserSettingsSections[MobileSetting.REVENGE_THEMES],

View file

@ -1,13 +1,13 @@
import AssetIcon from '~/components/AssetIcon'
import TableRowAssetIcon from '~/components/TableRowAssetIcon'
import RevengeIcon from '~assets/RevengeIcon'
import { MobileSetting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/settings'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
const RevengeVersionSetting: SettingsItem = {
parent: MobileSetting.REVENGE,
IconComponent: () => <AssetIcon id={RevengeIcon} />,
IconComponent: () => <TableRowAssetIcon id={RevengeIcon} />,
title: () => 'Revenge',
useDescription: () => `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__} (${__BUILD_ENV__})`,
type: 'static',

View file

@ -4,8 +4,8 @@ import { InternalPluginFlags, registerPlugin } from '@revenge-mod/plugins/_'
import { waitForModules } from '@revenge-mod/modules/finders'
import { byName, byProps } from '@revenge-mod/modules/finders/filters'
import { _data, _subs } from '@revenge-mod/discord/_/settings'
import { type SettingsItem, onceSettingsModulesLoaded } from '@revenge-mod/discord/settings'
import { _data, _subs } from '@revenge-mod/discord/_/modules/settings'
import { type SettingsItem, onceSettingsModulesLoaded } from '@revenge-mod/discord/modules/settings'
import { after } from '@revenge-mod/patcher'

View file

@ -1,4 +1,4 @@
import { registerSettingsItems, registerSettingsSection } from '@revenge-mod/discord/settings'
import { registerSettingsItems, registerSettingsSection } from '@revenge-mod/discord/modules/settings'
import { MobileSetting } from './constants'

View file

@ -1,4 +1,4 @@
import { SettingListRenderer } from '@revenge-mod/discord/settings'
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings'
import { MobileSetting } from '../constants'

View file

@ -1,8 +1,8 @@
import { SettingListRenderer } from '@revenge-mod/discord/settings'
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings'
import { MobileSetting } from '../constants'
export default function RevengePluginsSettingScreen() {
export default function RevengeFontsSettingScreen() {
return (
<SettingListRenderer.SettingsList
sections={[

View file

@ -1,5 +1,5 @@
import { SettingListRenderer } from '@revenge-mod/discord/settings'
import { Components } from '../../../../lib/discord/src/ui/common'
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings'
import components from '@revenge-mod/discord/design/components'
import { MobileSetting } from '../constants'
export default function RevengeSettingScreen() {
@ -15,12 +15,12 @@ export default function RevengeSettingScreen() {
],
subLabel: (
<>
<Components.Text variant="text-xs/medium">
<components.Text variant="text-xs/medium">
You are using the next version of Revenge!
</Components.Text>
<Components.Text variant="text-xs/semibold" color="text-danger">
</components.Text>
<components.Text variant="text-xs/semibold" color="text-danger">
This version is experimental and may be unstable.
</Components.Text>
</components.Text>
</>
),
},

View file

@ -1,4 +1,4 @@
import { SettingListRenderer } from '@revenge-mod/discord/settings'
import { SettingListRenderer } from '@revenge-mod/discord/modules/settings'
import { MobileSetting } from '../constants'