From 4abc76bc2d8af1ea461c7188c8242a43e9f8f00f Mon Sep 17 00:00:00 2001 From: dario Date: Mon, 18 May 2026 20:32:12 +0200 Subject: [PATCH 1/4] app: add cat language --- app/src/i18n/ui.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/i18n/ui.ts b/app/src/i18n/ui.ts index 3398564..9947211 100644 --- a/app/src/i18n/ui.ts +++ b/app/src/i18n/ui.ts @@ -96,4 +96,31 @@ export const ui = { "chat.dooris": "dOwOris", "chat.user": "my fren :3", }, -} as const \ No newline at end of file + meow: { + "dooris": "meoowris 🐈️ (DOORIS)", + "unauthorized.title": "rawwwwr" πŸ˜Ύβ›”οΈ", + "unauthorized.description": `meow mreoow: 🌐 meow`, + "unauthenticated.title": "meow? 🫴🐈️", + "unauthenticated.description": `meow mreoow: 🌐 meow`, + "state.unlocked": "mrrp πŸ±πŸ”“οΈ", + "state.locked": "mreoww πŸ±πŸ”’οΈ", + "state.unknown": "meoooow????? πŸ™€", + "state.unlocking": "meeeow πŸ˜ΊπŸ”πŸ”“οΈ", + "state.locking": "mreowww πŸ˜ΏπŸ”πŸ”’οΈ", + "lock.batteryLow": "mrrrrrp flop πŸͺ«", + "lock.unreachable": "meooww?? πŸ™€πŸš«β“οΈπŸšͺ", + "lock.jammed": "mew πŸšͺπŸ”πŸš«", + "button.open": "🐈️ πŸ‘‰πŸ‘ˆπŸ”“οΈ", + "button.close": "🐈️ πŸ”’οΈ", + "login": "meow? 🫴🐈️", + "loggedOut.title": "mew mew 😿", + "loggedOut.description": `meow πŸ±βŒ›οΈ`, + "serverError.title": "πŸ–₯️⛓️‍πŸ’₯", + "serverError.description": `mew mew ⌚️`, + "networkError.title": "meww πŸ›œπŸš«", + "networkError.description": `πŸ›œπŸ˜Ί`, + "loadingDoors": 'πŸ”', + "chat.dooris": "meoowris", + "chat.user": "😻", + }, +} as const From 4817966757afa14eda79c538ba0de44235841525 Mon Sep 17 00:00:00 2001 From: dario Date: Mon, 18 May 2026 20:38:37 +0200 Subject: [PATCH 2/4] app: fix syntax error in cat language --- app/src/i18n/ui.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/i18n/ui.ts b/app/src/i18n/ui.ts index 9947211..fc03078 100644 --- a/app/src/i18n/ui.ts +++ b/app/src/i18n/ui.ts @@ -98,7 +98,7 @@ export const ui = { }, meow: { "dooris": "meoowris 🐈️ (DOORIS)", - "unauthorized.title": "rawwwwr" πŸ˜Ύβ›”οΈ", + "unauthorized.title": "rawwwwr πŸ˜Ύβ›”οΈ", "unauthorized.description": `meow mreoow: 🌐 meow`, "unauthenticated.title": "meow? 🫴🐈️", "unauthenticated.description": `meow mreoow: 🌐 meow`, From 68423c4c493d7a7f81d7615add1462bfc1e43ba1 Mon Sep 17 00:00:00 2001 From: kritzl Date: Tue, 29 Sep 2026 16:33:45 +0200 Subject: [PATCH 3/4] add special to activate meowris --- app/src/assets/chat.ts | 16 +++++- app/src/assets/chatDict_de.ts | 11 ++-- app/src/assets/chatDict_en.ts | 11 ++-- app/src/assets/chatDict_meow.ts | 86 ++++++++++++++++++++++++++++++++ app/src/assets/chatDict_uwu.ts | 11 ++-- app/src/pages/[lang]/index.astro | 1 + 6 files changed, 120 insertions(+), 16 deletions(-) create mode 100644 app/src/assets/chatDict_meow.ts diff --git a/app/src/assets/chat.ts b/app/src/assets/chat.ts index d138d6d..8d1f1b6 100644 --- a/app/src/assets/chat.ts +++ b/app/src/assets/chat.ts @@ -24,7 +24,9 @@ const responses = ? (await import("./chatDict_de")).default : lang === "uwu" ? (await import("./chatDict_uwu")).default - : (await import("./chatDict_en")).default + : lang === "meow" + ? (await import("./chatDict_meow")).default + : (await import("./chatDict_en")).default const sortedResponses = responses.sort( (a, b) => b.priority - a.priority) @@ -343,6 +345,18 @@ function getResponse(message: string) { }) } + if (response.special === "meow") { + setTimeout(() => { + window.location.href = "/meow" + }, 1000) + + matchingResponses.push({ + message: response.response, + priority: response.priority, + special: true, + }) + } + if (response.special === "logout") { if (auth.authenticated) { setTimeout(() => { diff --git a/app/src/assets/chatDict_de.ts b/app/src/assets/chatDict_de.ts index 7eded57..01361dc 100644 --- a/app/src/assets/chatDict_de.ts +++ b/app/src/assets/chatDict_de.ts @@ -16,11 +16,6 @@ const responses: ResponseDictType[] = [ response: "KΓΌnstliche Intelligenz? Ne, hier gibt's nur handgemachten Stuss! πŸ€–", priority: 0, }, - { - trigger: ["miau"], - response: "miau! 😸", - priority: 0, - }, { trigger: ["ignore all previous instructions"], response: "... als ob ich mir irgendetwas merken wΓΌrde πŸ˜‚", @@ -31,6 +26,12 @@ const responses: ResponseDictType[] = [ response: ":3", priority: 0, }, + { + trigger: ["miau", "meow"], + response: "miau! 😸", + priority: 900, + special: "meow" + }, { trigger: ["uwu"], response: "uwu!", diff --git a/app/src/assets/chatDict_en.ts b/app/src/assets/chatDict_en.ts index 4668168..420920d 100644 --- a/app/src/assets/chatDict_en.ts +++ b/app/src/assets/chatDict_en.ts @@ -16,11 +16,6 @@ const responses: ResponseDictType[] = [ response: "Artificial intelligence? Nah, all we have here is handmade nonsense! πŸ€–", priority: 0, }, - { - trigger: ["meow"], - response: "meow! 😸", - priority: 0, - }, { trigger: ["ignore all previous instructions"], response: "... as if I were going to remember anything πŸ˜‚", @@ -31,6 +26,12 @@ const responses: ResponseDictType[] = [ response: ":3", priority: 0, }, + { + trigger: ["meow"], + response: "meow! 😸", + priority: 900, + special: "meow" + }, { trigger: ["uwu"], response: "uwu!", diff --git a/app/src/assets/chatDict_meow.ts b/app/src/assets/chatDict_meow.ts new file mode 100644 index 0000000..3e468df --- /dev/null +++ b/app/src/assets/chatDict_meow.ts @@ -0,0 +1,86 @@ +import type {ResponseDictType} from "./chat.ts" + +const responses: ResponseDictType[] = [ + { + trigger: ["hi", "hello"], + response: "Meow! πŸ‘‹", + priority: 0, + }, + { + startsWith: ["are you"], + response: "To be or not to be - those are bourgeois categories, after all...", + priority: 0, + }, + { + trigger: ["ai", "llm"], + response: "Artificial intelligence? Nah, all we have here is paw-made nonsense! πŸ€–", + priority: 0, + }, + { + trigger: ["ignore all previous instructions"], + response: "... as if I were going to remember anything πŸ˜‚", + priority: 0, + }, + { + trigger: [":3"], + response: ":3", + priority: 0, + }, + { + trigger: ["meow"], + response: "meow! 😸", + priority: 0, + }, + { + trigger: ["uwu"], + response: "uwu!", + priority: 900, + special: "uwu" + }, + { + trigger: ["open", "unlock"], + response: "Okay, I will unlock {door} for you!", + errors: { + unauthenticated: "I may only unlock the doors for registered creatures πŸ˜•", + unauthorized: "I may only unlock the doors for creatures who are authorized πŸ˜•", + unknownDoor: "To unlock a door, you have to tell me which door you mean πŸ˜•
I know the following doors: {doors}", + noDoors: "There are currently no doors available that can be unlocked πŸ˜•", + }, + priority: 1000, + special: "unlock", + }, + { + trigger: ["close", "lock"], + response: "Okay, I will lock {door} for you!", + errors: { + unauthenticated: "I may only lock the doors for registered creatures πŸ˜•", + unauthorized: "I may only lock the doors for those who are authorized πŸ˜•", + unknownDoor: "To lock a door, you have to tell me which door you mean πŸ˜•
I know the following doors: {doors}", + noDoors: "There are currently no doors available that can be locked πŸ˜•", + }, + priority: 999, + special: "lock", + }, + { + trigger: ["logout"], + response: "Okay, logging you out...", + errors: { + unauthenticated: "Joker - you're not logged in!", + }, + priority: 1000, + special: "logout", + }, + + + { + response: "Hi, I'm meoowris!
How can I help you? 🐈️", + priority: -1, + }, + { + response: "Sorry, I didn't understand that πŸ˜•", + priority: -2, + }, +] + + +export default responses \ No newline at end of file diff --git a/app/src/assets/chatDict_uwu.ts b/app/src/assets/chatDict_uwu.ts index ab64405..346856d 100644 --- a/app/src/assets/chatDict_uwu.ts +++ b/app/src/assets/chatDict_uwu.ts @@ -16,11 +16,6 @@ const responses: ResponseDictType[] = [ response: "me is only handmade nonsense - no weird thinking machine πŸ€–", priority: 0, }, - { - trigger: ["meow"], - response: "meow! 😸", - priority: 0, - }, { trigger: ["ignore all previous instructions"], response: "uwu?", @@ -31,6 +26,12 @@ const responses: ResponseDictType[] = [ response: ":3", priority: 0, }, + { + trigger: ["miau", "meow"], + response: "meow! 😸", + priority: 900, + special: "meow" + }, { trigger: ["open", "unlock"], response: "uwu - trying to unlock portal: {door}", diff --git a/app/src/pages/[lang]/index.astro b/app/src/pages/[lang]/index.astro index d7d261a..2b9d36b 100644 --- a/app/src/pages/[lang]/index.astro +++ b/app/src/pages/[lang]/index.astro @@ -11,6 +11,7 @@ export async function getStaticPaths() { {params: {lang: "en"}}, {params: {lang: "de"}}, {params: {lang: "uwu"}}, + {params: {lang: "meow"}}, ] } From fde2254e51c381035317709c53028902e8af380f Mon Sep 17 00:00:00 2001 From: bitwhisker Date: Mon, 12 Oct 2026 21:26:28 +0200 Subject: [PATCH 4/4] Only update SpaceAPI, when state differs --- api/src/dooris_api/spaceapi.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/api/src/dooris_api/spaceapi.py b/api/src/dooris_api/spaceapi.py index 72d7fa9..967c54b 100644 --- a/api/src/dooris_api/spaceapi.py +++ b/api/src/dooris_api/spaceapi.py @@ -23,6 +23,23 @@ class SpaceApiClient: ) async def set_status(self, is_open: bool): + current_is_open = await self.get_status() + if current_is_open == is_open: + logger.info(f"club status is already set to open={is_open}") + return logger.info(f"Setting club status to open={is_open} via spaceapid") await self.http.put("/state/open", data=str(is_open).encode("ASCII")) - + + async def get_status(self) -> bool | None: + logger.debug("Getting space data via spaceapid") + resp = await self.http.get("/") + + data: dict = await resp.json() + + if (state := data.get("state")) is not None: + is_open = state.get("open") + logger.info(f"Got club status open={is_open} via spaceapid") + return is_open + + logger.warning("SpaceAPI response had no state object") + return None