diff --git a/scripts/build.ts b/scripts/build.ts
index 37b086d..8906c25 100644
--- a/scripts/build.ts
+++ b/scripts/build.ts
@@ -33,6 +33,9 @@ export default async function build(dev = Dev, log = true) {
if (log) console.info(chalk.cyanBright('\u{1F5BB} Assets generated'))
if (log) console.info(chalk.gray('\u{1F5CE} Compiling JS...'))
+ const COMMIT = (await $`git rev-parse HEAD`.text()).trim().substring(0, 7)
+ const REPO = 'revenge-mod/revenge-bundle-next'
+
const bundle = await rolldown({
input: 'src/index.ts',
platform: 'neutral',
@@ -48,10 +51,17 @@ export default async function build(dev = Dev, log = true) {
'.webp': 'dataurl',
},
define: {
- __BUILD_VERSION__: JSON.stringify(pkg.version),
- __BUILD_COMMIT__: JSON.stringify(
- (await $`git rev-parse HEAD`.text()).trim().substring(0, 7),
+ __BUILD_DISCORD_SERVER_URL__: JSON.stringify(
+ 'https://discord.com/invite/ddcQf3s2Uq',
),
+ __BUILD_SOURCE_REPOSITORY_URL__: JSON.stringify(
+ `https://github.com/${REPO}`,
+ ),
+ __BUILD_LICENSE_URL__: JSON.stringify(
+ `https://raw.githubusercontent.com/${REPO}/${COMMIT}/LICENSE`,
+ ),
+ __BUILD_VERSION__: JSON.stringify(pkg.version),
+ __BUILD_COMMIT__: JSON.stringify(COMMIT),
__BUILD_BRANCH__: JSON.stringify(
(await $`git rev-parse --abbrev-ref HEAD`.text()).trim(),
),
diff --git a/src/constants.ts b/src/constants.ts
index dd6571f..f205688 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -1,3 +1,3 @@
-export const GitHubOrganizationURL = 'https://github.com/revenge-mod'
-export const DiscordServerURL = 'https://discord.com/invite/ddcQf3s2Uq'
+export const LicenseFallbackURL = 'https://www.gnu.org/licenses/gpl-3.0.txt'
export const BuildEnvironment = __DEV__ ? 'development' : 'production'
+export const FullVersion = `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__}`
diff --git a/src/plugins/init/settings/constants.ts b/src/plugins/init/settings/constants.ts
index 342036c..41c9389 100644
--- a/src/plugins/init/settings/constants.ts
+++ b/src/plugins/init/settings/constants.ts
@@ -10,7 +10,8 @@ export const Setting = {
// SUBSETTINGS
RevengeDiscord: 'RevengeDiscord',
- RevengeGitHub: 'RevengeGitHub',
+ RevengeSourceRepository: 'RevengeSourceRepository',
+ RevengeLicense: 'RevengeLicense',
Reload: 'Reload',
RevengeVersion: 'RevengeVersion',
diff --git a/src/plugins/init/settings/definitions/RevengeDiscordSetting.tsx b/src/plugins/init/settings/definitions/RevengeDiscordSetting.tsx
index 8407f8a..62c5681 100644
--- a/src/plugins/init/settings/definitions/RevengeDiscordSetting.tsx
+++ b/src/plugins/init/settings/definitions/RevengeDiscordSetting.tsx
@@ -1,6 +1,5 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
import { Linking } from 'react-native'
-import { DiscordServerURL } from '~/constants'
import { Setting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
@@ -8,8 +7,9 @@ const RevengeDiscordSetting: SettingsItem = {
parent: Setting.Revenge,
IconComponent: () => ,
title: () => 'Discord Server',
+ useDescription: () => __BUILD_DISCORD_SERVER_URL__,
onPress: () => {
- Linking.openURL(DiscordServerURL)
+ Linking.openURL(__BUILD_DISCORD_SERVER_URL__)
},
type: 'pressable',
}
diff --git a/src/plugins/init/settings/definitions/RevengeGitHubSetting.tsx b/src/plugins/init/settings/definitions/RevengeGitHubSetting.tsx
deleted file mode 100644
index d39d1d7..0000000
--- a/src/plugins/init/settings/definitions/RevengeGitHubSetting.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
-import { Linking } from 'react-native'
-import { GitHubOrganizationURL } from '~/constants'
-import { Setting } from '../constants'
-import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
-
-const RevengeGitHubSetting: SettingsItem = {
- parent: Setting.Revenge,
- IconComponent: () => (
-
- ),
- title: () => 'GitHub',
- onPress: () => {
- Linking.openURL(GitHubOrganizationURL)
- },
- type: 'pressable',
-}
-
-export default RevengeGitHubSetting
diff --git a/src/plugins/init/settings/definitions/RevengeLicenseSetting.tsx b/src/plugins/init/settings/definitions/RevengeLicenseSetting.tsx
new file mode 100644
index 0000000..ad535b1
--- /dev/null
+++ b/src/plugins/init/settings/definitions/RevengeLicenseSetting.tsx
@@ -0,0 +1,79 @@
+import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
+import { AlertActionCreators } from '@revenge-mod/discord/actions'
+import { Design } from '@revenge-mod/discord/design'
+import { useEffect, useState } from 'react'
+import { ScrollView, useWindowDimensions } from 'react-native'
+import { LicenseFallbackURL } from '~/constants'
+import { Setting } from '../constants'
+import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
+
+const RevengeLicenseSetting: SettingsItem = {
+ parent: Setting.Revenge,
+ IconComponent: () => ,
+ title: () => 'License',
+ onPress: () => {
+ AlertActionCreators.openAlert('revenge-license', )
+ },
+ type: 'pressable',
+}
+
+export default RevengeLicenseSetting
+
+const trimStart = (text: string) => text.replaceAll(/^ +/gm, '')
+
+function LicenseAlert() {
+ const { height } = useWindowDimensions()
+ const [license, setLicense] = useState(null)
+
+ useEffect(() => {
+ fetch(__BUILD_LICENSE_URL__)
+ .then(response => {
+ if (!response.ok) {
+ throw new Error(
+ `Failed to fetch license: ${response.statusText}`,
+ )
+ }
+ return response.text()
+ })
+ .then(trimStart)
+ .then(setLicense)
+ .catch(() => {
+ // Fallback to the hardcoded license URL
+ fetch(LicenseFallbackURL)
+ .then(response => response.text())
+ .then(trimStart)
+ .then(setLicense)
+ .catch(error => {
+ console.error(
+ 'Failed to fetch fallback license:',
+ error,
+ )
+ setLicense('Failed to load license.')
+ })
+ })
+ }, [])
+
+ return (
+
+
+ {license ?? 'Fetching...'}
+
+
+ }
+ actions={
+
+ }
+ />
+ )
+}
diff --git a/src/plugins/init/settings/definitions/RevengeSetting.tsx b/src/plugins/init/settings/definitions/RevengeSetting.tsx
index f2c5cb2..ae6277c 100644
--- a/src/plugins/init/settings/definitions/RevengeSetting.tsx
+++ b/src/plugins/init/settings/definitions/RevengeSetting.tsx
@@ -1,4 +1,5 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
+import { FullVersion } from '~/constants'
import RevengeIcon from '~assets/RevengeIcon'
import { RouteNames, Setting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
@@ -8,8 +9,7 @@ const RevengeSetting: SettingsItem = {
type: 'route',
IconComponent: () => ,
title: () => 'Revenge',
- useTrailing: () =>
- `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__}`,
+ useTrailing: () => FullVersion,
screen: {
route: RouteNames[Setting.Revenge],
getComponent: () => require('../screens/RevengeSettingScreen').default,
diff --git a/src/plugins/init/settings/definitions/RevengeSourceRepositorySetting.tsx b/src/plugins/init/settings/definitions/RevengeSourceRepositorySetting.tsx
new file mode 100644
index 0000000..953c9ee
--- /dev/null
+++ b/src/plugins/init/settings/definitions/RevengeSourceRepositorySetting.tsx
@@ -0,0 +1,17 @@
+import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
+import { Linking } from 'react-native'
+import { Setting } from '../constants'
+import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
+
+const RevengeSourceRepositorySetting: SettingsItem = {
+ parent: Setting.Revenge,
+ IconComponent: () => ,
+ title: () => 'Source Code',
+ useDescription: () => __BUILD_SOURCE_REPOSITORY_URL__,
+ onPress: () => {
+ Linking.openURL(__BUILD_SOURCE_REPOSITORY_URL__)
+ },
+ type: 'pressable',
+}
+
+export default RevengeSourceRepositorySetting
diff --git a/src/plugins/init/settings/definitions/RevengeVersionSetting.tsx b/src/plugins/init/settings/definitions/RevengeVersionSetting.tsx
index 82ce0ce..0778e3c 100644
--- a/src/plugins/init/settings/definitions/RevengeVersionSetting.tsx
+++ b/src/plugins/init/settings/definitions/RevengeVersionSetting.tsx
@@ -1,5 +1,5 @@
import TableRowAssetIcon from '@revenge-mod/components/TableRowAssetIcon'
-import { BuildEnvironment } from '~/constants'
+import { BuildEnvironment, FullVersion } from '~/constants'
import RevengeIcon from '~assets/RevengeIcon'
import { Setting } from '../constants'
import type { SettingsItem } from '@revenge-mod/discord/modules/settings'
@@ -8,8 +8,7 @@ const RevengeVersionSetting: SettingsItem = {
parent: Setting.Revenge,
IconComponent: () => ,
title: () => 'Revenge',
- useDescription: () =>
- `${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__} (${BuildEnvironment})`,
+ useDescription: () => `${FullVersion} (${BuildEnvironment})`,
type: 'static',
}
diff --git a/src/plugins/init/settings/register.ts b/src/plugins/init/settings/register.ts
index c1c378f..72e4a66 100644
--- a/src/plugins/init/settings/register.ts
+++ b/src/plugins/init/settings/register.ts
@@ -11,9 +11,10 @@ import ReactVersionSetting from './definitions/ReactVersionSetting'
import ReloadSetting from './definitions/ReloadSetting'
import RevengeCustomPageSetting from './definitions/RevengeCustomPageSetting'
import RevengeDiscordSetting from './definitions/RevengeDiscordSetting'
-import RevengeGitHubSetting from './definitions/RevengeGitHubSetting'
+import RevengeLicenseSetting from './definitions/RevengeLicenseSetting'
import RevengePluginsSetting from './definitions/RevengePluginsSetting'
import RevengeSetting from './definitions/RevengeSetting'
+import RevengeSourceRepositorySetting from './definitions/RevengeSourceRepositorySetting'
import RevengeVersionSetting from './definitions/RevengeVersionSetting'
registerSettingsItems({
@@ -22,7 +23,8 @@ registerSettingsItems({
// [MobileSetting.REVENGE_THEMES]: RevengeThemesSetting,
// [MobileSetting.REVENGE_FONTS]: RevengeFontsSetting,
[Setting.RevengeCustomPage]: RevengeCustomPageSetting,
- [Setting.RevengeGitHub]: RevengeGitHubSetting,
+ [Setting.RevengeSourceRepository]: RevengeSourceRepositorySetting,
+ [Setting.RevengeLicense]: RevengeLicenseSetting,
[Setting.RevengeDiscord]: RevengeDiscordSetting,
[Setting.Reload]: ReloadSetting,
[Setting.RevengeVersion]: RevengeVersionSetting,
diff --git a/src/plugins/init/settings/screens/RevengeSettingScreen.tsx b/src/plugins/init/settings/screens/RevengeSettingScreen.tsx
index 70abc1f..26f9425 100644
--- a/src/plugins/init/settings/screens/RevengeSettingScreen.tsx
+++ b/src/plugins/init/settings/screens/RevengeSettingScreen.tsx
@@ -11,7 +11,8 @@ export default function RevengeSettingScreen() {
settings: [
Setting.RevengeVersion,
Setting.RevengeDiscord,
- Setting.RevengeGitHub,
+ Setting.RevengeSourceRepository,
+ Setting.RevengeLicense,
],
subLabel: (
<>
diff --git a/src/plugins/preinit/logging/index.ts b/src/plugins/preinit/logging/index.ts
index 9461596..8a5ced3 100644
--- a/src/plugins/preinit/logging/index.ts
+++ b/src/plugins/preinit/logging/index.ts
@@ -1,7 +1,7 @@
import { AppStartPerformance } from '@revenge-mod/discord/preinit'
import { InternalPluginFlags, registerPlugin } from '@revenge-mod/plugins/_'
import { PluginFlags } from '@revenge-mod/plugins/constants'
-import { BuildEnvironment } from '~/constants'
+import { BuildEnvironment, FullVersion } from '~/constants'
AppStartPerformance.mark('👊', 'Plugins register')
@@ -33,7 +33,7 @@ registerPlugin(
performance.now() - tsInit,
)
logger.log(
- `👊 Revenge. Discord, your way. (${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__} (${BuildEnvironment}))`,
+ `👊 Revenge. Discord, your way. (${FullVersion} (${BuildEnvironment}))`,
)
},
},
diff --git a/src/preinit.ts b/src/preinit.ts
index e525c33..1b6eb4f 100644
--- a/src/preinit.ts
+++ b/src/preinit.ts
@@ -6,7 +6,7 @@ import {
onModuleInitialized,
} from '@revenge-mod/modules/metro/subscriptions'
import { getErrorStack } from '@revenge-mod/utils/error'
-import { BuildEnvironment } from './constants'
+import { BuildEnvironment, FullVersion } from './constants'
const IndexModuleId = 0
@@ -66,7 +66,7 @@ function onError(e: unknown) {
const Device = DeviceModule.getConstants()
alert(
- `Failed to load Revenge (${__BUILD_VERSION__}-${__BUILD_COMMIT__}-${__BUILD_BRANCH__} (${BuildEnvironment}))\n` +
+ `Failed to load Revenge (${FullVersion} (${BuildEnvironment}))\n` +
`Discord: ${Client.Version} (${Client.Build})\n` +
`Device: ${Device.deviceManufacturer} ${Device.deviceModel}\n\n` +
getErrorStack(e),
diff --git a/types.d.ts b/types.d.ts
index 7fd8eb7..a8e6245 100644
--- a/types.d.ts
+++ b/types.d.ts
@@ -2,6 +2,9 @@
declare global {
const __DEV__: boolean
+ const __BUILD_DISCORD_SERVER_URL__: string
+ const __BUILD_SOURCE_REPOSITORY_URL__: string
+ const __BUILD_LICENSE_URL__: string
const __BUILD_COMMIT__: string
const __BUILD_BRANCH__: string
const __BUILD_VERSION__: string