diff --git a/bun.lockb b/bun.lockb index 56afe13..761def7 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 07bac45..eb0e917 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "typescript": "^5" }, "dependencies": { + "@ocbwoy3/libocbwoy3": "^0.0.5", "@types/commander": "^2.12.5", "@types/dotenv": "^8.2.3", "@types/sharp": "^0.32.0", diff --git a/scripts/bin/betterSplash.ts b/scripts/bin/betterSplash.ts index f4693e9..91c1436 100644 --- a/scripts/bin/betterSplash.ts +++ b/scripts/bin/betterSplash.ts @@ -2,30 +2,108 @@ import { $ } from "bun"; +const birthday = new Date(2009, 7, 16); +const age = Math.floor( + (Date.now() - birthday.getTime()) / (1000 * 60 * 60 * 24 * 365) +); + +const isBirthday = + birthday.getDate() === new Date().getDate() && + birthday.getMonth() === new Date().getMonth(); + +const isLatvian = Intl.DateTimeFormat() + .resolvedOptions() + .timeZone.startsWith("Europe/Riga"); + +function getOrdinalSuffix(day: number): string { + const j = day % 10, + k = day % 100; + if (j === 1 && k !== 11) return "st"; + if (j === 2 && k !== 12) return "nd"; + if (j === 3 && k !== 13) return "rd"; + return "th"; +} + +// chatgpt +function chooseRandom(array: string[]): string { + if (isBirthday) + return `Is it your ${age}${getOrdinalSuffix(age)} birthday?`; + + if (array.length === 0) throw new Error("lol"); + const index = + crypto.getRandomValues(new Uint32Array(4)).reduce((a, b) => a + b) % + array.length; + return array[index]; +} + const splashes = [ - "not ben shaped pear-o", + "Keep on ricing yo' Hyprland", + "Let's make today even better!", - "\"I use Nix, btw!\" - OCbwoy3", - "I use Nix, btw!", - "Nix beats arch", - - "You like kissing boys, don't you?", - - "Now with gay furries :3", - "Now with femboys :3", + "\"iUseNixBTW\" You literally... Roblox?", + "is it just me or the arch/nix pipeline turned me into a closeted femboy?", + "the nix pipeline is real", + "Anti-OCbwoy3-ifier MV2 Premium.xpi", + + "Do crabs think fish are flying?", + "Don't forget to water your thoughts.", + "Fox detected. Please pet gently.", + + // Venting ones + + "mount /dev/boyfriend ~", + isLatvian + ? "Latvia.. I hate it here, I wanna move." /* extremely accurate unbiased content coming from a latvian himself */ + : "NOT going back Latvia.", + "rm -rf ~", + + // Minecraft (DEI ones) + + "Amplify and listen to BIPOC voices!", + "Support the BIPOC community and creators!", + "Contains infinite genders!", + "Remember to use gender neutral pronouns!", + "You are valid!", + "I'm glad you're here!", + "You are welcome here!", + "Your gender is valid!", + + // Regretevator ones + + "dr! ar u sure i cant drink 20 blogsy's??", + "That subway wuz so dark! Can't have a party withowt silly litez!", + "Blogsy is so AWESOME!", + "My life is liek a video game i think", + + "What’s yer favorite type o’ wood?", + "Everybody knows th’ best kind o’ buildin’ is made outta grit and woodwork!", + + // Me IRL + + "tfw Hyprland boots faster than I do", + "everyone gangsta till your free trial of life ends", + + // Reality + + "flake 'flake:self' does not provide attribute 'willpower'", + "copilot stop writing my thoughts", + "404: purpose not found", + "respawn button greyed out", + "you’ve reached the end of the existential demo", + "feeling like an empty JSON object" + ]; const debug: boolean = false as false | true; if (debug === true) { - splashes.forEach(async(a)=>{ - await $`notify-send "Welcome to... your PC?" "${a}"`; - }) + splashes.forEach(async (a) => { + await $`notify-send "Welcome to Hyprland!" "${a}"`; + }); } else { - const randomSplash = splashes[Math.floor(Math.random() * splashes.length)]; - - await $`notify-send "Welcome to... your PC?" "${randomSplash}"`; -} + const randomSplash = chooseRandom(splashes); + await $`notify-send "Welcome to Hyprland!" "${randomSplash}"`; +} diff --git a/scripts/bin/patchInternalRobloxStudio.ts b/scripts/bin/patchInternalRobloxStudio.ts index 04ea18d..21b922f 100644 --- a/scripts/bin/patchInternalRobloxStudio.ts +++ b/scripts/bin/patchInternalRobloxStudio.ts @@ -1,6 +1,9 @@ import { promises as fs } from "fs"; import * as path from "path"; import * as os from "os"; +import { setConsoleTitle } from "@ocbwoy3/libocbwoy3"; + +setConsoleTitle("Roblox Studio patcher"); const SIGNATURE = Buffer.from([ 0x48, 0x81, 0xEC, 0x40, 0x03, 0x00, 0x00, 0x84, 0xD2, 0x74, 0x05, 0xE8 diff --git a/scripts/bin/r2Upload.ts b/scripts/bin/r2Upload.ts index b0854f6..201f495 100644 --- a/scripts/bin/r2Upload.ts +++ b/scripts/bin/r2Upload.ts @@ -3,6 +3,9 @@ import { configDotenv } from "dotenv"; import { homedir } from "os"; import { readdirSync, readFileSync, statSync } from "fs"; import { join } from "path"; +import { setConsoleTitle } from "@ocbwoy3/libocbwoy3"; + +setConsoleTitle("R2 Uploader"); try { const start = Date.now(); @@ -34,12 +37,12 @@ try { let [ _, regretevator, floorNum ] = latestFile.match(/\-(regretevator)\-?([0-9]+)?\.png$/) || []; + // the devs changed rich presence, what's the point of parsing the filename if tuxstrap doesn't update the state file anymore? if (regretevator === "regretevator") { latestFile = latestFile.replace(`-regretevator${floorNum ? `-${floorNum}` : ""}.png`,".png") + // OR i could keep the filename and have my worker parse the filename if (floorNum) { urlParams = `?floor=${floorNum}` - } else { - urlParams = `` } } @@ -52,7 +55,7 @@ try { } catch (e_) { const cx = `${e_}`.toLowerCase(); if (cx.includes("enable r2") && cx.includes("cloudflare dashboard")) { - $`notify-send "Cloudflare" "bro u mf didnt pay for r2 >:(
${`${e_}`}"`.nothrow().catch(a => { }); + $`notify-send "Cloudflare" "You owe Cloudflare money!! >:(
${`${e_}`}"`.nothrow().catch(a => { }); process.exit(0); } $`notify-send "Screenshot" "${`${e_}`}"`.nothrow().catch(a => { });