From be10818d0404546d07c9715924f8106238618857 Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Sat, 16 Sep 2023 02:23:44 -0400 Subject: [PATCH] Refresh --- bun.lockb | Bin 1279 -> 5777 bytes package.json | 32 +++++++++------ scripts/build.ts | 66 ++++++++++++++++++++++++++---- src/chat/commands/general/help.ts | 12 ++++++ src/chat/commands/index.inc.ts | 9 ++++ src/chat/commands/index.ts | 43 +++++++++++++++++++ src/chat/index.ts | 32 +++++++++++++++ src/index.ts | 2 + src/index.tsx | 1 - src/ui/index.tsx | 12 ++++++ src/util/MPP.d.ts | 25 +++++++++++ tsconfig.json | 40 +++++++++--------- 12 files changed, 233 insertions(+), 41 deletions(-) create mode 100644 src/chat/commands/general/help.ts create mode 100644 src/chat/commands/index.inc.ts create mode 100644 src/chat/commands/index.ts create mode 100644 src/chat/index.ts create mode 100644 src/index.ts delete mode 100644 src/index.tsx create mode 100644 src/ui/index.tsx diff --git a/bun.lockb b/bun.lockb index 67d0bba96957af04e9aaa891aa0f552b9fe7650c..59b79155ad62f6d1c713e8d1735a255b6eb269bf 100755 GIT binary patch literal 5777 zcmeHL30PBC7ET}tMn)76Wpp4IQCVI#mLMV`DvBanz&aL10bd{xl9(4z5Nlj(tApTD zw>nkpxS^=kf?{3jQnl4q7)6R!so08&V(U^X6njp{4R2_LINyBp_3PL3eJ|(czWe{@ z+;h)6@7*i(5N9$vagtIkrqx-3q)as*E=r|IPFE;ZG^Nn!G7|MvmV|G`;c#qyy4T$e zO$)X;cXxMj#*IFMb~rwXE#z#mJ#wjQwo6eN*98WFbZ%B0yH?s@`u{o^VEoVLa10}% z)e-a>lU@qi9{&4soBMTiVzM6k2EgS2{WBP7fJop%oB(te(9WO{m&`EwY%R@s0&Zjf zEzn&-FKS31v#;x-W3ze;e6D;eP7zbHHGO5$p4Y9eOgF3^BJ-);{*FUMMF(yE?aJ$} z`KMNnDYJJuJHlp|EiZER!Mu>qXVs-#SnPPO_u|7_%X`cy^Zjc#&#rTYvF8Uo)!TQ< zUQrPBg?8Q&kF@PamOhSfuFw7y+&79q-TQ-;<2f9ujg5c0HAK?X|1!1L1jMMLyav}m z@ZS+M>BIi^gpAz;0}+qoyW@|ALh#pMd>G)-EuMu~97gZ~01O8Ft6>HmQ8ziz&Fjjb> z?@()u{&zBIs1-&*jr018N#h#h9MM-4)Oa6ih>-{D3`%Q_eg9v3O%6?#CKEbmp>R3P zyliS-?R=*q&%Q^`o{90x=rV8v-7tU1D3{5TM!C5TbM*?Tc(X@0abe?**+1IcJTZR4 zfrlBMcWS@*dD-(`L-#u*SbtP|7i<$=cK-1AS63`bwGHh2$YYfufjYjwx1V+Pvomg0 z^8ODy(UGhEUF>^$=z^G|_i`h47R}pR@NBn)y7wqlK6jHsP&wE=A(q99YfOZ<+Gk%# z+KY+L(pTLnwmWu7m)Yxz+`GS3UtY+Ag1pLGQ+@~+PF|jObhhL5qmu&MtYxD+-?%q9 z&LhwN;ppkZz4>1Q5%HH@w|K+Lx6nJhlhxtqg`xFv`gzf1C2LgAM#$d| zPFvHlxZkynKCw?qq`~iUi}Ro63xgv+uCDG|v`_P;7mJsj$GjIhp|s+u_)<@s%bVj@ zmkie2-e%2Jj#c#PGcVSUem^2SvBW+4ll4*SE;SAL=i0KT9?H2@-mVP;q{V5a^T$qc zW$|_(K>*FW<-a9d5xwj}Nu$%lB^&e87rHDrbbsJ8Mc)0nSp5%A@!e$?J@amE->Gx` zv}cT0#g_VYYiBH*Q%)yS| zO&x!^)-k`U|NY2mdmVbRc;VZ?EId~igX6)Xu}kkfzV1~a=GwdTb?R5!;4D8o^IYs( zn|)RcO^;K&R&ca5E6irtXEl%ZHGa7$HMeJNUC8cmr=rTb^DJJhBSd%`z8TfCfosj( z=Vo(L=z4Yioa5ZM!P-+XKhD&2SQB!3L3}oESsX|CWX$>q=09$F&P1My=Ehpr%gvY+L!G>IZWKs<}W!cuAc@Zr-;ia_!t?)^4A;zhQsm zvVUK9de`tDLL&-mr$jUkQ=JGa`nZWdWc61C{jW*)+Sz%Ji@M(V(Avh5LAHwve~wa2 z-Ob{~dP#)WN08fT%eKx7+{;etblc|K$R8+^_w)HKc6)Tqp-ZJ79Nv98Y~x+8x998m zRlCl3pZ_*mF8u0TliZqHCC)iinp{taK$CnBu=+@oo!jg_tSL+3g1H)!RZ3Bs=^OEn z(nscMiDuVrOUC~>=FbTH?;^0qw7=VB()4M8GWKkB_f+kQJjvZLj^L4fKleq z8ilXGUy!I$rl>UvV|i_Q(Jbf})|pBZn>~I6g78B!{bZp4`VBbdKh^{M9>8}uzGty+ z;P)HuA)MesPOOVqYq0JHnRpjlz>l7xllXo?JaVHAw2L;;HjW|oQRBN4`%n-|?4#|2 zCY#66K@fgOyex2XW)OrY&^$kBOL!0um*IU+gRjp*I;jgcAwVP%Nt(Y%u>z8vsU0^# z8YGg5WKscO;5*hp_O5p3k1&84chO{bYiFfO)YA-XxXFH-?1QaK~5RKHwXB^pk082u~MepY*qq5A0=VwG@-6&(x{$n1xB! zDYg1AV^eHgFm{`orpdrVCF5-XCaW}Rnu0ept=1a{QhM_4qzEUc(ndDS@TBeHDwZUf|1AOK-)tqj~*9Mer z3efDolvIRk4|wC+NCdgL0%JBv(ilpwNvG9J8^q=@z-n$&NNA*N18Iz)IWjF#X#>(~ z4FKG#2j&9LcssF}!2oauLj{SX{xBRSo~c(*K~xsh@M%y!k}?$vT9>I;s@ibHoEN}l zZi9Jvh}tpVI>XE%fJA9d4*4rEn9;@n%8bTM7PLBzwmElA9p;>AV_v2w7HCZ^$`58F ov& { + if (c.includes("--watch")) watch = true; + if (c.includes("--debug")) debug = true; }); -const userscriptHeader = fs - .readFileSync("scripts/userscriptHeader.js") - .toString(); -const artifact = fs.readFileSync("build/index.js").toString(); +if (watch) { + console.log("Watch mode enabled"); + const watcher = fs.watch( + "./src/", + { + recursive: true + }, + async (event, filename) => { + if (event !== "change" && event !== "rename") return; + console.log(""); + console.log("Rebuilding..."); + await build(); + } + ); +} -fs.writeFileSync("build/Saturn.user.js", userscriptHeader + artifact); +async function build() { + console.log("Removing old build..."); + + if (fs.existsSync("build")) { + fs.rmSync("build", { + recursive: true, + force: true + }); + } + + console.log("Compiling scripts..."); + + const build = await Bun.build({ + entrypoints: ["src/index.ts"], + target: "browser", + minify: true, + outdir: "./build/" + }); + + if (build.logs.length > 0) { + console.log("Build logs:", build.logs); + } + + if (!build.success) return; + + console.log("Adding userscript header..."); + + const userscriptHeader = fs + .readFileSync("scripts/userscriptHeader.js") + .toString(); + const artifact = fs.readFileSync("build/index.js").toString(); + + fs.writeFileSync("build/Saturn.user.js", userscriptHeader + artifact); + console.log("Done"); +} + +await build(); diff --git a/src/chat/commands/general/help.ts b/src/chat/commands/general/help.ts new file mode 100644 index 0000000..fed4fab --- /dev/null +++ b/src/chat/commands/general/help.ts @@ -0,0 +1,12 @@ +import { Command } from ".."; + +export const help = new Command( + ["help", "h", "commands", "cmds"], + "Returns a list of commands", + "%Phelp [command]", + msg => { + return "help menu TODO"; + } +); + +console.log(help); diff --git a/src/chat/commands/index.inc.ts b/src/chat/commands/index.inc.ts new file mode 100644 index 0000000..6990f7b --- /dev/null +++ b/src/chat/commands/index.inc.ts @@ -0,0 +1,9 @@ +import { CommandGroup, CommandHandler } from "."; +import { help } from "./general/help"; + +console.log("Adding things"); + +const GROUP_GENERAL = new CommandGroup("General"); +GROUP_GENERAL.addCommand(help); + +CommandHandler.addCommandGroup(GROUP_GENERAL); diff --git a/src/chat/commands/index.ts b/src/chat/commands/index.ts new file mode 100644 index 0000000..0d8630f --- /dev/null +++ b/src/chat/commands/index.ts @@ -0,0 +1,43 @@ +import { type CustomChatMessage } from ".."; +import { type ChatMessage } from "../../util/MPP"; + +export class Command { + public static getUsage(usage: string, prefix: string) { + return usage.split("%P").join(prefix); + } + + constructor( + public aliases: string[], + public description: string, + public usage: string, + public callback: (msg: ChatMessage) => void + ) {} +} + +export class CommandHandler { + public static commandGroups = new Array(); + + public static handleCommand(msg: CustomChatMessage) { + for (const group of this.commandGroups) { + for (const command of group.commands) { + command.callback(msg); + } + } + } + + public static addCommandGroup(commandGroup: CommandGroup) { + this.commandGroups.push(commandGroup); + } +} + +export class CommandGroup { + public commands = new Array(); + + constructor(public id: string) {} + + public addCommand(command: Command) { + this.commands.push(command); + } +} + +require("./index.inc"); diff --git a/src/chat/index.ts b/src/chat/index.ts new file mode 100644 index 0000000..9876ba4 --- /dev/null +++ b/src/chat/index.ts @@ -0,0 +1,32 @@ +import { ChatMessage } from "../util/MPP"; +import { CommandHandler } from "./commands"; + +export interface CustomChatMessage extends ChatMessage { + prefix: string; +} + +export class ChatBot { + public static prefixes = ["sat"]; + + public static handleMessage(msg: ChatMessage) { + console.log(`[Saturn] ${msg.p.name}: ${msg.a}`); + + let usedPrefix: string | undefined; + + for (const prefix of this.prefixes) { + if (!msg.a.startsWith(prefix)) continue; + usedPrefix = prefix; + } + + if (!usedPrefix) return; + + const nmsg = msg as CustomChatMessage; + nmsg.prefix = usedPrefix; + + CommandHandler.handleCommand(nmsg); + } +} + +MPP.client.on("a", msg => { + ChatBot.handleMessage(msg); +}); diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..191f78d --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +import "./ui"; +import "./chat"; diff --git a/src/index.tsx b/src/index.tsx deleted file mode 100644 index b2a242f..0000000 --- a/src/index.tsx +++ /dev/null @@ -1 +0,0 @@ -console.log(typeof (globalThis as any).MPP); diff --git a/src/ui/index.tsx b/src/ui/index.tsx new file mode 100644 index 0000000..8786b3b --- /dev/null +++ b/src/ui/index.tsx @@ -0,0 +1,12 @@ +import ReactDOM from "react-dom/client"; +import React from "react"; + +const document = (globalThis as any).document; +const reactRoot = document.createElement("div"); + +reactRoot.setAttribute("id", "saturn"); +document.body.appendChild(reactRoot); +const root = ReactDOM.createRoot(reactRoot); + +const test =

; +root.render(test); diff --git a/src/util/MPP.d.ts b/src/util/MPP.d.ts index e69de29..638d23a 100644 --- a/src/util/MPP.d.ts +++ b/src/util/MPP.d.ts @@ -0,0 +1,25 @@ +import Client from "mppclone-client"; + +declare global { + var MPP: { + client: Client; + }; +} + +declare interface ChatMessage { + m: "a"; + a: string; + p: Participant; + t: number; +} + +declare interface Participant { + _id: string; + id: string; + name: string; + color: string; + tag?: { + text: string; + color: string; + }; +} diff --git a/tsconfig.json b/tsconfig.json index 1449bc3..9e85aee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,22 @@ { - "compilerOptions": { - "lib": ["ESNext"], - "module": "esnext", - "target": "esnext", - "moduleResolution": "bundler", - "moduleDetection": "force", - "allowImportingTsExtensions": true, - "noEmit": true, - "composite": true, - "strict": true, - "downlevelIteration": true, - "skipLibCheck": true, - "jsx": "preserve", - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "allowJs": true, - "types": [ - "bun-types" // add Bun global - ] - } + "compilerOptions": { + "lib": ["ESNext", "dom"], + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "preserve", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } }