Compare commits

..

3 commits
main ... main

Author SHA1 Message Date
675cabb310 add spaces 2024-10-27 15:59:15 +00:00
2ddf4753c1 its shiggy season 2024-10-27 15:57:50 +00:00
89ee3fba97 fixes and plugin totals (#3)
excludes API plugins like /vencord-plugins

contributor shows if you arent in the vencord server

remove duplicate Date.now() call just use the one provided by Discord itself (might be slightly different? does it matter?)

Reviewed-on: https://git.nin0.dev///userplugins/venfetch/pulls/3
Co-authored-by: Sqaaakoi <sqaaakoi-git@sqaaakoi.xyz>
Co-committed-by: Sqaaakoi <sqaaakoi-git@sqaaakoi.xyz>
2024-10-27 11:56:54 -04:00
2 changed files with 127 additions and 150 deletions

269
index.ts
View file

@ -8,18 +8,14 @@ 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, PluginNative } from "@utils/types"; import definePlugin, { Plugin } from "@utils/types";
import { GuildMemberStore, UserStore } from "@webpack/common"; import { GuildMemberStore, UserStore } from "@webpack/common";
import { PluginMeta } from "~plugins"; import plugins, { PluginMeta } from "~plugins";
import { isPluginDev, tryOrElse } from "@utils/misc"; import { isPluginDev } from "@utils/misc";
import { findByCodeLazy } from "@webpack";
import { getUserSettingLazy } from "../../api/UserSettings.js";
import SettingsPlugin from "../../plugins/_core/settings"; 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;
// @ts-ignore // @ts-ignore
@ -28,34 +24,29 @@ const clientVersion = () => {
return `${name}${version ? ` v${version}` : ''}`; return `${name}${version ? ` v${version}` : ''}`;
}; };
const COLOR_TEST = '███████████████████████████'; const lines = `\
VV VV
VV VV
const LOGO_WITH_ANSI = `\ VV VV
\n\ VV VV
\tVV VV VVV
\t VV VV CCCCCCC
\t VV VV CC
\t VV VV CC
\t VVV CC
\t CCCCCCC CCCCCCC\
\t CC
\t CC
\t CC
\t CCCCCCC\
`.split("\n"); `.split("\n");
const LOGO_NO_ANSI = `\ const sanitised = `\
\n\ VV VV
\tVV VV VV VV
\t VV VV VV VV
\t VV VV VV VV
\t VV VV VVV
\t VVV CCCCCCC
\t CCCCCCC CC
\t CC CC
\t CC CC
\t CC CCCCCCC\
\t CCCCCCC\
`.split("\n"); `.split("\n");
// ```ansi // ```ansi
@ -71,31 +62,25 @@ const LOGO_NO_ANSI = `\
// 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 = { let counter = 0;
official: { let total = 0;
enabled: 0, let userpluginsCount = 0;
total: 0 let totalUserplugins = 0;
},
user: {
enabled: 0,
total: 0
}
};
Object.values(Vencord.Plugins.plugins).filter((plugin) => !isApiPlugin(plugin)).forEach((plugin) => { Object.values(plugins).filter((plugin) => !isApiPlugin(plugin)).forEach((plugin) => {
if (PluginMeta[plugin.name]?.userPlugin) { if (PluginMeta[plugin.name].userPlugin) {
if (plugin.started) counters.user.enabled++; if (plugin.started) userpluginsCount++;
counters.user.total++; totalUserplugins++;
} else { } else {
if (plugin.started) counters.official.enabled++; if (plugin.started) counter++;
counters.official.total++; 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() { function getDonorStatus() {
return GuildMemberStore.getMember("1015060230222131221", UserStore.getCurrentUser().id).roles.includes("1042507929485586532"); 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"); 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;
@ -215,3 +111,92 @@ function humanFileSize(bytes, si = false, dp = 1) {
return bytes.toFixed(dp) + " " + units[u]; 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<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()}`,
// 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) : "";

View file

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