Compare commits

..
Author SHA1 Message Date
68423c4c49
add special to activate meowris
All checks were successful
Build Container / Build Container (push) Successful in 4m25s
2026-09-29 16:33:45 +02:00
4817966757 app: fix syntax error in cat language
All checks were successful
Build Container / Build Container (push) Successful in 5m49s
2026-09-29 16:22:56 +02:00
4abc76bc2d app: add cat language 2026-09-29 16:22:56 +02:00
8 changed files with 149 additions and 35 deletions

View file

@ -23,23 +23,6 @@ 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

View file

@ -24,6 +24,8 @@ const responses =
? (await import("./chatDict_de")).default
: lang === "uwu"
? (await import("./chatDict_uwu")).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(() => {

View file

@ -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!",

View file

@ -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!",

View file

@ -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 😕<br> 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 😕<br> 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!<br>How can I help you? 🐈️",
priority: -1,
},
{
response: "Sorry, I didn't understand that 😕",
priority: -2,
},
]
export default responses

View file

@ -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}",

View file

@ -96,4 +96,31 @@ export const ui = {
"chat.dooris": "dOwOris",
"chat.user": "my fren :3",
},
meow: {
"dooris": "meoowris 🐈️ <span class='opacity-50 text-xs'>(DOORIS)</span>",
"unauthorized.title": "rawwwwr 😾⛔️",
"unauthorized.description": `meow mreoow: <a class='underline' href='https://wiki.hamburg.ccc.de/club:prozesse:aufnahmeprozesse-fuer-berechtigungsgruppen'>🌐 meow</a>`,
"unauthenticated.title": "meow? 🫴🐈️",
"unauthenticated.description": `meow mreoow: <a class='underline' href='https://wiki.hamburg.ccc.de/club:prozesse:aufnahmeprozesse-fuer-berechtigungsgruppen'>🌐 meow</a>`,
"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

View file

@ -11,6 +11,7 @@ export async function getStaticPaths() {
{params: {lang: "en"}},
{params: {lang: "de"}},
{params: {lang: "uwu"}},
{params: {lang: "meow"}},
]
}