Compare commits
No commits in common. "9ece949220c4831614311f7caad5a7819dda199e" and "83f86214b52d23ad6666e1e7482ba938f2048ff8" have entirely different histories.
9ece949220
...
83f86214b5
|
@ -0,0 +1,8 @@
|
||||||
|
# - uri: wss://mppclone.com:8443
|
||||||
|
# channel:
|
||||||
|
# id: "✧𝓓𝓔𝓥 𝓡𝓸𝓸𝓶✧"
|
||||||
|
# allowColorChanging: true
|
||||||
|
- uri: wss://mppclone.com:8443
|
||||||
|
channel:
|
||||||
|
id: "test/fishing"
|
||||||
|
allowColorChanging: true
|
|
@ -1,8 +0,0 @@
|
||||||
- uri: wss://mppclone.com:8443
|
|
||||||
channel:
|
|
||||||
id: "✧𝓓𝓔𝓥 𝓡𝓸𝓸𝓶✧"
|
|
||||||
allowColorChanging: true
|
|
||||||
- uri: wss://mppclone.com:8443
|
|
||||||
channel:
|
|
||||||
id: "test/fishing"
|
|
||||||
allowColorChanging: true
|
|
24
package.json
24
package.json
|
@ -4,26 +4,24 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "bun .",
|
"start": "bun .",
|
||||||
"start-bot": "bun src/mpp/index.ts",
|
"start-bot": "bun src/mpp/index.ts"
|
||||||
"start-discord": "bun src/discord/index.ts"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/bun": "^1.1.6"
|
"@types/bun": "latest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "^5.3.3"
|
"typescript": "^5.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@prisma/client": "^5.16.1",
|
"@prisma/client": "^5.9.1",
|
||||||
"@trpc/client": "next",
|
"@trpc/client": "next",
|
||||||
"@trpc/server": "next",
|
"@trpc/server": "next",
|
||||||
"@types/node": "^20.14.10",
|
"cli-markdown": "^3.2.2",
|
||||||
"cli-markdown": "^3.4.0",
|
"discord.js": "^14.14.1",
|
||||||
"discord.js": "^14.15.3",
|
"mpp-client-net": "^1.1.3",
|
||||||
"mpp-client-net": "^1.2.0",
|
"prisma": "^5.9.1",
|
||||||
"prisma": "^5.16.1",
|
"trpc-bun-adapter": "^1.1.0",
|
||||||
"trpc-bun-adapter": "^1.1.1",
|
"yaml": "^2.3.4",
|
||||||
"yaml": "^2.4.5",
|
"zod": "^3.22.4"
|
||||||
"zod": "^3.23.8"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
# build output
|
|
||||||
dist/
|
|
||||||
|
|
||||||
# generated types
|
|
||||||
.astro/
|
|
||||||
|
|
||||||
# dependencies
|
|
||||||
node_modules/
|
|
||||||
|
|
||||||
# logs
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
pnpm-debug.log*
|
|
||||||
|
|
||||||
# environment variables
|
|
||||||
.env
|
|
||||||
.env.production
|
|
||||||
|
|
||||||
# macOS-specific files
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# jetbrains setting folder
|
|
||||||
.idea/
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"recommendations": ["astro-build.astro-vscode"],
|
|
||||||
"unwantedRecommendations": []
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"command": "./node_modules/.bin/astro dev",
|
|
||||||
"name": "Development server",
|
|
||||||
"request": "launch",
|
|
||||||
"type": "node-terminal"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
# Astro Starter Kit: Basics
|
|
||||||
|
|
||||||
```sh
|
|
||||||
npm create astro@latest -- --template basics
|
|
||||||
```
|
|
||||||
|
|
||||||
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
|
|
||||||
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
|
|
||||||
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
|
|
||||||
|
|
||||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
|
||||||
|
|
||||||
![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554)
|
|
||||||
|
|
||||||
## 🚀 Project Structure
|
|
||||||
|
|
||||||
Inside of your Astro project, you'll see the following folders and files:
|
|
||||||
|
|
||||||
```text
|
|
||||||
/
|
|
||||||
├── public/
|
|
||||||
│ └── favicon.svg
|
|
||||||
├── src/
|
|
||||||
│ ├── components/
|
|
||||||
│ │ └── Card.astro
|
|
||||||
│ ├── layouts/
|
|
||||||
│ │ └── Layout.astro
|
|
||||||
│ └── pages/
|
|
||||||
│ └── index.astro
|
|
||||||
└── package.json
|
|
||||||
```
|
|
||||||
|
|
||||||
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
|
||||||
|
|
||||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
|
||||||
|
|
||||||
Any static assets, like images, can be placed in the `public/` directory.
|
|
||||||
|
|
||||||
## 🧞 Commands
|
|
||||||
|
|
||||||
All commands are run from the root of the project, from a terminal:
|
|
||||||
|
|
||||||
| Command | Action |
|
|
||||||
| :------------------------ | :----------------------------------------------- |
|
|
||||||
| `npm install` | Installs dependencies |
|
|
||||||
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
|
||||||
| `npm run build` | Build your production site to `./dist/` |
|
|
||||||
| `npm run preview` | Preview your build locally, before deploying |
|
|
||||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
|
||||||
| `npm run astro -- --help` | Get help using the Astro CLI |
|
|
||||||
|
|
||||||
## 👀 Want to learn more?
|
|
||||||
|
|
||||||
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
|
|
@ -1,8 +0,0 @@
|
||||||
import { defineConfig } from 'astro/config';
|
|
||||||
|
|
||||||
import tailwind from "@astrojs/tailwind";
|
|
||||||
|
|
||||||
// https://astro.build/config
|
|
||||||
export default defineConfig({
|
|
||||||
integrations: [tailwind()]
|
|
||||||
});
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "site",
|
|
||||||
"type": "module",
|
|
||||||
"version": "0.0.1",
|
|
||||||
"scripts": {
|
|
||||||
"dev": "astro dev",
|
|
||||||
"start": "astro dev",
|
|
||||||
"build": "astro check && astro build",
|
|
||||||
"preview": "astro preview",
|
|
||||||
"astro": "astro"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@astrojs/check": "^0.7.0",
|
|
||||||
"@astrojs/tailwind": "^5.1.0",
|
|
||||||
"astro": "^4.10.2",
|
|
||||||
"tailwindcss": "^3.4.4",
|
|
||||||
"typescript": "^5.4.5"
|
|
||||||
}
|
|
||||||
}
|
|
4513
site/pnpm-lock.yaml
4513
site/pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
|
|
||||||
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
|
|
||||||
<style>
|
|
||||||
path { fill: #000; }
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
path { fill: #FFF; }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 749 B |
|
@ -1 +0,0 @@
|
||||||
/// <reference types="astro/client" />
|
|
|
@ -1,36 +0,0 @@
|
||||||
---
|
|
||||||
interface Props {
|
|
||||||
title: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const { title } = Astro.props;
|
|
||||||
---
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="description" content="Astro description" />
|
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
||||||
<meta name="generator" content={Astro.generator} />
|
|
||||||
<title>Fishing - {title}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<slot />
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
html, body {
|
|
||||||
font: 20pt verdana, "DejaVu Sans", sans-serif;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
color: white;
|
|
||||||
text-shadow: #444 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background: radial-gradient(rgb(115, 179, 204) 0%, rgb(39, 53, 70) 100%);
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,26 +0,0 @@
|
||||||
---
|
|
||||||
import Layout from "../layouts/Layout.astro";
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout title="Home">
|
|
||||||
<main>
|
|
||||||
<div id="container" class="px-5 py-2 mx-auto w-[60%]">
|
|
||||||
<h1 class="text-xl">Fishing Bot</h1>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<div
|
|
||||||
id="page-content"
|
|
||||||
class="bg-[#fea] border border-[#fea] p-[10px]"
|
|
||||||
>
|
|
||||||
<h2 class="border-b border-[#f84]">Discord</h2>
|
|
||||||
<p class="text-[14pt] py-2">
|
|
||||||
Click <a
|
|
||||||
href="https://discord.gg/HN7UkGnR9h"
|
|
||||||
class="text-[#f46] hover:text-[#e05] hover:underline"
|
|
||||||
>here</a
|
|
||||||
> to join the Discord server!
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</Layout>
|
|
|
@ -1,8 +0,0 @@
|
||||||
/** @type {import('tailwindcss').Config} */
|
|
||||||
export default {
|
|
||||||
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
|
|
||||||
theme: {
|
|
||||||
extend: {},
|
|
||||||
},
|
|
||||||
plugins: [],
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "astro/tsconfigs/strict"
|
|
||||||
}
|
|
|
@ -7,9 +7,7 @@ const logger = new Logger("Server");
|
||||||
export const server = Bun.serve(
|
export const server = Bun.serve(
|
||||||
createBunServeHandler({
|
createBunServeHandler({
|
||||||
router: appRouter,
|
router: appRouter,
|
||||||
createContext: createContext,
|
createContext: createContext
|
||||||
req: new Request("https://github.com/Hri7566"),
|
|
||||||
endpoint: "/"
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,8 @@ export const go = new Command(
|
||||||
inventory.location = nextLoc.id;
|
inventory.location = nextLoc.id;
|
||||||
await updateInventory(inventory);
|
await updateInventory(inventory);
|
||||||
|
|
||||||
let fisher;
|
if (getFishing(id, user.id)) {
|
||||||
if (fisher = getFishing(id, user.id)) {
|
stopFishing(id, user.id, false);
|
||||||
stopFishing(id, user.id, fisher.channel, false);
|
|
||||||
return `You ${prefix}${reel.aliases[0]}ed your LURE in and went to ${nextLoc.name}.`;
|
return `You ${prefix}${reel.aliases[0]}ed your LURE in and went to ${nextLoc.name}.`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { CosmicColor } from "@util/CosmicColor";
|
||||||
export const color = new Command(
|
export const color = new Command(
|
||||||
"color",
|
"color",
|
||||||
["color"],
|
["color"],
|
||||||
"Get the name of your color/any hex color",
|
"Get the name of a color",
|
||||||
"color [hex color]",
|
"color [hex color]",
|
||||||
"command.general.color",
|
"command.general.color",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
|
|
@ -17,7 +17,7 @@ export const help = new Command(
|
||||||
"cammands",
|
"cammands",
|
||||||
"cummunds"
|
"cummunds"
|
||||||
],
|
],
|
||||||
"Get a list of commands, or how to use them",
|
"Get command list or command usage",
|
||||||
"help [command]",
|
"help [command]",
|
||||||
"command.general.help",
|
"command.general.help",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
import Command from "@server/commands/Command";
|
|
||||||
|
|
||||||
export const info = new Command(
|
|
||||||
"info",
|
|
||||||
["info"],
|
|
||||||
"Get your own user ID",
|
|
||||||
"info",
|
|
||||||
"command.general.info",
|
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
|
||||||
return `🌊 Made by Hri7566 | Original created by Brandon Lockaby`;
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
|
@ -3,7 +3,7 @@ import Command from "@server/commands/Command";
|
||||||
export const myid = new Command(
|
export const myid = new Command(
|
||||||
"myid",
|
"myid",
|
||||||
["myid"],
|
["myid"],
|
||||||
"Get your own user ID",
|
"Get your own ID",
|
||||||
"myid",
|
"myid",
|
||||||
"command.general.myid",
|
"command.general.myid",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
|
|
@ -22,9 +22,6 @@ import { yeet } from "./inventory/yeet";
|
||||||
import { tree } from "./fishing/tree";
|
import { tree } from "./fishing/tree";
|
||||||
import { pick } from "./fishing/pick";
|
import { pick } from "./fishing/pick";
|
||||||
import { fid } from "./util/fid";
|
import { fid } from "./util/fid";
|
||||||
import { chance } from "./util/chance";
|
|
||||||
import { info } from "./general/info";
|
|
||||||
import { burger } from "./util/burger";
|
|
||||||
// import { give } from "./inventory/give";
|
// import { give } from "./inventory/give";
|
||||||
|
|
||||||
interface ICommandGroup {
|
interface ICommandGroup {
|
||||||
|
@ -38,7 +35,7 @@ export const commandGroups: ICommandGroup[] = [];
|
||||||
const generalGroup: ICommandGroup = {
|
const generalGroup: ICommandGroup = {
|
||||||
id: "general",
|
id: "general",
|
||||||
displayName: "General",
|
displayName: "General",
|
||||||
commands: [help, color, myid, info]
|
commands: [help, color, myid]
|
||||||
};
|
};
|
||||||
|
|
||||||
commandGroups.push(generalGroup);
|
commandGroups.push(generalGroup);
|
||||||
|
@ -54,7 +51,7 @@ commandGroups.push(fishingGroup);
|
||||||
const inventoryGroup: ICommandGroup = {
|
const inventoryGroup: ICommandGroup = {
|
||||||
id: "inventory",
|
id: "inventory",
|
||||||
displayName: "Inventory",
|
displayName: "Inventory",
|
||||||
commands: [inventory, take, eat, sack, pokemon, yeet, burger /* give */]
|
commands: [inventory, take, eat, sack, pokemon, yeet /* give */]
|
||||||
};
|
};
|
||||||
|
|
||||||
commandGroups.push(inventoryGroup);
|
commandGroups.push(inventoryGroup);
|
||||||
|
@ -62,7 +59,7 @@ commandGroups.push(inventoryGroup);
|
||||||
const utilGroup: ICommandGroup = {
|
const utilGroup: ICommandGroup = {
|
||||||
id: "util",
|
id: "util",
|
||||||
displayName: "Utility",
|
displayName: "Utility",
|
||||||
commands: [data, setcolor, memory, autofish, pokedex, fid, chance]
|
commands: [data, setcolor, memory, autofish, pokedex, fid]
|
||||||
};
|
};
|
||||||
|
|
||||||
commandGroups.push(utilGroup);
|
commandGroups.push(utilGroup);
|
||||||
|
|
|
@ -108,21 +108,15 @@ export const eat = new Command(
|
||||||
|
|
||||||
if (foundObject.id == "sand") {
|
if (foundObject.id == "sand") {
|
||||||
if (res) {
|
if (res) {
|
||||||
if (res.and) {
|
if (res.and)
|
||||||
return `Our friend ${part.name} ate of his/her ${foundObject.name} ${res.and}`;
|
return `Our friend ${part.name} ate of his/her ${foundObject.name} ${res.and}`;
|
||||||
} else {
|
|
||||||
return `Our friend ${part.name} ate of his/her ${foundObject.name}.`;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return `Our friend ${part.name} ate of his/her ${foundObject.name}.`;
|
return `Our friend ${part.name} ate of his/her ${foundObject.name}.`;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (res) {
|
if (res) {
|
||||||
if (res.and) {
|
if (res.and)
|
||||||
return `Our friend ${part.name} ate his/her ${foundObject.name} ${res.and}`;
|
return `Our friend ${part.name} ate his/her ${foundObject.name} ${res.and}`;
|
||||||
} else {
|
|
||||||
return `Our friend ${part.name} ate his/her ${foundObject.name}.`;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return `Our friend ${part.name} ate his/her ${foundObject.name}.`;
|
return `Our friend ${part.name} ate his/her ${foundObject.name}.`;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@ import prisma from "@server/data/prisma";
|
||||||
|
|
||||||
export const inventory = new Command(
|
export const inventory = new Command(
|
||||||
"inventory",
|
"inventory",
|
||||||
["inventory", "inv", "items", "i"],
|
["inventory", "inv", "i"],
|
||||||
"List your inventory items and details",
|
"Look at your inventory",
|
||||||
"inventory",
|
"inventory",
|
||||||
"command.inventory.inventory",
|
"command.inventory.inventory",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
@ -37,28 +37,32 @@ export const inventory = new Command(
|
||||||
|
|
||||||
const items = inv.items as TInventoryItems;
|
const items = inv.items as TInventoryItems;
|
||||||
|
|
||||||
return `Contents of ${decidedUser.name}'s inventory: ${items
|
return `Contents of ${decidedUser.name}'s inventory: ${
|
||||||
.map(
|
items
|
||||||
(item: IItem) =>
|
.map(
|
||||||
`${item.emoji || "📦"}${item.name}${item.count ? ` (x${item.count})` : ""
|
(item: IItem) =>
|
||||||
}`
|
`${item.emoji || "📦"}${item.name}${
|
||||||
)
|
item.count ? ` (x${item.count})` : ""
|
||||||
.join(", ") || "(none)"
|
}`
|
||||||
}`;
|
)
|
||||||
|
.join(", ") || "(none)"
|
||||||
|
}`;
|
||||||
} else {
|
} else {
|
||||||
const inv = await getInventory(user.inventoryId);
|
const inv = await getInventory(user.inventoryId);
|
||||||
if (!inv)
|
if (!inv)
|
||||||
return `Apparently, you have no inventory. Not sure if that can be fixed, and I don't know how you got this message.`;
|
return `Apparently, you have no inventory. Not sure if that can be fixed, and I don't know how you got this message.`;
|
||||||
const items = inv.items as TInventoryItems;
|
const items = inv.items as TInventoryItems;
|
||||||
|
|
||||||
return `Contents of ${part.name}'s inventory: ${items
|
return `Contents of ${part.name}'s inventory: ${
|
||||||
.map(
|
items
|
||||||
(item: IItem) =>
|
.map(
|
||||||
`${item.emoji || "📦"}${item.name}${item.count ? ` (x${item.count})` : ""
|
(item: IItem) =>
|
||||||
}`
|
`${item.emoji || "📦"}${item.name}${
|
||||||
)
|
item.count ? ` (x${item.count})` : ""
|
||||||
.join(", ") || "(none)"
|
}`
|
||||||
}`;
|
)
|
||||||
|
.join(", ") || "(none)"
|
||||||
|
}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { getInventory } from "@server/data/inventory";
|
||||||
export const pokemon = new Command(
|
export const pokemon = new Command(
|
||||||
"pokemon",
|
"pokemon",
|
||||||
["pokemon"],
|
["pokemon"],
|
||||||
"List your Pokémon collection",
|
"Look at your Pokemon",
|
||||||
"pokemon",
|
"pokemon",
|
||||||
"command.inventory.pokemon",
|
"command.inventory.pokemon",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
@ -13,14 +13,16 @@ export const pokemon = new Command(
|
||||||
|
|
||||||
const sack = inv.pokemon as TPokemonSack[];
|
const sack = inv.pokemon as TPokemonSack[];
|
||||||
|
|
||||||
return `Friend ${part.name}'s Pokémon: ${sack
|
return `Friend ${part.name}'s Pokémon: ${
|
||||||
.map(
|
sack
|
||||||
(pokemon: IPokemon) =>
|
.map(
|
||||||
`${pokemon.emoji || ""}${pokemon.name}${pokemon.count ? ` (x${pokemon.count})` : ""
|
(pokemon: IPokemon) =>
|
||||||
}`
|
`${pokemon.emoji || ""}${pokemon.name}${
|
||||||
)
|
pokemon.count ? ` (x${pokemon.count})` : ""
|
||||||
.join(", ") || "(none)"
|
}`
|
||||||
}`;
|
)
|
||||||
|
.join(", ") || "(none)"
|
||||||
|
}`;
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,8 +5,8 @@ import type { User } from "@prisma/client";
|
||||||
|
|
||||||
export const sack = new Command(
|
export const sack = new Command(
|
||||||
"sack",
|
"sack",
|
||||||
["sack", "caught", "catched", "sock", "fish-sack", "fishies", "myfish", "mysack", "sacks"],
|
["sack", "caught"],
|
||||||
"List your caught fish",
|
"Look at your fish sack",
|
||||||
"sack [user ID]",
|
"sack [user ID]",
|
||||||
"command.inventory.sack",
|
"command.inventory.sack",
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
async ({ id, command, args, prefix, part, user }) => {
|
||||||
|
@ -37,27 +37,31 @@ export const sack = new Command(
|
||||||
|
|
||||||
const fishSack = inv.fishSack as TFishSack;
|
const fishSack = inv.fishSack as TFishSack;
|
||||||
|
|
||||||
return `Contents of ${foundUser.name}'s fish sack: ${fishSack
|
return `Contents of ${foundUser.name}'s fish sack: ${
|
||||||
.map(
|
fishSack
|
||||||
(fish: IFish) =>
|
.map(
|
||||||
`${fish.emoji || "🐟"}${fish.name}${fish.count ? ` (x${fish.count})` : ""
|
(fish: IFish) =>
|
||||||
}`
|
`${fish.emoji || "🐟"}${fish.name}${
|
||||||
)
|
fish.count ? ` (x${fish.count})` : ""
|
||||||
.join(", ") || "(none)"
|
}`
|
||||||
}`;
|
)
|
||||||
|
.join(", ") || "(none)"
|
||||||
|
}`;
|
||||||
} else {
|
} else {
|
||||||
const inv = await getInventory(user.inventoryId);
|
const inv = await getInventory(user.inventoryId);
|
||||||
if (!inv) return;
|
if (!inv) return;
|
||||||
const fishSack = inv.fishSack as TFishSack;
|
const fishSack = inv.fishSack as TFishSack;
|
||||||
|
|
||||||
return `Contents of ${part.name}'s fish sack: ${fishSack
|
return `Contents of ${part.name}'s fish sack: ${
|
||||||
.map(
|
fishSack
|
||||||
(fish: IFish) =>
|
.map(
|
||||||
`${fish.emoji || "🐟"}${fish.name}${fish.count ? ` (x${fish.count})` : ""
|
(fish: IFish) =>
|
||||||
}`
|
`${fish.emoji || "🐟"}${fish.name}${
|
||||||
)
|
fish.count ? ` (x${fish.count})` : ""
|
||||||
.join(", ") || "(none)"
|
}`
|
||||||
}`;
|
)
|
||||||
|
.join(", ") || "(none)"
|
||||||
|
}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,17 +12,18 @@ export const autofish = new Command(
|
||||||
const fishing = getFishing(props.id, props.part.id);
|
const fishing = getFishing(props.id, props.part.id);
|
||||||
|
|
||||||
if (!fishing) {
|
if (!fishing) {
|
||||||
startFishing(props.id, props.part.id, props.channel, true, true);
|
startFishing(props.id, props.part.id, true, true);
|
||||||
return `Our friend ${props.user.name} casts LURE into a water with AUTOFISH enabled. (${props.prefix}${reel.aliases[0]} to disable)`;
|
return `Our friend ${props.user.name} casts LURE into a water with AUTOFISH enabled. (${props.prefix}${reel.aliases[0]} to disable)`;
|
||||||
} else {
|
} else {
|
||||||
return `Your lure is already in the water (since ${(
|
return `Your lure is already in the water (since ${(
|
||||||
(Date.now() - fishing.t) /
|
(Date.now() - fishing.t) /
|
||||||
1000 /
|
1000 /
|
||||||
60
|
60
|
||||||
).toFixed(2)} minutes ago).${fishing.autofish
|
).toFixed(2)} minutes ago).${
|
||||||
|
fishing.autofish
|
||||||
? ` (AUTOFISH is enabled)`
|
? ` (AUTOFISH is enabled)`
|
||||||
: ` (${props.prefix}${reel.aliases[0]} in first to start AUTOFISH)`
|
: ` (${props.prefix}${reel.aliases[0]} in first to start AUTOFISH)`
|
||||||
}`;
|
}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
import { addBack } from "@server/backs";
|
|
||||||
import Command from "@server/commands/Command";
|
|
||||||
import { getInventory, updateInventory } from "@server/data/inventory";
|
|
||||||
import { addItem } from "@server/items";
|
|
||||||
|
|
||||||
export const burger = new Command(
|
|
||||||
"burger",
|
|
||||||
["burger"],
|
|
||||||
"Get a burger",
|
|
||||||
"burger",
|
|
||||||
"command.util.burger",
|
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
|
||||||
const burger = {
|
|
||||||
id: "burger",
|
|
||||||
name: "Burger",
|
|
||||||
objtype: "item",
|
|
||||||
emoji: "🍔"
|
|
||||||
};
|
|
||||||
|
|
||||||
const inv = await getInventory(user.inventoryId);
|
|
||||||
if (!inv) return "something has gone *terribly* wrong";
|
|
||||||
|
|
||||||
addItem(inv.items as unknown as IObject[], burger);
|
|
||||||
await updateInventory(inv);
|
|
||||||
|
|
||||||
return "you now have burger";
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
|
@ -1,16 +0,0 @@
|
||||||
import { addBack } from "@server/backs";
|
|
||||||
import Command from "@server/commands/Command";
|
|
||||||
import { getFishingChance } from "@server/fish/fishers";
|
|
||||||
|
|
||||||
export const chance = new Command(
|
|
||||||
"chance",
|
|
||||||
["chance"],
|
|
||||||
"Set own user color",
|
|
||||||
"chance",
|
|
||||||
"command.util.chance",
|
|
||||||
async ({ id, command, args, prefix, part, user }) => {
|
|
||||||
const chance = await getFishingChance(user.id);
|
|
||||||
return `Fishing chance: ${chance.chance} | Timestamp: ${chance.t}`;
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { kvGet, kvSet } from "@server/data/keyValueStore";
|
import { kvGet, kvSet } from "@server/data/keyValueStore";
|
||||||
|
import { getObjectStorage } from "@server/data/location";
|
||||||
import { addTickEvent, removeTickEvent } from "@util/tick";
|
import { addTickEvent, removeTickEvent } from "@util/tick";
|
||||||
import { getSizeString, randomFish } from "./fish";
|
import { getSizeString, randomFish } from "./fish";
|
||||||
import { getUser } from "@server/data/user";
|
import { getUser } from "@server/data/user";
|
||||||
|
@ -41,12 +42,10 @@ export async function tick() {
|
||||||
|
|
||||||
const r = Math.random();
|
const r = Math.random();
|
||||||
const data = await getFishingChance(user.id);
|
const data = await getFishingChance(user.id);
|
||||||
|
// After 30 minutes, reset chance
|
||||||
|
if (data.t > 30 * 60000) await resetFishingChance(user.id);
|
||||||
|
|
||||||
if (r < data.chance / 10) {
|
if (r < data.chance / 10) {
|
||||||
// After 60 minutes, reset chance
|
|
||||||
if (data.t > Date.now() + 60 * 60000)
|
|
||||||
await resetFishingChance(user.id);
|
|
||||||
|
|
||||||
stopFishing(
|
stopFishing(
|
||||||
winner.id,
|
winner.id,
|
||||||
winner.userID,
|
winner.userID,
|
||||||
|
@ -54,26 +53,18 @@ export async function tick() {
|
||||||
winner.autofish,
|
winner.autofish,
|
||||||
winner.autofish_t
|
winner.autofish_t
|
||||||
);
|
);
|
||||||
|
|
||||||
// Save to sack
|
|
||||||
const animal = randomFish(inventory.location);
|
const animal = randomFish(inventory.location);
|
||||||
addItem(inventory.fishSack as TFishSack, animal);
|
addItem(inventory.fishSack as TFishSack, animal);
|
||||||
await updateInventory(inventory);
|
await updateInventory(inventory);
|
||||||
|
|
||||||
const size = getSizeString(animal.size);
|
const size = getSizeString(animal.size);
|
||||||
const p = prefixes[0];
|
|
||||||
const emoji = animal.emoji || "🐟";
|
|
||||||
|
|
||||||
addBack(winner.id, {
|
addBack(winner.id, {
|
||||||
m: "sendchat",
|
m: "sendchat",
|
||||||
channel: winner.channel,
|
channel: winner.channel,
|
||||||
message: `Our good friend @${
|
message: `Our good friend @${user.id} caught a ${size} ${
|
||||||
user.id
|
animal.emoji || "🐟"
|
||||||
} caught a ${size} ${emoji}${
|
}${animal.name}! ready to ${prefixes[0]}eat or ${
|
||||||
animal.name
|
prefixes[0]
|
||||||
}! ready to ${p}eat or ${p}fish again${
|
}fish again${winner.autofish ? " (AUTOFISH is enabled)" : ""}`,
|
||||||
winner.autofish ? " (AUTOFISH is enabled)" : ""
|
|
||||||
}`,
|
|
||||||
isDM: winner.isDM,
|
isDM: winner.isDM,
|
||||||
id: winner.userID
|
id: winner.userID
|
||||||
});
|
});
|
||||||
|
@ -164,7 +155,6 @@ export async function getFishingChance(userID: string) {
|
||||||
|
|
||||||
export async function resetFishingChance(userID: string) {
|
export async function resetFishingChance(userID: string) {
|
||||||
const key = `fishingChance~${userID}`;
|
const key = `fishingChance~${userID}`;
|
||||||
// logger.debug("Resetting fishing chance for user " + userID);
|
|
||||||
await kvSet(key, {
|
await kvSet(key, {
|
||||||
t: Date.now(),
|
t: Date.now(),
|
||||||
chance: 1
|
chance: 1
|
||||||
|
|
|
@ -7,12 +7,11 @@ import { Logger } from "@util/Logger";
|
||||||
import { loadConfig } from "@util/config";
|
import { loadConfig } from "@util/config";
|
||||||
import { addTickEvent, removeTickEvent } from "@util/tick";
|
import { addTickEvent, removeTickEvent } from "@util/tick";
|
||||||
|
|
||||||
export const locations = loadConfig<TAnyLocation[]>("config/locations.yml", [
|
export const locations = loadConfig<ILocation[]>("config/locations.yml", [
|
||||||
{
|
{
|
||||||
id: "pond",
|
id: "pond",
|
||||||
name: "Pond",
|
name: "Pond",
|
||||||
nearby: ["lake", "river", "sea"],
|
nearby: ["lake", "river", "sea"],
|
||||||
canFish: true,
|
|
||||||
hasSand: true,
|
hasSand: true,
|
||||||
objects: []
|
objects: []
|
||||||
},
|
},
|
||||||
|
@ -20,7 +19,6 @@ export const locations = loadConfig<TAnyLocation[]>("config/locations.yml", [
|
||||||
id: "lake",
|
id: "lake",
|
||||||
name: "Lake",
|
name: "Lake",
|
||||||
nearby: ["pond", "river", "sea"],
|
nearby: ["pond", "river", "sea"],
|
||||||
canFish: true,
|
|
||||||
hasSand: false,
|
hasSand: false,
|
||||||
objects: []
|
objects: []
|
||||||
},
|
},
|
||||||
|
@ -28,7 +26,6 @@ export const locations = loadConfig<TAnyLocation[]>("config/locations.yml", [
|
||||||
id: "river",
|
id: "river",
|
||||||
name: "River",
|
name: "River",
|
||||||
nearby: ["pond", "lake", "sea"],
|
nearby: ["pond", "lake", "sea"],
|
||||||
canFish: true,
|
|
||||||
hasSand: false,
|
hasSand: false,
|
||||||
objects: []
|
objects: []
|
||||||
},
|
},
|
||||||
|
@ -36,7 +33,6 @@ export const locations = loadConfig<TAnyLocation[]>("config/locations.yml", [
|
||||||
id: "sea",
|
id: "sea",
|
||||||
name: "Sea",
|
name: "Sea",
|
||||||
nearby: ["pond", "lake", "river"],
|
nearby: ["pond", "lake", "river"],
|
||||||
canFish: true,
|
|
||||||
hasSand: true,
|
hasSand: true,
|
||||||
objects: []
|
objects: []
|
||||||
}
|
}
|
||||||
|
@ -53,10 +49,9 @@ const logger = new Logger("Places");
|
||||||
|
|
||||||
export function populateSand() {
|
export function populateSand() {
|
||||||
for (const loc of locations) {
|
for (const loc of locations) {
|
||||||
if (!("hasSand" in loc)) continue;
|
|
||||||
if (!loc.hasSand) continue;
|
if (!loc.hasSand) continue;
|
||||||
|
|
||||||
let existing = loc.objects.find((obj: ILocation) => obj.id == "sand");
|
let existing = loc.objects.find(obj => obj.id == "sand");
|
||||||
if (typeof existing !== "undefined") continue;
|
if (typeof existing !== "undefined") continue;
|
||||||
|
|
||||||
loc.objects.push(sand);
|
loc.objects.push(sand);
|
||||||
|
|
|
@ -5,37 +5,25 @@ export const fish: IBehaviorDefinition = {
|
||||||
id: "fish",
|
id: "fish",
|
||||||
bhv: {
|
bhv: {
|
||||||
async eat(obj, props) {
|
async eat(obj, props) {
|
||||||
const r = Math.random();
|
const color = new CosmicColor(
|
||||||
|
Math.floor(Math.random() * 255),
|
||||||
|
Math.floor(Math.random() * 255),
|
||||||
|
Math.floor(Math.random() * 255)
|
||||||
|
);
|
||||||
|
|
||||||
const fish = obj as IFish;
|
addBack(props.id, {
|
||||||
|
m: "color",
|
||||||
|
id: props.part.id,
|
||||||
|
color: color.toHexa()
|
||||||
|
});
|
||||||
|
|
||||||
// 50%
|
return {
|
||||||
if (r < 0.5) {
|
success: true,
|
||||||
const color = new CosmicColor(
|
shouldRemove: true,
|
||||||
Math.floor(Math.random() * 255),
|
and: `and it made him/her turn ${color
|
||||||
Math.floor(Math.random() * 255),
|
.getName()
|
||||||
Math.floor(Math.random() * 255)
|
.toLowerCase()}.`
|
||||||
);
|
};
|
||||||
|
|
||||||
addBack(props.id, {
|
|
||||||
m: "color",
|
|
||||||
id: props.part.id,
|
|
||||||
color: color.toHexa()
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
success: true,
|
|
||||||
shouldRemove: true,
|
|
||||||
and: `and it made him/her turn ${color
|
|
||||||
.getName()
|
|
||||||
.toLowerCase()}.`
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
success: true,
|
|
||||||
shouldRemove: true
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Logger } from "@util/Logger";
|
import { Logger } from "@util/Logger";
|
||||||
import { createInterface } from "readline";
|
import { createInterface, type ReadLine } from "readline";
|
||||||
import { EventEmitter } from "events";
|
import { EventEmitter } from "events";
|
||||||
import gettRPC from "@util/api/trpc";
|
import gettRPC from "@util/api/trpc";
|
||||||
import { startAutorestart } from "@util/autorestart";
|
import { startAutorestart } from "@util/autorestart";
|
||||||
|
|
|
@ -51,19 +51,11 @@ export class MPPNetBot {
|
||||||
this.logger.info(
|
this.logger.info(
|
||||||
`Received channel update for channel ID "${msg.ch._id}"`
|
`Received channel update for channel ID "${msg.ch._id}"`
|
||||||
);
|
);
|
||||||
|
|
||||||
if (msg._id !== this.config.channel.id) {
|
|
||||||
this.client.setChannel(this.config.channel.id);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.client.on("a", async msg => {
|
this.client.on("a", async msg => {
|
||||||
let prefixes: string[];
|
let prefixes: string[];
|
||||||
|
|
||||||
if (this.client.channel._id !== this.config.channel.id) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
prefixes = await this.trpc.prefixes.query();
|
prefixes = await this.trpc.prefixes.query();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -6,7 +6,7 @@ const logger = new Logger("big brain");
|
||||||
|
|
||||||
const bots: MPPNetBot[] = [];
|
const bots: MPPNetBot[] = [];
|
||||||
|
|
||||||
const defaults = loadConfig("config/mpp_bots.yml", [
|
const defaults = loadConfig("config/bots.yml", [
|
||||||
{
|
{
|
||||||
uri: "wss://mppclone.com:8443",
|
uri: "wss://mppclone.com:8443",
|
||||||
channel: {
|
channel: {
|
||||||
|
|
|
@ -6,14 +6,14 @@ import type { AppRouter } from "@server/api/trpc";
|
||||||
export function gettRPC(token: string) {
|
export function gettRPC(token: string) {
|
||||||
return createTRPCClient<AppRouter>({
|
return createTRPCClient<AppRouter>({
|
||||||
links: [
|
links: [
|
||||||
httpBatchLink({
|
// httpBatchLink({
|
||||||
url: "http://localhost:3000",
|
// url: "http://localhost:3000",
|
||||||
headers() {
|
// headers() {
|
||||||
return {
|
// return {
|
||||||
Authorization: token
|
// Authorization: token
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
}),
|
// }),
|
||||||
httpBatchLink({
|
httpBatchLink({
|
||||||
url: "https://fishing.hri7566.info/api",
|
url: "https://fishing.hri7566.info/api",
|
||||||
headers() {
|
headers() {
|
||||||
|
|
|
@ -101,26 +101,9 @@ interface ILocation {
|
||||||
name: string;
|
name: string;
|
||||||
nearby: string[];
|
nearby: string[];
|
||||||
objects: IObject[];
|
objects: IObject[];
|
||||||
|
hasSand: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IFishingLocation extends ILocation {
|
|
||||||
canFish: true;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ISandyLocation extends ILocation {
|
|
||||||
hasSand: true;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IShopLocation extends ILocation {
|
|
||||||
isShop: true;
|
|
||||||
}
|
|
||||||
|
|
||||||
type TAnyLocation =
|
|
||||||
| ILocation
|
|
||||||
| IFishingLocation
|
|
||||||
| ISandyFishingLocation
|
|
||||||
| IShopLocation;
|
|
||||||
|
|
||||||
interface TFisher {
|
interface TFisher {
|
||||||
id: string;
|
id: string;
|
||||||
userID: string;
|
userID: string;
|
||||||
|
|
Loading…
Reference in New Issue