diff --git a/index.ts b/index.ts index e13cf38..51728bc 100644 --- a/index.ts +++ b/index.ts @@ -8,18 +8,14 @@ import { ApplicationCommandInputType, Argument, CommandContext } from "@api/Comm import { gitHash } from "@shared/vencordUserAgent"; import { Devs } from "@utils/constants"; import { sendMessage } from "@utils/discord"; -import definePlugin, { Plugin, PluginNative } from "@utils/types"; +import definePlugin, { Plugin } from "@utils/types"; import { GuildMemberStore, UserStore } from "@webpack/common"; -import { PluginMeta } from "~plugins"; +import plugins, { PluginMeta } from "~plugins"; -import { isPluginDev, tryOrElse } from "@utils/misc"; -import { findByCodeLazy } from "@webpack"; -import { getUserSettingLazy } from "../../api/UserSettings.js"; +import { isPluginDev } from "@utils/misc"; import SettingsPlugin from "../../plugins/_core/settings"; -const Native = VencordNative.pluginHelpers.venfetch as PluginNative; - const clientVersion = () => { const version = IS_DISCORD_DESKTOP ? DiscordNative.app.getVersion() : IS_VESKTOP ? VesktopNative.app.getVersion() : null; // @ts-ignore @@ -28,34 +24,29 @@ const clientVersion = () => { return `${name}${version ? ` v${version}` : ''}`; }; -const COLOR_TEST = '███████████████████████████'; - - -const LOGO_WITH_ANSI = `\ -\n\ -\tVV VV -\t VV VV -\t VV VV -\t VV VV -\t VVV -\t CCCCCCC -\t CC -\t CC -\t CC -\t CCCCCCC\ +const lines = `\ +VV VV + VV VV + VV VV + VV VV + VVV + CCCCCCC + CC + CC + CC + CCCCCCC\ `.split("\n"); -const LOGO_NO_ANSI = `\ -\n\ -\tVV VV -\t VV VV -\t VV VV -\t VV VV -\t VVV -\t CCCCCCC -\t CC -\t CC -\t CC -\t CCCCCCC\ +const sanitised = `\ +VV VV + VV VV + VV VV + VV VV + VVV + CCCCCCC + CC + CC + CC + CCCCCCC\ `.split("\n"); // ```ansi @@ -71,31 +62,25 @@ const LOGO_NO_ANSI = `\ // CCCCCCC ███████████████████████████ // ```; -const isApiPlugin = (plugin: Plugin) => plugin.name?.endsWith("API") || plugin.required; +const isApiPlugin = (plugin: Plugin) => plugin.name.endsWith("API") || plugin.required; function getEnabledPlugins() { - const counters = { - official: { - enabled: 0, - total: 0 - }, - user: { - enabled: 0, - total: 0 - } - }; + let counter = 0; + let total = 0; + let userpluginsCount = 0; + let totalUserplugins = 0; - Object.values(Vencord.Plugins.plugins).filter((plugin) => !isApiPlugin(plugin)).forEach((plugin) => { - if (PluginMeta[plugin.name]?.userPlugin) { - if (plugin.started) counters.user.enabled++; - counters.user.total++; + Object.values(plugins).filter((plugin) => !isApiPlugin(plugin)).forEach((plugin) => { + if (PluginMeta[plugin.name].userPlugin) { + if (plugin.started) userpluginsCount++; + totalUserplugins++; } else { - if (plugin.started) counters.official.enabled++; - counters.official.total++; - } + if (plugin.started) counter++; + total++; + }; }); - return `${counters.official.enabled} / ${counters.official.total} (official)` + (counters.user.total ? `, ${counters.user.enabled} / ${counters.user.total} (userplugins)` : ""); + return `${counter} / ${total} (official)` + (totalUserplugins ? `, ${userpluginsCount} / ${totalUserplugins} (userplugins)` : ""); } function getDonorStatus() { return GuildMemberStore.getMember("1015060230222131221", UserStore.getCurrentUser().id).roles.includes("1042507929485586532"); @@ -105,95 +90,6 @@ function getContribStatus() { return isPluginDev(userId) || GuildMemberStore.getMember("1015060230222131221", userId).roles.includes("1026534353167208489"); } - - -const getVersions = findByCodeLazy("logsUploaded:new Date().toISOString(),"); -const ShowCurrentGame = getUserSettingLazy("status", "showCurrentGame")!; - - -export default definePlugin({ - name: "venfetch", - description: "neofetch for vencord", - authors: [Devs.nin0dev], - commands: [ - { - name: "venfetch", - description: "neofetch for vencord", - inputType: ApplicationCommandInputType.BUILT_IN, - execute: async (args: Argument[], ctx: CommandContext) => { - const commonIssues = { - "NoRPC": Vencord.Plugins.isPluginEnabled("NoRPC"), - "disabled activities": tryOrElse(() => !ShowCurrentGame.getSetting(), false), - "outdated": BUILD_TIMESTAMP < Date.now() - 12096e5, - }; - - const memory = await Native?.getMemory(); - - const { username } = UserStore.getCurrentUser(); - const versions = getVersions(); - const info: Record = { - version: `${VERSION} ~ ${gitHash}${SettingsPlugin.additionalInfo} - ${Intl.DateTimeFormat(navigator.language, { dateStyle: "medium" }).format(BUILD_TIMESTAMP)}${!IS_STANDALONE ? ` ~ dev` : ""}`, - client: `${t(window.GLOBAL_ENV.RELEASE_CHANNEL)} ~ ${clientVersion()}`, - 'Build Number': `${versions.buildNumber} ~ Hash: ${versions.versionHash?.slice(0, 7) ?? 'unknown'}`, - issues: Object.entries(commonIssues).filter(([_, value]) => value).map(([key]) => key).join(", ") || '', - - _: null, - - // @ts-ignore - platform: navigator.userAgentData?.platform ? `${navigator.userAgentData?.platform} (${navigator.platform})` : navigator.platform, - plugins: getEnabledPlugins(), - uptime: `${~~((Date.now() - window.GLOBAL_ENV.HTML_TIMESTAMP) / 1000)}s`, - memory: memory ? `${humanFileSize(memory.heapUsed)} / ${humanFileSize(memory.heapTotal)}` : '', - - __: null, - - donor: getDonorStatus() ? "yes" : "no", - contributor: getContribStatus() ? "yes" : "no", - - ___: null, - - // electron web context, want to get total memory usage - }; - - const computed: [string, string | null][] = Object.entries(info).filter(([key, value]) => value === null || value!.length).map(([key, value]) => [key, value]); - - let str = ""; - const MAGIC_NUMBER = 25; - - str += `${LOGO_WITH_ANSI[0]}${" ".repeat(MAGIC_NUMBER - LOGO_NO_ANSI[0].length)}${username}\n`; - - for (let i = 1; i < computed.length + 1; i++) { - const logoLine = LOGO_WITH_ANSI[i]; - const line = computed[i - 1]; - - if (logoLine) { - str += logoLine; - str += " ".repeat(MAGIC_NUMBER - 3 - LOGO_NO_ANSI[i].length); - } else { - str += " ".repeat(MAGIC_NUMBER); - } - - const [key, value] = line; - - if (!key.startsWith("_") && value) { - str += `${key[0].toUpperCase()}${key.slice(1)}: ${value}`; - } - - str += '\n'; - } - - str += `${" ".repeat(MAGIC_NUMBER)}${COLOR_TEST}\n`; - - sendMessage(ctx.channel.id, { - content: `\`\`\`ansi\n${str}\n\`\`\`` - }); - return; - } - } - ] -}); - -const t = (e: string) => e.length > 0 ? e[0].toUpperCase() + e.slice(1) : ""; function humanFileSize(bytes, si = false, dp = 1) { const thresh = si ? 1000 : 1024; @@ -215,3 +111,92 @@ function humanFileSize(bytes, si = false, dp = 1) { return bytes.toFixed(dp) + " " + units[u]; } + +let BUILD_NUMBER; +let VERSION_HASH; + +export default definePlugin({ + name: "venfetch", + description: "neofetch for vencord", + authors: [Devs.nin0dev], + patches: [ + { + find: /.log\("[BUILD INFO]/, + replacement: [ + { + match: /Build Number: "\).concat\(("\d+")/, + replace: "Build Number: \").concat($self.setBuildNumber($1)" + }, + { + match: /Version Hash: \"\).concat\(("\w+")/, + replace: "Version Hash: \").concat($self.setVersionHash($1)" + } + ] + } + ], + setBuildNumber(buildNumber) { + return BUILD_NUMBER = buildNumber; + }, + setVersionHash(versionHash) { + return VERSION_HASH = versionHash; + }, + commands: [ + { + name: "venfetch", + description: "neofetch for vencord", + inputType: ApplicationCommandInputType.BUILT_IN, + execute: (args: Argument[], ctx: CommandContext) => { + const { username } = UserStore.getCurrentUser(); + const info: Record = { + version: `${VERSION} ~ ${gitHash}${SettingsPlugin.additionalInfo} - ${Intl.DateTimeFormat(navigator.language, { dateStyle: "medium" }).format(BUILD_TIMESTAMP)}`, + client: `${t(window.GLOBAL_ENV.RELEASE_CHANNEL)} ~ ${clientVersion()}`, + // TODO: fix this + // build: `${BUILD_NUMBER ?? "Unknown"} (${VERSION_HASH?.slice(0, 7) ?? 'unknown'})`, + // @ts-ignore + platform: navigator.userAgentData?.platform ? `${navigator.userAgentData?.platform} (${navigator.platform})` : navigator.platform, + plugins: getEnabledPlugins(), + uptime: `${~~((Date.now() - window.GLOBAL_ENV.HTML_TIMESTAMP) / 1000)}s`, + // TODO: pr to vencord real and add to vencordnative + // memory: `${humanFileSize(VencordNative.memoryUsage().heapUsed)} / ${humanFileSize(VencordNative.memoryUsage().heapTotal)}`, + _: null, + + donor: getDonorStatus() ? "yes" : "no", + contributor: getContribStatus() ? "yes" : "no", + + __: null, + + __COLOR_TEST__: "███████████████████████████" + + // electron web context, want to get total memory usage + }; + + const computed: [string, string | null][] = Object.entries(info).map(([key, value]) => [key, value]); + + let str = ""; + + str += `${lines[0]}${" ".repeat(25 - lines[0].length)}${username}\n`; + + for (let i = 1; i < computed.length + 1; i++) { + const line = computed[i - 1]; + + if (lines[i]) { + str += `${lines[i]}`; + + if (line && line[1] !== null && line[0] !== "__COLOR_TEST__") str += `${" ".repeat(25 - sanitised[i].length)}${t(line[0])}: ${line[1]}\n`; + else if (line[0] === "__COLOR_TEST__") str += line[0] + "\n"; else str += "\n"; + } else { + if (line && line[1] !== null && line[0] !== "__COLOR_TEST__") str += `${" ".repeat(25)}${t(line[0])}: ${line[1]}\n`; + else if (line[0] === "__COLOR_TEST__") str += `${" ".repeat(25)}${line[1]}\n`; else str += "\n"; + } + } + + sendMessage(ctx.channel.id, { + content: `\`\`\`ansi\n${str}\n\`\`\`` + }); + return; + } + } + ] +}); + +const t = (e: string) => e.length > 0 ? e[0].toUpperCase() + e.slice(1) : ""; diff --git a/native.ts b/native.ts deleted file mode 100644 index 7095bc2..0000000 --- a/native.ts +++ /dev/null @@ -1,8 +0,0 @@ - -export function getMemory() { - const memory = process.memoryUsage(); - return { - heapUsed: memory.heapUsed, - heapTotal: memory.heapTotal - }; -}