From 0456fd9226798c7884f9c04ea91782c4274c058d Mon Sep 17 00:00:00 2001 From: Hri7566 Date: Sun, 15 Sep 2024 08:08:51 -0400 Subject: [PATCH 1/2] dev config --- bun.lockb | Bin 61800 -> 61809 bytes config/mpp_bots.yml | 4 ---- 2 files changed, 4 deletions(-) diff --git a/bun.lockb b/bun.lockb index fb7b3d82a84c5b65df5a044c22e210c196ef9817..06c7358e5226a415cfbf900e74a9e7d099fffaca 100755 GIT binary patch delta 4989 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 delta 4974 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 uzrFquv)30 Date: Sun, 15 Sep 2024 18:19:17 -0400 Subject: [PATCH 2/2] stuff --- bun.lockb | Bin 61809 -> 64696 bytes package.json | 16 +++--- src/api/commands/groups/index.ts | 13 ++++- src/api/commands/groups/inventory/eat.ts | 42 ++------------- src/api/commands/groups/pokemon/daily.ts | 21 ++++++++ src/api/data/inventory.ts | 9 ++-- src/api/fish/fish.ts | 6 ++- src/api/items/index.ts | 23 +++++++++ src/api/pokemon/daily.ts | 62 +++++++++++++++++++++++ src/api/pokemon/pokedex.ts | 5 ++ src/cli/index.ts | 12 ++++- src/util/time.ts | 24 ++++++--- src/util/types.d.ts | 7 +-- 13 files changed, 175 insertions(+), 65 deletions(-) create mode 100644 src/api/commands/groups/pokemon/daily.ts create mode 100644 src/api/pokemon/daily.ts diff --git a/bun.lockb b/bun.lockb index 06c7358e5226a415cfbf900e74a9e7d099fffaca..4b42ed1391cfc203d961275d2abf80158cd6e816 100755 GIT binary patch delta 14814 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%0AeQ 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 1) { - shouldRemove = false; - ((inventory.fishSack as TFishSack)[i] - .count as number)--; - } else { - shouldRemove = true; - } - } else { - shouldRemove = true; - } - - if (shouldRemove) - (inventory.fishSack as TFishSack).splice(i, 1); - break; - } + removeItem(inventory.fishSack, foundObject); } else if (foundObject.objtype == "item") { - i = 0; - - for (const item of inventory.items as unknown as IItem[]) { - if (typeof item.count == "number") { - if (item.count > 1) { - shouldRemove = false; - ((inventory.items as TInventoryItems)[i] - .count as number)--; - } else { - shouldRemove = true; - } - } else { - shouldRemove = true; - } - - if (shouldRemove) - (inventory.items as TInventoryItems).splice(i, 1); - break; - } + removeItem(inventory.items, foundObject); } await updateInventory(inventory); diff --git a/src/api/commands/groups/pokemon/daily.ts b/src/api/commands/groups/pokemon/daily.ts new file mode 100644 index 0000000..f8e2040 --- /dev/null +++ b/src/api/commands/groups/pokemon/daily.ts @@ -0,0 +1,21 @@ +import Command from "@server/commands/Command"; +import { logger } from "@server/commands/handler"; +import { claimDailyPokemon } from "@server/pokemon/daily"; + +export const daily = new Command( + "daily", + ["daily", "dailypokemon"], + "Claim your daily Pokémon reward", + "daily", + "command.inventory.daily", + async ({ id, command, args, prefix, part, user }) => { + try { + const message = await claimDailyPokemon(user.id); + return message; + } catch (err) { + logger.error("Unable to perform daily claim:", err); + return `Congratulations, you broke the bot. Your daily reward might not work now.`; + } + }, + true +); diff --git a/src/api/data/inventory.ts b/src/api/data/inventory.ts index 1abf554..4ced6a8 100644 --- a/src/api/data/inventory.ts +++ b/src/api/data/inventory.ts @@ -1,15 +1,16 @@ +import type { User } from "@prisma/client"; import prisma from "./prisma"; export async function createInventory(inventory: Partial) { - return await prisma.inventory.create({ + return (await prisma.inventory.create({ data: inventory - }); + })) as IInventory; } export async function getInventory(id: IInventory["id"]) { - return await prisma.inventory.findUnique({ + return (await prisma.inventory.findUnique({ where: { id } - }); + })) as IInventory; } export async function updateInventory(inventory: Partial) { diff --git a/src/api/fish/fish.ts b/src/api/fish/fish.ts index b3e985b..4731904 100644 --- a/src/api/fish/fish.ts +++ b/src/api/fish/fish.ts @@ -108,7 +108,11 @@ export function hasFishTime( export function getSizeString(cm: number) { const size = - cm < 30 + cm < 5 + ? "microscopic" + : cm < 10 + ? "tiny" + : cm < 30 ? "small" : cm < 60 ? "medium-sized" diff --git a/src/api/items/index.ts b/src/api/items/index.ts index 9743b1b..fc80d8a 100644 --- a/src/api/items/index.ts +++ b/src/api/items/index.ts @@ -23,3 +23,26 @@ export function addItem(arr: IObject[], item: IObject) { (arr[i].count as number) += inc; } } + +export function removeItem(arr: IObject[], item: IObject, count = 1) { + let found = false; + let i = 0; + + for (i = 0; i < arr.length; i++) { + if (item.id == arr[i].id) { + found = true; + break; + } + } + + const foundItem = arr[i]; + if (!found || !foundItem) return false; + + if (typeof foundItem.count == "number" && foundItem.count > 1) { + foundItem.count -= count; + } else { + arr.splice(i, 1); + } + + return true; +} diff --git a/src/api/pokemon/daily.ts b/src/api/pokemon/daily.ts new file mode 100644 index 0000000..56247b4 --- /dev/null +++ b/src/api/pokemon/daily.ts @@ -0,0 +1,62 @@ +import { kvGet, kvSet } from "@server/data/keyValueStore"; +import { Logger } from "@util/Logger"; +import { getRandomPokemon } from "./pokedex"; +import { getInventory, updateInventory } from "@server/data/inventory"; +import { getUser } from "@server/data/user"; +import { addItem } from "@server/items"; +import { getHHMMSS } from "@util/time"; + +const logger = new Logger("Daily Pokemon Manager"); +const oneDay = 1000 * 60 * 60 * 24; + +export async function claimDailyPokemon(userID: string) { + // Get the last daily timestamp + let timestampS = await kvGet(`pokedaily~${userID}`); + let timestamp = 0; + + if (typeof timestampS == "string") { + try { + timestamp = parseInt(timestampS); + } catch (err) { + logger.warn("Unable to parse JSON:", err); + } + } + + logger.debug("Time remaining:", Date.now() - timestamp); + + // Check if it has been over a day + if (Date.now() - timestamp > oneDay) { + // Give them a random pokemon and set new timestamp + const pokemon = getRandomPokemon(); + + const item = { + id: pokemon.pokeID.toString(), + name: pokemon.name, + pokeID: pokemon.pokeID, + base: pokemon.base, + type: pokemon.type, + count: 1, + objtype: "pokemon" + } as IPokemon; + + const user = await getUser(userID); + if (!user) throw new Error("No user found"); + + const inventory = await getInventory(user.inventoryId); + if (!inventory) throw new Error("No inventory found"); + + addItem(inventory.pokemon, pokemon); + await updateInventory(inventory); + kvSet(`pokedaily~${userID}`, Date.now().toString()); + + return `You claimed your daily Pokémon reward and got: ${ + item.emoji || "📦" + }${item.name}${item.count ? ` (x${item.count})` : ""}`; + } else { + // or tell them no + return `You already claimed today! Time remaining: ${getHHMMSS( + oneDay - (Date.now() - timestamp), + false + )}`; + } +} diff --git a/src/api/pokemon/pokedex.ts b/src/api/pokemon/pokedex.ts index b3599cf..2c41e7e 100644 --- a/src/api/pokemon/pokedex.ts +++ b/src/api/pokemon/pokedex.ts @@ -8,3 +8,8 @@ const logger = new Logger("Pokédex"); export function getPokemonByID(id: number) { return pokedex.find(p => p.pokeID == id); } + +export function getRandomPokemon() { + const r = Math.floor(Math.random() * pokedex.length); + return pokedex[r]; +} diff --git a/src/cli/index.ts b/src/cli/index.ts index 58485b6..edbe71d 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -1,8 +1,9 @@ import { Logger } from "@util/Logger"; import { createInterface } from "readline"; -import { EventEmitter } from "events"; +import { EventEmitter } from "node:events"; import gettRPC from "@util/api/trpc"; import { startAutorestart } from "@util/autorestart"; +import { CosmicColor } from "@util/CosmicColor"; const trpc = gettRPC(process.env.CLI_FISHING_TOKEN as string); @@ -15,7 +16,7 @@ const b = new EventEmitter(); const rl = createInterface({ input: process.stdin, output: process.stdout -}); +} as any); const user = { _id: "stdin", @@ -26,6 +27,12 @@ const user = { (globalThis as unknown as any).rl = rl; rl.setPrompt("> "); rl.prompt(); +setPrompt(); + +function setPrompt() { + const color = new CosmicColor(user.color); + rl.setPrompt(`\x1b[38;2;${color.r};${color.g};${color.b}m> `); +} rl.on("line", async line => { if (line == "stop" || line == "exit") process.exit(); @@ -94,6 +101,7 @@ setInterval(async () => { b.on("color", msg => { if (typeof msg.color !== "string" || typeof msg.id !== "string") return; user.color = msg.color; + setPrompt(); }); b.on("sendchat", msg => { diff --git a/src/util/time.ts b/src/util/time.ts index 7c7a907..0f4888f 100644 --- a/src/util/time.ts +++ b/src/util/time.ts @@ -1,22 +1,32 @@ -export function getHHMMSS() { - const now = Date.now(); +export function getTime(t = Date.now(), twelveHour = true) { + const now = t; const s = now / 1000; const m = s / 60; const h = m / 60; - const hh = Math.floor(h % 12) + const hours = Math.floor(h % (twelveHour ? 12 : 24)) .toString() .padStart(2, "0"); - const mm = Math.floor(m % 60) + const minutes = Math.floor(m % 60) .toString() .padStart(2, "0"); - const ss = Math.floor(s % 60) + const seconds = Math.floor(s % 60) .toString() .padStart(2, "0"); - const ms = Math.floor(now % 1000) + const milliseconds = Math.floor(now % 1000) .toString() .padStart(3, "0"); - return `${hh}:${mm}:${ss}.${ms}`; + return { + hours, + minutes, + seconds, + milliseconds + }; +} + +export function getHHMMSS(t = Date.now(), twelveHour = true) { + const { hours, minutes, seconds, milliseconds } = getTime(t, twelveHour); + return `${hours}:${minutes}:${seconds}.${milliseconds}`; } diff --git a/src/util/types.d.ts b/src/util/types.d.ts index 2dd06a0..cc27ceb 100644 --- a/src/util/types.d.ts +++ b/src/util/types.d.ts @@ -21,7 +21,7 @@ interface IContextProps { type TCommandCallback = (props: IContextProps) => Promise; -interface CountComponent { +interface ICountComponent { count: number; } @@ -54,7 +54,7 @@ interface IFish extends IObject { } interface IPokemon extends IObject { - id: number; + id: string; pokeID: number; objtype: "pokemon"; emoji?: string; @@ -78,6 +78,7 @@ type TPokemonSack = JsonArray & IPokemon[]; interface IInventory { id: number; balance: number; + location: string; items: TInventoryItems; fishSack: TFishSack; @@ -90,7 +91,7 @@ interface IBack extends Record { m: T; } -interface Backs extends Record> { +interface IBacks extends Record> { color: { m: "color"; };