Compare commits

...
Sign in to create a new pull request.

4 commits
guh ... main

Author SHA1 Message Date
b8f77887ac
fix edge case with plugin without a name
Signed-off-by: splatter <splatterxl@outlook.ie>
2025-02-24 01:06:27 +00:00
c4d7b98e72
refactor rendering code
Signed-off-by: splatter <splatterxl@outlook.ie>
2025-02-02 02:04:33 +00:00
788c01e81a
add memory
Signed-off-by: splatter <splatterxl@outlook.ie>
2025-02-01 15:04:42 +00:00
cb617a8ed7 add common issues 2025-01-19 16:53:44 +00:00
2 changed files with 132 additions and 98 deletions

222
index.ts
View file

@ -8,14 +8,17 @@ import { ApplicationCommandInputType, Argument, CommandContext } from "@api/Comm
import { gitHash } from "@shared/vencordUserAgent"; import { gitHash } from "@shared/vencordUserAgent";
import { Devs } from "@utils/constants"; import { Devs } from "@utils/constants";
import { sendMessage } from "@utils/discord"; import { sendMessage } from "@utils/discord";
import definePlugin, { Plugin } from "@utils/types"; import definePlugin, { Plugin, PluginNative } from "@utils/types";
import { GuildMemberStore, UserStore } from "@webpack/common"; import { GuildMemberStore, UserStore } from "@webpack/common";
import plugins, { PluginMeta } from "~plugins"; import { PluginMeta } from "~plugins";
import SettingsPlugin from "../../plugins/_core/settings"; import { isPluginDev, tryOrElse } from "@utils/misc";
import { isPluginDev } from "@utils/misc";
import { findByCodeLazy } from "@webpack"; import { findByCodeLazy } from "@webpack";
import { getUserSettingLazy } from "../../api/UserSettings.js";
import SettingsPlugin from "../../plugins/_core/settings";
const Native = VencordNative.pluginHelpers.venfetch as PluginNative<typeof import("./native")>;
const clientVersion = () => { const clientVersion = () => {
const version = IS_DISCORD_DESKTOP ? DiscordNative.app.getVersion() : IS_VESKTOP ? VesktopNative.app.getVersion() : null; const version = IS_DISCORD_DESKTOP ? DiscordNative.app.getVersion() : IS_VESKTOP ? VesktopNative.app.getVersion() : null;
@ -25,29 +28,34 @@ const clientVersion = () => {
return `${name}${version ? ` v${version}` : ''}`; return `${name}${version ? ` v${version}` : ''}`;
}; };
const lines = `\ const COLOR_TEST = '███████████████████████████';
VV VV
VV VV
VV VV const LOGO_WITH_ANSI = `\
VV VV \n\
VVV \tVV VV
CCCCCCC \t VV VV
CC \t VV VV
CC \t VV VV
CC \t VVV
CCCCCCC\ \t CCCCCCC
\t CC
\t CC
\t CC
\t CCCCCCC\
`.split("\n"); `.split("\n");
const sanitised = `\ const LOGO_NO_ANSI = `\
VV VV \n\
VV VV \tVV VV
VV VV \t VV VV
VV VV \t VV VV
VVV \t VV VV
CCCCCCC \t VVV
CC \t CCCCCCC
CC \t CC
CC \t CC
CCCCCCC\ \t CC
\t CCCCCCC\
`.split("\n"); `.split("\n");
// ```ansi // ```ansi
@ -63,7 +71,7 @@ VV VV
// CCCCCCC ███████████████████████████ // CCCCCCC ███████████████████████████
// ```; // ```;
const isApiPlugin = (plugin: Plugin) => plugin.name.endsWith("API") || plugin.required; const isApiPlugin = (plugin: Plugin) => plugin.name?.endsWith("API") || plugin.required;
function getEnabledPlugins() { function getEnabledPlugins() {
const counters = { const counters = {
@ -97,6 +105,95 @@ function getContribStatus() {
return isPluginDev(userId) || GuildMemberStore.getMember("1015060230222131221", userId).roles.includes("1026534353167208489"); return isPluginDev(userId) || GuildMemberStore.getMember("1015060230222131221", userId).roles.includes("1026534353167208489");
} }
const getVersions = findByCodeLazy("logsUploaded:new Date().toISOString(),");
const ShowCurrentGame = getUserSettingLazy<boolean>("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<string, string | null> = {
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) { function humanFileSize(bytes, si = false, dp = 1) {
const thresh = si ? 1000 : 1024; const thresh = si ? 1000 : 1024;
@ -118,74 +215,3 @@ function humanFileSize(bytes, si = false, dp = 1) {
return bytes.toFixed(dp) + " " + units[u]; return bytes.toFixed(dp) + " " + units[u];
} }
const getVersions = findByCodeLazy("logsUploaded:new Date().toISOString(),");
export default definePlugin({
name: "venfetch",
description: "neofetch for vencord",
authors: [Devs.nin0dev],
commands: [
{
name: "venfetch",
description: "neofetch for vencord",
inputType: ApplicationCommandInputType.BUILT_IN,
execute: (args: Argument[], ctx: CommandContext) => {
const { username } = UserStore.getCurrentUser();
const versions = getVersions();
const info: Record<string, string | null> = {
version: `${VERSION} ~ ${gitHash}${SettingsPlugin.additionalInfo} - ${Intl.DateTimeFormat(navigator.language, { dateStyle: "medium" }).format(BUILD_TIMESTAMP)}`,
client: `${t(window.GLOBAL_ENV.RELEASE_CHANNEL)} ~ ${clientVersion()}`,
'Build Number': `${versions.buildNumber} ~ Hash: ${versions.versionHash?.slice(0, 7) ?? 'unknown'}`,
_: 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`,
// 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) : "";

8
native.ts Normal file
View file

@ -0,0 +1,8 @@
export function getMemory() {
const memory = process.memoryUsage();
return {
heapUsed: memory.heapUsed,
heapTotal: memory.heapTotal
};
}