Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[R] Refactor easter-eggs #59

Merged
merged 6 commits into from
Oct 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/logic/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,26 @@ export function parsePeopleJson(json: string): Person {
export function url(base: string, params: { [id: string]: string }): string {
return base + '?' + new URLSearchParams(params)
}

export interface Toast {
title: string,
text?: string,
img: string,
width?: number,
height?: number,
background?: string,
color?: string
}

export type EggType = "open" | "tag" | "wait" | "keyword"
export type Tag = "p" | "summary" | "blockquote" | "div" | "pre"

export interface EasterEgg {
type: EggType,
userid: string[],
id: string,
toast: Toast,
tag?: Tag,
wait?: number,
keyword?: string[]
}
170 changes: 65 additions & 105 deletions src/logic/easterEgg.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import path from "path";
import Swal from "sweetalert2"
import {t} from "./config"
import {scheduledTask, toast} from "./helper"
import {dataHost, t} from "./config"
import {scheduledTask, toast, getResponseSync, checkSubset, randint} from "./helper"
import {EasterEgg} from "@/logic/data";

const registedEggItem = [
'hasFlowered', 'isSeenMeowBot233', 'BetelgeuseShown', 'ChongQingShown', 'Sea', 'detailsByYumao', 'funeralFlowers', 'preferredName', 'rhythmShown'
'hasFlowered', 'preferredName'
]

export function isEaster(): boolean {
if (!localStorage.getItem('easterEggMode')) return false;
if (parseInt(localStorage.getItem('easterEggMode')) == 0) return false;
return true;
return parseInt(localStorage.getItem('easterEggMode')) != 0;
}

function allShown(): boolean {
Expand Down Expand Up @@ -49,7 +50,7 @@ export function handleFlowerToast(name: string) {
if (parseInt(localStorage.getItem('easterEggMode')) == 0) return;
if (!localStorage.getItem("hasFlowered")) {
localStorage.setItem("hasFlowered", "Meow")
toast("花与秋叶", `${name}收到你的小花啦~`, "lollipop_1f36d.png", null, 64, 64, null)
toast("花与秋叶", `${name}收到你的小花啦~`, "/img/lollipop_1f36d.png", null, 64, 64, null)
}
}

Expand Down Expand Up @@ -78,10 +79,6 @@ export function handleEasterEgg(userid: string) {
if (!localStorage.getItem('easterEggMode')) return;
if (parseInt(localStorage.getItem('easterEggMode')) == 0) return;
if (userid == "MeowBot233") {
if (!localStorage.getItem("isSeenMeowBot233")) {
localStorage.setItem("isSeenMeowBot233", "找到了喵~")
toast("找到了喵~", "诶? 找什么喵? ", "cat-face-emoji-2048x1828.png", null, 64, 57, null)
}
if ((now.getDate() == 15) && (now.getMonth() == 3)) {
if (!localStorage.getItem("birthdayMeowBot233"))
localStorage.setItem("birthdayMeowBot233", (now.getFullYear() - 1).toString())
Expand All @@ -101,86 +98,72 @@ export function handleEasterEgg(userid: string) {
}
}
}
if ((userid == "Anilovr") || (userid == "noname3031") || (userid == "dogesir_")) {
if (!localStorage.getItem("Betelgeuse"))
localStorage.setItem("Betelgeuse", `["${userid}"]`)
else {
const betelgeuse = JSON.parse(localStorage.getItem("Betelgeuse")) as string[]
if (!betelgeuse.includes(userid)) {
betelgeuse.push(userid)
localStorage.setItem("Betelgeuse", JSON.stringify(betelgeuse))
}
if (betelgeuse.includes("Anilovr") && betelgeuse.includes("noname3031") && betelgeuse.includes("dogesir_") && (!localStorage.getItem("BetelgeuseShown"))) {
localStorage.setItem("BetelgeuseShown", "R.I.P.")
toast("参宿四 ~Betelgeuse~", "R.I.P. - Be resilient -", "betelgeuse.png", "url(/img/stardust.jpg)", 64, 64, '#f0f8ff')
}
const eggs = JSON.parse(getResponseSync(dataHost + '/eggs.json')) as EasterEgg[];
const checkmate = (egg: EasterEgg) => {
if (!localStorage.getItem(egg.id)) localStorage.setItem(egg.id, `["${userid}"]`);
const opened = JSON.parse(localStorage.getItem(egg.id)) as string[];
if (!opened.includes(userid)) {
opened.push(userid);
localStorage.setItem(egg.id, JSON.stringify(opened));
}
}
if ((userid == "xuewulihuameng") || (userid == "Futajuhuacha") || (userid == "Xu_Yushu") || (userid == "Dethelly")) {
if (!localStorage.getItem("ChongQing"))
localStorage.setItem("ChongQing", `["${userid}"]`)
else {
const ch = JSON.parse(localStorage.getItem("ChongQing")) as string[]
if (!ch.includes(userid)) {
ch.push(userid)
localStorage.setItem("ChongQing", JSON.stringify(ch))
}
if (ch.includes("xuewulihuameng") && ch.includes("Futajuhuacha") && ch.includes("Xu_Yushu") && ch.includes("Dethelly") && (!localStorage.getItem("ChongQingShown"))) {
localStorage.setItem("ChongQingShown", "Fog")
toast("嘉陵雾稠", "雾终将散去, 而我们终将看到彩虹", "bridge.png", "url(/img/fog.jpg)", 64, 47, null)
}
if (checkSubset(opened, egg.userid) && checkSubset(egg.userid, opened)) {
localStorage.setItem(egg.id + '_SHOWN', randint(0, 2147483647).toString());
toast(egg.toast.title, egg.toast.text, egg.toast.img, egg.toast.background, egg.toast.width, egg.toast.height, egg.toast.color);
}
console.log(egg)
}
if ((userid == "zhangyubaka") || (userid == "Uekawakuyuurei") || (userid == "MizuharaNagisa")) {
if (!localStorage.getItem("Boat"))
localStorage.setItem("Boat", `["${userid}"]`)
else {
const boat = JSON.parse(localStorage.getItem("Boat")) as string[]
if (!boat.includes(userid)) {
boat.push(userid)
localStorage.setItem("Boat", JSON.stringify(boat))
}
if (boat.includes("zhangyubaka") && boat.includes("Uekawakuyuurei") && boat.includes("MizuharaNagisa") && (!localStorage.getItem("Sea"))) {
localStorage.setItem("Sea", "with you")
toast("海色", "拔锚起航, 跨越闪耀泪光的海岸", "ship.png", "#0b2058ff", 64, 64, '#f0f8feff')
for (const egg of eggs) {
registedEggItem.push(egg.id + '_SHOWN');
switch (egg.type) {
case "open": {
if (egg.userid.includes(userid)) {
if (localStorage.getItem(egg.id + '_SHOWN')) break;
else checkmate(egg)
}
break;
}
}
}
if ((userid == "zhangyubaka")) {
const summaries = document.getElementsByTagName("summary")
for (const v of summaries) {
console.log(v)
v.addEventListener('click', (e) => {
console.log("summary" + e)
if (!localStorage.getItem('detailsByYumao')) {
localStorage.setItem('detailsByYumao', 'forever.')
toast("往昔苦难", "因为妳而存在, 因为妳而不在, 要在啊......", "lifeline.png", "#EEEEEE88", 64, 64, null)
case "tag": {
if (egg.userid.includes(userid)) {
if (localStorage.getItem(egg.id + '_SHOWN')) break;
const elements = document.getElementsByTagName(egg.tag)
for (const v of elements) {
console.log(v)
v.addEventListener('click', (e) => {
console.log('tag' + e)
checkmate(egg)
})
}
}
}, false)
}
}
if ((userid == "mikaela_khara")) {
const summaries = document.getElementsByTagName("summary")
for (const v of summaries) {
console.log(v)
v.addEventListener('click', (e) => {
console.log("summary" + e)
if (!localStorage.getItem('mikaela_khara_ferris')) {
localStorage.setItem('mikaela_khara_ferris', '間關鶯語花底滑')
toast('永乐桥上的风景', '连绵不断的河流,像生命本身一样无法回头……', 'ferris-wheel.png', undefined, 64, 64, undefined);
break;
}
case "wait": {
if (egg.userid.includes(userid)) {
if (localStorage.getItem(egg.id + '_SHOWN')) break;
scheduledTask(30000, () => {
if ((window.location.pathname == `/profile/${userid}`) || window.location.pathname == `/profile/${userid}/`) {
checkmate(egg)
}
})
}
})
}
}
if (userid == "shihai4h") {
scheduledTask(30000, () => {
if ((window.location.pathname == "/profile/shihai4h/") || (window.location.pathname == "/profile/shihai4h")) {
if (!localStorage.getItem("funeralFlowers")) {
localStorage.setItem("funeralFlowers", "shihai4h")
toast("葬花", "花谢花飞花满天, 红消香断有谁怜? ", "tumb.png", "url(/img/flowers.png)", 64, 64, null)
break;
}
case "keyword": {
if (egg.userid.includes(userid)) {
if (localStorage.getItem(egg.id + '_SHOWN')) break;
const ps = document.getElementsByTagName('p')
for (const v of ps) {
console.log(v)
for (const i of egg.keyword) {
if (v.innerHTML.includes(i) || v.innerText.includes(i)) {
v.addEventListener('click', () => {
checkmate(egg)
})
}
}
}
}
}
})
}
}
if (userid == "Xu_Yushu") {
scheduledTask(20000, () => {
Expand All @@ -203,28 +186,5 @@ export function handleEasterEgg(userid: string) {
}
})
}
if ((userid == "SevenBird") || (userid == "Considerate_cat") || (userid == "ttttsuuukikoo_") || (userid == "hakureico") || (userid == "xixi_yuexi") || (userid == "Jennife80677612")) {
const rhythmKeyword = ["音游", "音遊", "Arc", "舞萌", "maimaiDX", "OSU", "ptt", "Project Sekai"]
const ps = document.getElementsByTagName("p")
for (const v of ps) {
for (const i of rhythmKeyword) {
if (v.innerHTML.includes(i) || v.innerText.includes(i)) {
v.addEventListener('click', () => {
if (!localStorage.getItem("rhythm"))
localStorage.setItem("rhythm", `["${userid}"]`)
const rhythm = JSON.parse(localStorage.getItem("rhythm")) as string[]
if (!rhythm.includes(userid)) {
rhythm.push(userid)
localStorage.setItem("rhythm", JSON.stringify(rhythm))
}
if (rhythm.includes("SevenBird") && rhythm.includes("Considerate_cat") && rhythm.includes("ttttsuuukikoo_") && rhythm.includes("hakureico") && rhythm.includes("xixi_yuexi") && rhythm.includes("Jennife80677612") && (!localStorage.getItem("rhythmShown"))) {
localStorage.setItem("rhythmShown", "AP end")
toast("希望有个 All Perfect 的结局", " ~ All that I'm left with is your reminiscences ~ ", "musical-score.png", null, 64, 64, null)
}
}, false)
}
}
}
}
achieveAll()
}
8 changes: 7 additions & 1 deletion src/logic/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ export function toast(title: string, text: string, img: string, background: stri
position: "top-end",
title: title,
text: text,
iconHtml: `<img style="width: ${width}px;height: ${height}px;border: none" src="/img/${img}"></img>`,
iconHtml: `<img style="width: ${width}px;height: ${height}px;border: none" src="${img}"></img>`,
iconColor: "#00000000",
background: background,
timer: 5000,
Expand Down Expand Up @@ -229,4 +229,10 @@ export function gaussian_bm(min, max, skew) {
num += min // offset to min
}
return num
}

export function checkSubset(parentArray: any[], subsetArray: any[]): boolean {
return subsetArray.every((e) => {
return parentArray.includes(e)
})
}
6 changes: 1 addition & 5 deletions src/logic/viaFetch.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
const easterImage = ['betelgeuse.png', 'bridge.png', 'cake.png', 'cat-face-emoji-2048x1828.png', 'clip.png', 'easterEgg.png', 'flowers.png', 'fog.png', 'lifeline.png', 'lollipop_1f36d.png', 'musical-score.png', 'ship.png', 'stardust.jpg', 'tumb.png']

export function viaFetch(): void {
for (const v of easterImage) {
fetch(`/img/${v}`).then()
}
//Deleted
}

export function viaBalloon(): void {
Expand Down
Loading