chore: squashed some commits, which are not for public viewing
fix: fixed ImageSection being broken on mobile feat: added proper imprint feat: added name to privacy-policy feat: bump version fix: fixed footer not rendering correct on some mobile devices chore: bump version feat: imported html from Config repo Updated packages Migration from astro to solid-start Add database and auth Add discord rest testing Database schema rework API meeting progress Fix styles
This commit is contained in:
parent
eb3acd206c
commit
2e529cede8
50 changed files with 9903 additions and 5045 deletions
8
.eslintrc.json
Normal file
8
.eslintrc.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"env": {
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"plugins": ["solid"],
|
||||||
|
"extends": ["eslint:recommended", "plugin:solid/typescript"]
|
||||||
|
}
|
43
.gitignore
vendored
43
.gitignore
vendored
|
@ -1,28 +1,29 @@
|
||||||
# build output
|
src/drizzle/migrations
|
||||||
dist/
|
|
||||||
|
|
||||||
# generated types
|
dist
|
||||||
.astro/
|
.vinxi
|
||||||
|
.output
|
||||||
|
.vercel
|
||||||
|
.netlify
|
||||||
|
netlify
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
.env*.local
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
node_modules/
|
/node_modules
|
||||||
|
|
||||||
# logs
|
# IDEs and editors
|
||||||
npm-debug.log*
|
/.idea
|
||||||
yarn-debug.log*
|
.project
|
||||||
yarn-error.log*
|
.classpath
|
||||||
pnpm-debug.log*
|
*.launch
|
||||||
|
.settings/
|
||||||
|
|
||||||
# environment variables
|
# Temp
|
||||||
.env
|
gitignore
|
||||||
.env.production
|
|
||||||
|
|
||||||
# macOS-specific files
|
# System Files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
/.idea/
|
|
||||||
/.fleet/
|
|
||||||
|
|
||||||
/.next/
|
|
||||||
|
|
||||||
next-env.d.ts
|
|
||||||
|
|
3
.prettierrc.json
Normal file
3
.prettierrc.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"plugins": ["prettier-plugin-organize-imports"]
|
||||||
|
}
|
64
README.md
64
README.md
|
@ -1,54 +1,30 @@
|
||||||
# Astro Starter Kit: Basics
|
# SolidStart
|
||||||
|
|
||||||
```sh
|
Everything you need to build a Solid project, powered by [`solid-start`](https://start.solidjs.com);
|
||||||
npm create astro@latest -- --template basics
|
|
||||||
|
## Creating a project
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# create a new project in the current directory
|
||||||
|
npm init solid@latest
|
||||||
|
|
||||||
|
# create a new project in my-app
|
||||||
|
npm init solid@latest my-app
|
||||||
```
|
```
|
||||||
|
|
||||||
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
|
## Developing
|
||||||
[![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!
|
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||||
|
|
||||||
![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554)
|
```bash
|
||||||
|
npm run dev
|
||||||
|
|
||||||
## 🚀 Project Structure
|
# or start the server and open the app in a new browser tab
|
||||||
|
npm run dev -- --open
|
||||||
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.
|
## Building
|
||||||
|
|
||||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
Solid apps are built with _adapters_, which optimise your project for deployment to different environments.
|
||||||
|
|
||||||
Any static assets, like images, can be placed in the `public/` directory.
|
By default, `npm run build` will generate a Node app that you can run with `npm start`. To use a different adapter, add it to the `devDependencies` in `package.json` and specify in your `vite.config.js`.
|
||||||
|
|
||||||
## 🧞 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,4 +0,0 @@
|
||||||
import { defineConfig } from "astro/config";
|
|
||||||
|
|
||||||
// https://astro.build/config
|
|
||||||
export default defineConfig({});
|
|
20
discord_client_testing.http
Normal file
20
discord_client_testing.http
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
GET https://discord.com/api/users/@me
|
||||||
|
Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}}
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
GET https://discord.com/api/users/@me/guilds
|
||||||
|
Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}}
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
GET https://discord.com/api/users/@me/guilds/{{$dotenv DISCORD_GUILD_ID}}/member
|
||||||
|
Authorization: Bearer {{$dotenv DISCORD_ACCESS_TOKEN}}
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
POST https://discord.com/api/oauth2/token/revoke
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
Authorization: Basic {{$dotenv DISCORD_CLIENT_ID}}:{{$dotenv DISCORD_CLIENT_SECRET}}
|
||||||
|
|
||||||
|
token={{$dotenv DISCORD_ACCESS_TOKEN}}&token_type_hint=access_token
|
11
drizzle.config.ts
Normal file
11
drizzle.config.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import "dotenv/config"
|
||||||
|
import type { Config } from "drizzle-kit"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
schema: "./src/drizzle/schema.ts",
|
||||||
|
out: "./src/drizzle/migrations",
|
||||||
|
driver: "pg",
|
||||||
|
dbCredentials: {
|
||||||
|
connectionString: process.env.DATABASE_URL ?? "",
|
||||||
|
},
|
||||||
|
} satisfies Config
|
|
@ -1,31 +0,0 @@
|
||||||
worker_processes 1;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
server {
|
|
||||||
listen 8080;
|
|
||||||
server_name _;
|
|
||||||
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.html index.htm;
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
|
|
||||||
gzip on;
|
|
||||||
gzip_min_length 1000;
|
|
||||||
gzip_proxied expired no-cache no-store private auth;
|
|
||||||
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
|
||||||
|
|
||||||
error_page 404 /404.html;
|
|
||||||
location = /404.html {
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
try_files $uri $uri/index.html =404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
45
package.json
45
package.json
|
@ -1,23 +1,42 @@
|
||||||
{
|
{
|
||||||
"name": "liljudd-website",
|
"name": "liljudd-website",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "1.0.0",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "vinxi dev",
|
||||||
"start": "astro dev",
|
"build": "vinxi build",
|
||||||
"build": "astro check && astro build",
|
"start": "vinxi start",
|
||||||
"preview": "astro preview",
|
"lint": "eslint --fix \"**/*.{ts,tsx,js,jsx}\"",
|
||||||
"astro": "astro"
|
"push": "drizzle-kit push:pg",
|
||||||
|
"typecheck": "tsc --noEmit --checkJs false --skipLibCheck"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "^0.3.1",
|
"@auth/core": "^0.19.0",
|
||||||
"astro": "^3.4.4",
|
"@auth/drizzle-adapter": "^0.3.12",
|
||||||
"sass": "^1.69.5",
|
"@auth/solid-start": "0.1.2",
|
||||||
"typescript": "^5.2.2"
|
"@solidjs/meta": "^0.29.3",
|
||||||
|
"@solidjs/router": "^0.10.5",
|
||||||
|
"@solidjs/start": "^0.4.2",
|
||||||
|
"drizzle-orm": "^0.29.2",
|
||||||
|
"drizzle-zod": "^0.5.1",
|
||||||
|
"solid-js": "^1.8.7",
|
||||||
|
"solid-start": "^0.3.10",
|
||||||
|
"vinxi": "0.0.62"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^3.0.3",
|
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
||||||
"prettier-plugin-astro": "^0.12.1",
|
"dotenv": "^16.3.1",
|
||||||
"prettier-plugin-organize-imports": "^3.2.3"
|
"drizzle-kit": "^0.20.9",
|
||||||
|
"eslint": "^8.56.0",
|
||||||
|
"eslint-config-prettier": "^9.1.0",
|
||||||
|
"eslint-plugin-solid": "^0.13.1",
|
||||||
|
"pg": "^8.11.3",
|
||||||
|
"postgres": "^3.4.3",
|
||||||
|
"prettier": "^3.1.1",
|
||||||
|
"prettier-plugin-organize-imports": "^3.2.4",
|
||||||
|
"sass": "^1.69.6",
|
||||||
|
"zod": "3.22.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12426
pnpm-lock.yaml
12426
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
|
@ -1,3 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
plugins: ["prettier-plugin-organize-imports", "prettier-plugin-astro"],
|
|
||||||
};
|
|
32
sample_conf.json
Normal file
32
sample_conf.json
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"guilds": [
|
||||||
|
{
|
||||||
|
"guildID": "some ID",
|
||||||
|
"UTCOffset": 0,
|
||||||
|
"features": {
|
||||||
|
"time_planning": {
|
||||||
|
"channelID": "some ID",
|
||||||
|
"targetWeekday": 0,
|
||||||
|
"targetHour": 0,
|
||||||
|
"targetMinute": 0,
|
||||||
|
"isAvailableRoleId": "some ID",
|
||||||
|
"wantsToBeNotifieRoledId": "some ID"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"matches": [
|
||||||
|
{
|
||||||
|
"channelID": "some ID",
|
||||||
|
"matchType": "",
|
||||||
|
"createrId": "some ID",
|
||||||
|
"roleId": "some ID",
|
||||||
|
"opponentName": "",
|
||||||
|
"messsageId": "",
|
||||||
|
"plannedFor": 1704314625000
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"accessToken": "some Token"
|
||||||
|
}
|
54
src/app.tsx
54
src/app.tsx
|
@ -1,26 +1,30 @@
|
||||||
---
|
// @refresh reload
|
||||||
import Footer from "@components/Footer.astro";
|
import { Meta, MetaProvider, Title } from "@solidjs/meta";
|
||||||
import NavBar from "@components/NavBar.astro";
|
import { Router } from "@solidjs/router";
|
||||||
import "../styles/Layout.scss";
|
import { FileRoutes } from "@solidjs/start";
|
||||||
import "../styles/GlobalLayout.css";
|
import { Suspense } from "solid-js";
|
||||||
---
|
import Footer from "./components/Footer";
|
||||||
|
import NavBar from "./components/NavBar";
|
||||||
|
import "./styles/GlobalLayout.css";
|
||||||
|
import "./styles/Layout.scss";
|
||||||
|
|
||||||
<!doctype html>
|
export default function App() {
|
||||||
<html lang="en">
|
return (
|
||||||
<head>
|
<Router
|
||||||
<meta charset="UTF-8" />
|
root={(props) => (
|
||||||
<meta
|
<MetaProvider>
|
||||||
name="description"
|
<Meta
|
||||||
content="The Splatoon Discord bot with unique features."
|
name="description"
|
||||||
/>
|
content="The Splatoon Discord bot with unique features."
|
||||||
<meta name="viewport" content="width=device-width" />
|
/>
|
||||||
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
<Title>li'l Judd - Your competitive Splatoon assistant</Title>
|
||||||
<meta name="generator" content={Astro.generator} />
|
<NavBar />
|
||||||
<title>li'l Judd - Your competitive Splatoon assistant</title>
|
<Suspense>{props.children}</Suspense>
|
||||||
</head>
|
<Footer />
|
||||||
<body>
|
</MetaProvider>
|
||||||
<NavBar />
|
)}
|
||||||
<slot />
|
>
|
||||||
<Footer />
|
<FileRoutes />
|
||||||
</body>
|
</Router>
|
||||||
</html>
|
);
|
||||||
|
}
|
||||||
|
|
|
@ -1,74 +1,132 @@
|
||||||
---
|
import "../styles/components/Footer.scss";
|
||||||
import '../styles/components/Footer.scss'
|
|
||||||
---
|
|
||||||
|
|
||||||
<footer>
|
function Footer() {
|
||||||
<div class="footerIcon">
|
return (
|
||||||
<img
|
<footer>
|
||||||
class="footerImage"
|
<div class="footerIcon">
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/lilJudd.png"
|
<img
|
||||||
alt="A cute Image of lil Judd <3"
|
class="footerImage"
|
||||||
/>
|
src="https://static.moonleay.net/img/lilJuddWeb/lilJudd.png"
|
||||||
<p>li'l Judd</p>
|
alt="A cute Image of lil Judd <3"
|
||||||
<p class="footerImageNote">Your competitive Splatoon assistant.</p>
|
/>
|
||||||
</div>
|
<p>li'l Judd</p>
|
||||||
<div class="footerTable">
|
<p class="footerImageNote">Your competitive Splatoon assistant.</p>
|
||||||
<div>
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
<div class="footerLinks">
|
|
||||||
<a href="/" target="_self">Home</a>
|
|
||||||
<a href="/features" target="_self">Features</a>
|
|
||||||
<a href="/how-do-i" target="_self">How do I...?</a>
|
|
||||||
<a href="/stack" target="_self">The Stack</a>
|
|
||||||
<a href="/about" target="_self">About</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="footerTable">
|
||||||
<div>
|
<div>
|
||||||
<h3>The Software</h3>
|
<h3>Navigation</h3>
|
||||||
<div class="footerLinks">
|
<div class="footerLinks">
|
||||||
<a href="https://git.moonleay.net/DiscordBots/lilJudd" target="_blank"
|
<a href="/">Home</a>
|
||||||
>The code of the bot <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a
|
<a href="/features">Features</a>
|
||||||
>
|
<a href="/how-do-i">How do I...?</a>
|
||||||
<a
|
<a href="/stack">The Stack</a>
|
||||||
href="https://git.moonleay.net/Websites/liljudd-website"
|
<a href="/about">About</a>
|
||||||
target="_blank">The code of the website <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a
|
</div>
|
||||||
>
|
</div>
|
||||||
<a href="https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban" target="_blank">The todo list <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a>
|
<div>
|
||||||
<a href="/acknowledgements" target="_self">Acknowledgements</a>
|
<h3>The Software</h3>
|
||||||
|
<div class="footerLinks">
|
||||||
|
<a
|
||||||
|
href="https://git.moonleay.net/DiscordBots/lilJudd"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
The code of the bot{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://git.moonleay.net/Websites/liljudd-website"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
The code of the website{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
The todo list{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="/acknowledgements">Acknowledgements</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>More</h3>
|
||||||
|
<div class="footerLinks">
|
||||||
|
<a href="https://moonleay.net/">
|
||||||
|
My homepage{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="https://moonleay.net/blog/" target="_blank">
|
||||||
|
My blog{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="/contact">Contact me</a>
|
||||||
|
<a href="https://status.moonleay.net/" target="_blank">
|
||||||
|
Server Status{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="https://discord.gg/HTZRktfH4A" target="_blank">
|
||||||
|
Support Discord{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3>Legal</h3>
|
||||||
|
<div class="footerLinks">
|
||||||
|
<a href="/imprint">Imprint</a>
|
||||||
|
<a href="/privacy-policy">Privacy Policy</a>
|
||||||
|
<a href="/terms-of-service">Terms of Service</a>
|
||||||
|
<a
|
||||||
|
href="https://git.moonleay.net/DiscordBots/lilJudd/src/branch/master/LICENSE"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
The license{" "}
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg"
|
||||||
|
alt="external link"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="footerNotice">
|
||||||
<div>
|
<p>
|
||||||
<h3>More</h3>
|
This website is NOT affiliated with Nintendo or any other party. All
|
||||||
<div class="footerLinks">
|
product names, logos, and brands are property of their respective
|
||||||
<a href="https://moonleay.net/" target="_self">My homepage <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a>
|
owners.
|
||||||
<a href="https://moonleay.net/blog/" target="_blank">My blog <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a>
|
</p>
|
||||||
<a href="/contact" target="_self">Contact me</a>
|
<p>
|
||||||
<a href="https://status.moonleay.net/" target="_blank">Server Status <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a>
|
li'l Judd © 2022-2024{" "}
|
||||||
<a href="https://discord.gg/HTZRktfH4A" target="_blank">Support Discord <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a>
|
<a href="https://moonleay.net/" target="_blank">
|
||||||
|
moonleay
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</footer>
|
||||||
<div>
|
);
|
||||||
<h3>Legal</h3>
|
}
|
||||||
<div class="footerLinks">
|
|
||||||
<a href="/imprint" target="_self">Imprint</a>
|
export default Footer;
|
||||||
<a href="/privacy-policy" target="_self">Privacy Policy</a>
|
|
||||||
<a href="/terms-of-service" target="_self">Terms of Service</a>
|
|
||||||
<a
|
|
||||||
href="https://git.moonleay.net/DiscordBots/lilJudd/src/branch/master/LICENSE"
|
|
||||||
target="_blank">The license <img src="https://static.moonleay.net/img/lilJuddWeb/logos/external.svg" alt="external link"/></a
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footerNotice">
|
|
||||||
<p>
|
|
||||||
This website is NOT affiliated with Nintendo or any other party. All
|
|
||||||
product names, logos, and brands are property of their respective owners.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
li'l Judd © 2023 <a href="https://moonleay.net/" target="_blank"
|
|
||||||
>moonleay</a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
---
|
import "../styles/components/ImageSection.scss";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
imgUrl: string;
|
imgUrl: string;
|
||||||
imgAlt: string;
|
imgAlt: string;
|
||||||
|
@ -7,15 +8,18 @@ interface Props {
|
||||||
note: string;
|
note: string;
|
||||||
span?: boolean;
|
span?: boolean;
|
||||||
}
|
}
|
||||||
const { imgUrl, imgAlt, title, description, note, span = false } = Astro.props;
|
|
||||||
import "../styles/components/ImageSection.scss";
|
|
||||||
---
|
|
||||||
|
|
||||||
<section class:list={["ImageSection", { span }]}>
|
function ImageSection(props: Props) {
|
||||||
<h1>{title}</h1>
|
return (
|
||||||
<div class="imgDiv">
|
<section classList={{ ImageSection: true, span: props.span ?? true }}>
|
||||||
<img src={imgUrl} alt={imgAlt} />
|
<h1>{props.title}</h1>
|
||||||
<p>{description}</p>
|
<div class="imgDiv">
|
||||||
</div>
|
<img src={props.imgUrl} alt={props.imgAlt} />
|
||||||
<p class="noteP">{note}</p>
|
<p>{props.description}</p>
|
||||||
</section>
|
</div>
|
||||||
|
<p class="noteP">{props.note}</p>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ImageSection;
|
||||||
|
|
|
@ -1,35 +1,42 @@
|
||||||
---
|
import "../styles/components/NavBar.scss";
|
||||||
import '../styles/components/NavBar.scss';
|
|
||||||
---
|
function NavBar() {
|
||||||
<nav>
|
return (
|
||||||
<ul>
|
<nav>
|
||||||
<li class="navElem">
|
<ul>
|
||||||
<a class="textBx" href="/" target="_self">
|
<li class="navElem">
|
||||||
<img
|
<a class="textBx" href="/">
|
||||||
id="logo"
|
<img
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/logos/logox256.png"
|
id="logo"
|
||||||
alt="The Bots Logo"
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/logox256.png"
|
||||||
/>
|
alt="The Bots Logo"
|
||||||
li'l Judd
|
/>
|
||||||
</a>
|
li'l Judd
|
||||||
</li>
|
</a>
|
||||||
<li class="navElem">
|
</li>
|
||||||
<a href="/features" target="_self">Features</a>
|
<li class="navElem">
|
||||||
</li>
|
<a href="/features">Features</a>
|
||||||
<li class="navElem">
|
</li>
|
||||||
<a href="/how-do-i" target="_self">How do I...?</a>
|
<li class="navElem">
|
||||||
</li>
|
<a href="/how-do-i">How do I...?</a>
|
||||||
<li class="navElem">
|
</li>
|
||||||
<a href="/stack" target="_self">The Stack</a>
|
<li class="navElem">
|
||||||
</li>
|
<a href="/stack">The Stack</a>
|
||||||
<li class="navElem">
|
</li>
|
||||||
<a href="/about" target="_self">About</a>
|
<li class="navElem">
|
||||||
</li>
|
<a href="/about">About</a>
|
||||||
<li class="navElem">
|
</li>
|
||||||
<a
|
<li class="navElem">
|
||||||
href="https://discord.com/api/oauth2/authorize?client_id=1024410658973941862&permissions=18977581952080&scope=bot"
|
<a
|
||||||
target="_blank">Invite to your server</a
|
href="https://discord.com/api/oauth2/authorize?client_id=1024410658973941862&permissions=18977581952080&scope=bot"
|
||||||
>
|
target="_blank"
|
||||||
</li>
|
>
|
||||||
</ul>
|
Invite to your server
|
||||||
</nav>
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NavBar;
|
||||||
|
|
10
src/drizzle/index.ts
Normal file
10
src/drizzle/index.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { drizzle } from "drizzle-orm/postgres-js"
|
||||||
|
import postgres from "postgres"
|
||||||
|
import * as schema from "./schema"
|
||||||
|
|
||||||
|
const queryClient = postgres(process.env.DATABASE_URL ?? "")
|
||||||
|
const db = drizzle(queryClient, {
|
||||||
|
schema,
|
||||||
|
})
|
||||||
|
|
||||||
|
export default db
|
139
src/drizzle/schema.ts
Normal file
139
src/drizzle/schema.ts
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
import type { AdapterAccount } from "@auth/core/adapters";
|
||||||
|
import { relations } from "drizzle-orm";
|
||||||
|
import {
|
||||||
|
integer,
|
||||||
|
pgTable,
|
||||||
|
primaryKey,
|
||||||
|
serial,
|
||||||
|
smallint,
|
||||||
|
text,
|
||||||
|
timestamp,
|
||||||
|
varchar,
|
||||||
|
} from "drizzle-orm/pg-core";
|
||||||
|
|
||||||
|
export const users = pgTable("user", {
|
||||||
|
id: text("id").primaryKey(),
|
||||||
|
name: text("name"),
|
||||||
|
email: text("email").notNull(),
|
||||||
|
emailVerified: timestamp("email_verified", { mode: "date" }),
|
||||||
|
image: text("image"),
|
||||||
|
createdAt: timestamp("created_at").defaultNow(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const accounts = pgTable(
|
||||||
|
"account",
|
||||||
|
{
|
||||||
|
userId: text("user_id")
|
||||||
|
.notNull()
|
||||||
|
.references(() => users.id, { onDelete: "cascade" }),
|
||||||
|
type: text("type").$type<AdapterAccount["type"]>().notNull(),
|
||||||
|
provider: text("provider").notNull(),
|
||||||
|
providerAccountId: text("provider_account_id").notNull(),
|
||||||
|
refresh_token: text("refresh_token"),
|
||||||
|
access_token: text("access_token"),
|
||||||
|
expires_at: integer("expires_at"),
|
||||||
|
token_type: text("token_type"),
|
||||||
|
scope: text("scope"),
|
||||||
|
id_token: text("id_token"),
|
||||||
|
session_state: text("session_state"),
|
||||||
|
},
|
||||||
|
(account) => ({
|
||||||
|
compoundKey: primaryKey({
|
||||||
|
columns: [account.provider, account.providerAccountId],
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const sessions = pgTable("session", {
|
||||||
|
sessionToken: text("session_token").primaryKey(),
|
||||||
|
userId: text("user_id")
|
||||||
|
.notNull()
|
||||||
|
.references(() => users.id, { onDelete: "cascade" }),
|
||||||
|
expires: timestamp("expires", { mode: "date" }).notNull(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const verificationTokens = pgTable(
|
||||||
|
"verification_token",
|
||||||
|
{
|
||||||
|
identifier: text("identifier").notNull(),
|
||||||
|
token: text("token").notNull(),
|
||||||
|
expires: timestamp("expires", { mode: "date" }).notNull(),
|
||||||
|
},
|
||||||
|
(vt) => ({
|
||||||
|
compoundKey: primaryKey({ columns: [vt.identifier, vt.token] }),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const matchPlannings = pgTable("match_planning", {
|
||||||
|
id: serial("id").primaryKey(),
|
||||||
|
channelId: varchar("channel_id", { length: 19 }).notNull(),
|
||||||
|
matchtype: varchar("matchtype", { length: 50 }).notNull(),
|
||||||
|
createrId: varchar("creater_id", { length: 19 }).notNull(),
|
||||||
|
roleId: varchar("role_id", { length: 19 }).notNull(),
|
||||||
|
opponentName: varchar("opponent_name", { length: 100 }).notNull(),
|
||||||
|
messageId: varchar("message_id", { length: 19 }).notNull(),
|
||||||
|
plannedFor: timestamp("planned_for", { precision: 3 }).notNull(),
|
||||||
|
guildId: varchar("guild_id", { length: 19 })
|
||||||
|
.notNull()
|
||||||
|
.references(() => guilds.id, { onDelete: "cascade" }),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const matchPlanningsRelations = relations(matchPlannings, ({ one }) => ({
|
||||||
|
guild: one(guilds, {
|
||||||
|
fields: [matchPlannings.guildId],
|
||||||
|
references: [guilds.id],
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
export const guilds = pgTable("guild", {
|
||||||
|
id: varchar("id", { length: 19 }).primaryKey(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const guildsRelations = relations(guilds, ({ one, many }) => ({
|
||||||
|
matches: many(matchPlannings),
|
||||||
|
timePlanning: one(timePlannings, {
|
||||||
|
fields: [guilds.id],
|
||||||
|
references: [timePlannings.guildId],
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
export const timePlannings = pgTable("time_planning", {
|
||||||
|
id: serial("id").primaryKey(),
|
||||||
|
guildId: varchar("guild_id", { length: 19 })
|
||||||
|
.references(() => guilds.id, {
|
||||||
|
onDelete: "cascade",
|
||||||
|
})
|
||||||
|
.notNull()
|
||||||
|
.unique(),
|
||||||
|
channelId: varchar("channel_id", { length: 19 }).notNull(),
|
||||||
|
targetWeekday: smallint("target_weekday").notNull(),
|
||||||
|
targetHour: smallint("target_hour").notNull(),
|
||||||
|
targetMinute: smallint("target_minute").notNull(),
|
||||||
|
isAvailableRoleId: varchar("is_available_role_id", { length: 19 }),
|
||||||
|
wantsToBeNotifieRoledId: varchar("wants_to_be_notified_role_id", {
|
||||||
|
length: 19,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const timePlanningsRelations = relations(
|
||||||
|
timePlannings,
|
||||||
|
({ one, many }) => ({
|
||||||
|
guild: one(tpMessages),
|
||||||
|
messages: many(tpMessages),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const tpMessages = pgTable("tp_message", {
|
||||||
|
messageId: varchar("message_id", { length: 19 }).primaryKey(),
|
||||||
|
day: smallint("day").notNull(),
|
||||||
|
planId: varchar("plan_id", { length: 19 })
|
||||||
|
.notNull()
|
||||||
|
.references(() => timePlannings.guildId, { onDelete: "cascade" }),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const tpMessagesRelations = relations(tpMessages, ({ one }) => ({
|
||||||
|
timePlanning: one(timePlannings, {
|
||||||
|
fields: [tpMessages.messageId],
|
||||||
|
references: [timePlannings.channelId],
|
||||||
|
}),
|
||||||
|
}));
|
3
src/entry-client.tsx
Normal file
3
src/entry-client.tsx
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import { mount, StartClient } from "@solidjs/start/client";
|
||||||
|
|
||||||
|
mount(() => <StartClient />, document.getElementById("app"));
|
20
src/entry-server.tsx
Normal file
20
src/entry-server.tsx
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { createHandler, StartServer } from "@solidjs/start/server";
|
||||||
|
|
||||||
|
export default createHandler(() => (
|
||||||
|
<StartServer
|
||||||
|
document={({ assets, children, scripts }) => (
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
{assets}
|
||||||
|
</head>
|
||||||
|
<body id="app">
|
||||||
|
{children}
|
||||||
|
{scripts}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
));
|
1
src/env.d.ts
vendored
1
src/env.d.ts
vendored
|
@ -1 +0,0 @@
|
||||||
/// <reference types="astro/client" />
|
|
1
src/global.d.ts
vendored
Normal file
1
src/global.d.ts
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/// <reference types="@solidjs/start/env" />
|
22
src/routes/[...404].tsx
Normal file
22
src/routes/[...404].tsx
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import { Title } from "@solidjs/meta";
|
||||||
|
import { HttpStatusCode } from "@solidjs/start";
|
||||||
|
import "../styles/pages/index.scss";
|
||||||
|
|
||||||
|
export default function NotFound() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Title>Not Found</Title>
|
||||||
|
<HttpStatusCode code={404} />
|
||||||
|
<section class="section">
|
||||||
|
<h1>404 - Whoops, ink spill!</h1>
|
||||||
|
<h5>li'l Judd couldn't find this turf.</h5>
|
||||||
|
<div>
|
||||||
|
<p class="p1">
|
||||||
|
Head back to <a href="/">base</a> and splat into action from there!
|
||||||
|
🦑🕹️
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,67 +1,82 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/about.scss";
|
import "../styles/pages/about.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function about() {
|
||||||
<h1>About</h1>
|
return (
|
||||||
<div class="aboutdiv">
|
<>
|
||||||
<section>
|
<div class="aboutdiv">
|
||||||
<h2>Why does this bot exist?</h2>
|
<h1>About</h1>
|
||||||
<p>
|
<section>
|
||||||
We had a person in our team, who sent <a
|
<h2>Why does this bot exist?</h2>
|
||||||
href="https://static.moonleay.net/img/lilJuddWeb/about/oldplanningmsg.png"
|
<p>
|
||||||
target="_blank"
|
We had a person in our team, who sent{" "}
|
||||||
>these planning messages</a
|
<a
|
||||||
> and I thought that this should be automated. Some time later the first
|
href="https://static.moonleay.net/img/lilJuddWeb/about/oldplanningmsg.png"
|
||||||
version of li'l Judd was born. Today the bot has more features and keeps getting more of them! It is
|
target="_blank"
|
||||||
designed to actually improve the Splatoon experience and not be the
|
>
|
||||||
10000th moderation and general utility bot with the same features as all
|
these planning messages
|
||||||
bots.
|
</a>{" "}
|
||||||
</p>
|
and I thought that this should be automated. Some time later the
|
||||||
</section>
|
first version of li'l Judd was born. Today the bot has more features
|
||||||
<section>
|
and keeps getting more of them! It is designed to actually improve
|
||||||
<h2>Who is behind this?</h2>
|
the Splatoon experience and not be the 10000th moderation and
|
||||||
<p>
|
general utility bot with the same features as all bots.
|
||||||
The bot is currently being developed by <a
|
</p>
|
||||||
href="/contact"
|
</section>
|
||||||
target="_self">moonleay</a
|
<section>
|
||||||
> (hey that's me!) with occasional help from his friends!
|
<h2>Who is behind this?</h2>
|
||||||
</p>
|
<p>
|
||||||
</section>
|
The bot is currently being developed by{" "}
|
||||||
<section>
|
<a href="/contact">moonleay</a> (hey that's me!) with
|
||||||
<h2>How can I trust you?</h2>
|
occasional help from his friends!
|
||||||
<p>
|
</p>
|
||||||
The bot only requests permissions, which are needed for it to work. Additionally,
|
</section>
|
||||||
if you want to check how the bot works under the hood, you can
|
<section>
|
||||||
<a href="https://git.moonleay.net/DiscordBots/lilJudd">read the code</a>
|
<h2>How can I trust you?</h2>
|
||||||
and if you still don't trust me, you can always host the bot yourself!
|
<p>
|
||||||
A guide on how to do that can be found in the README of the git project.
|
The bot only requests permissions, which are needed for it to work.
|
||||||
</p>
|
Additionally, if you want to check how the bot works under the hood,
|
||||||
</section>
|
you can
|
||||||
<section>
|
<a href="https://git.moonleay.net/DiscordBots/lilJudd">
|
||||||
<h2>Where is my data stored?</h2>
|
read the code
|
||||||
<p>
|
</a>
|
||||||
Your data is stored on a VPS from Contabo in Germany. The bot used to be hosted on a server in my basement,
|
and if you still don't trust me, you can always host the bot
|
||||||
but I moved it to a VPS, because my internet connection was not stable enough.
|
yourself! A guide on how to do that can be found in the README of
|
||||||
</p>
|
the git project.
|
||||||
</section>
|
</p>
|
||||||
<section>
|
</section>
|
||||||
<h2>So whats in the future?</h2>
|
<section>
|
||||||
<p>
|
<h2>Where is my data stored?</h2>
|
||||||
I plan on adding features, which are aimed to improve your and your teams
|
<p>
|
||||||
competitive experience! You can check out my public todo list <a href="https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban" target="_blank">here</a>.
|
Your data is stored on a VPS from Contabo in Germany. The bot used
|
||||||
</p>
|
to be hosted on a server in my basement, but I moved it to a VPS,
|
||||||
</section>
|
because my internet connection was not stable enough.
|
||||||
<section>
|
</p>
|
||||||
<h2>Hey, there is this really cool idea I have! Can you add it?</h2>
|
</section>
|
||||||
<p>
|
<section>
|
||||||
Just message me! I can't promise anything, but I am always open to new
|
<h2>So whats in the future?</h2>
|
||||||
ideas and improvements! You can find ways to contact me <a
|
<p>
|
||||||
href="/contact"
|
I plan on adding features, which are aimed to improve your and your
|
||||||
target="_self">here</a
|
teams competitive experience! You can check out my public todo list{" "}
|
||||||
>.
|
<a
|
||||||
</p>
|
href="https://todo.moonleay.net/share/OmisuzgPDdsrCAXKjGrTfYzWwqNDNclOMGJWeMsi/auth?view=kanban"
|
||||||
</section>
|
target="_blank"
|
||||||
</div>
|
>
|
||||||
</Layout>
|
here
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Hey, there is this really cool idea I have! Can you add it?</h2>
|
||||||
|
<p>
|
||||||
|
Just message me! I can't promise anything, but I am always open to
|
||||||
|
new ideas and improvements! You can find ways to contact me{" "}
|
||||||
|
<a href="/contact">here</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default about;
|
||||||
|
|
|
@ -1,166 +1,200 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/acknowledgements.scss";
|
import "../styles/pages/acknowledgements.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function acknowledgements() {
|
||||||
<div class="wrapper">
|
return (
|
||||||
<h1>Acknowledgements</h1>
|
<>
|
||||||
<section>
|
<div class="acknowledgements">
|
||||||
<table>
|
<h1>Acknowledgements</h1>
|
||||||
<thead>
|
<section>
|
||||||
<tr>
|
<table>
|
||||||
<th>
|
<thead>
|
||||||
<p>tool</p>
|
<tr>
|
||||||
</th>
|
<th>
|
||||||
<th>
|
<p>tool</p>
|
||||||
<p>license</p>
|
</th>
|
||||||
</th>
|
<th>
|
||||||
<th>
|
<p>license</p>
|
||||||
<p>page</p>
|
</th>
|
||||||
</th>
|
<th>
|
||||||
</tr>
|
<p>page</p>
|
||||||
</thead>
|
</th>
|
||||||
<tbody>
|
</tr>
|
||||||
<tr>
|
</thead>
|
||||||
<td>
|
<tbody>
|
||||||
<p>Kotlin</p>
|
<tr>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
<p>Kotlin</p>
|
||||||
<a
|
</td>
|
||||||
href="https://kotlinlang.org/docs/faq.html#is-kotlin-free"
|
<td>
|
||||||
target="_blank">Apache license 2.0</a
|
<a
|
||||||
>
|
href="https://kotlinlang.org/docs/faq.html#is-kotlin-free"
|
||||||
</td>
|
target="_blank"
|
||||||
<td>
|
>
|
||||||
<a href="https://kotlinlang.org/" target="_blank">website</a>
|
Apache license 2.0
|
||||||
</td>
|
</a>
|
||||||
</tr>
|
</td>
|
||||||
<tr>
|
<td>
|
||||||
<td>
|
<a href="https://kotlinlang.org/" target="_blank">
|
||||||
<p>Kord</p>
|
website
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
<a
|
</tr>
|
||||||
href="https://github.com/kordlib/kord/blob/main/LICENSE"
|
<tr>
|
||||||
target="_blank">MIT license</a
|
<td>
|
||||||
>
|
<p>Kord</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="https://kord.dev/" target="_blank">website</a>
|
<a
|
||||||
</td>
|
href="https://github.com/kordlib/kord/blob/main/LICENSE"
|
||||||
</tr>
|
target="_blank"
|
||||||
<tr>
|
>
|
||||||
<td>
|
MIT license
|
||||||
<p>Kord Extensions</p>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a href="https://kord.dev/" target="_blank">
|
||||||
href="https://github.com/Kord-Extensions/kord-extensions/blob/root/LICENSE"
|
website
|
||||||
target="_blank">Mozilla Public License 2.0</a
|
</a>
|
||||||
>
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<a href="https://kordex.kotlindiscord.com/" target="_blank"
|
<td>
|
||||||
>website</a
|
<p>Kord Extensions</p>
|
||||||
>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
<a
|
||||||
<tr>
|
href="https://github.com/Kord-Extensions/kord-extensions/blob/root/LICENSE"
|
||||||
<td>
|
target="_blank"
|
||||||
<p>PostgreSQL</p>
|
>
|
||||||
</td>
|
Mozilla Public License 2.0
|
||||||
<td>
|
</a>
|
||||||
<a href="https://www.postgresql.org/about/licence/" target="_blank"
|
</td>
|
||||||
>PostgreSQL license</a
|
<td>
|
||||||
>
|
<a href="https://kordex.kotlindiscord.com/" target="_blank">
|
||||||
</td>
|
website
|
||||||
<td>
|
</a>
|
||||||
<a href="https://www.postgresql.org/" target="_blank">website</a>
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
</tr>
|
<tr>
|
||||||
<tr>
|
<td>
|
||||||
<td>
|
<p>PostgreSQL</p>
|
||||||
<p>kotlinx-coroutines-core</p>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
<a
|
||||||
<a
|
href="https://www.postgresql.org/about/licence/"
|
||||||
href="https://github.com/Kotlin/kotlinx.coroutines/blob/master/LICENSE.txt"
|
target="_blank"
|
||||||
target="_blank">Apache license 2.0</a
|
>
|
||||||
>
|
PostgreSQL license
|
||||||
</td>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
<a
|
<td>
|
||||||
href="https://github.com/Kotlin/kotlinx.coroutines"
|
<a href="https://www.postgresql.org/" target="_blank">
|
||||||
target="_blank">repo</a
|
website
|
||||||
>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>slf4j</p>
|
<p>kotlinx-coroutines-core</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a
|
||||||
href="https://github.com/qos-ch/slf4j/blob/master/LICENSE.txt"
|
href="https://github.com/Kotlin/kotlinx.coroutines/blob/master/LICENSE.txt"
|
||||||
target="_blank">MIT license</a
|
target="_blank"
|
||||||
>
|
>
|
||||||
</td>
|
Apache license 2.0
|
||||||
<td>
|
</a>
|
||||||
<a href="https://www.slf4j.org/" target="_blank">website</a>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
<a
|
||||||
<tr>
|
href="https://github.com/Kotlin/kotlinx.coroutines"
|
||||||
<td>
|
target="_blank"
|
||||||
<p>Exposed</p>
|
>
|
||||||
</td>
|
repo
|
||||||
<td>
|
</a>
|
||||||
<a href="https://github.com/JetBrains/Exposed/blob/main/LICENSE.txt"
|
</td>
|
||||||
>Apache license 2.0</a
|
</tr>
|
||||||
>
|
<tr>
|
||||||
</td>
|
<td>
|
||||||
<td>
|
<p>slf4j</p>
|
||||||
<a href="https://github.com/JetBrains/Exposed" target="_blank"
|
</td>
|
||||||
>repo</a
|
<td>
|
||||||
>
|
<a
|
||||||
</td>
|
href="https://github.com/qos-ch/slf4j/blob/master/LICENSE.txt"
|
||||||
</tr>
|
target="_blank"
|
||||||
<tr>
|
>
|
||||||
<td>
|
MIT license
|
||||||
<p>Krontab</p>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a
|
<a href="https://www.slf4j.org/" target="_blank">
|
||||||
href="https://github.com/InsanusMokrassar/krontab/blob/master/LICENSE"
|
website
|
||||||
target="_blank">Apache license 2.0</a
|
</a>
|
||||||
>
|
</td>
|
||||||
</td>
|
</tr>
|
||||||
<td>
|
<tr>
|
||||||
<a
|
<td>
|
||||||
href="https://github.com/InsanusMokrassar/krontab"
|
<p>Exposed</p>
|
||||||
target="_blank">repo</a
|
</td>
|
||||||
>
|
<td>
|
||||||
</td>
|
<a href="https://github.com/JetBrains/Exposed/blob/main/LICENSE.txt">
|
||||||
</tr>
|
Apache license 2.0
|
||||||
<tr>
|
</a>
|
||||||
<td>
|
</td>
|
||||||
<p>Splatoon3.ink</p>
|
<td>
|
||||||
</td>
|
<a
|
||||||
<td>
|
href="https://github.com/JetBrains/Exposed"
|
||||||
<a
|
target="_blank"
|
||||||
href="https://github.com/misenhower/splatoon3.ink/blob/main/license.md"
|
>
|
||||||
target="_blank"
|
repo
|
||||||
>MIT License</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
</tr>
|
||||||
<a
|
<tr>
|
||||||
href="https://splatoon3.ink/"
|
<td>
|
||||||
target="_blank"
|
<p>Krontab</p>
|
||||||
>website</a>
|
</td>
|
||||||
</td>
|
<td>
|
||||||
</tr>
|
<a
|
||||||
</tbody>
|
href="https://github.com/InsanusMokrassar/krontab/blob/master/LICENSE"
|
||||||
</table>
|
target="_blank"
|
||||||
</section>
|
>
|
||||||
</div>
|
Apache license 2.0
|
||||||
</Layout>
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
href="https://github.com/InsanusMokrassar/krontab"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
repo
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>Splatoon3.ink</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
href="https://github.com/misenhower/splatoon3.ink/blob/main/license.md"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
MIT License
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="https://splatoon3.ink/" target="_blank">
|
||||||
|
website
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default acknowledgements;
|
||||||
|
|
4
src/routes/api/auth/[...solidauth].ts
Normal file
4
src/routes/api/auth/[...solidauth].ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import { SolidAuth } from "@auth/solid-start"
|
||||||
|
import { authOptions } from "~/server/auth"
|
||||||
|
|
||||||
|
export const { GET, POST } = SolidAuth(authOptions)
|
85
src/routes/config.tsx
Normal file
85
src/routes/config.tsx
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
function config() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<h1>Configure li'l Judd</h1>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<img src="" alt="Server pfp" />
|
||||||
|
<label>
|
||||||
|
<select>
|
||||||
|
<option value="">--Please choose a server--</option>
|
||||||
|
<option value="server id">Server 1</option>
|
||||||
|
<option value="server id">Server 2</option>
|
||||||
|
<option value="server id">Server 3</option>
|
||||||
|
<option value="server id">Server 4</option>
|
||||||
|
<option value="server id">Server 5</option>
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article>
|
||||||
|
<h2>Timezone</h2>
|
||||||
|
<p>Set the timezone for your server.</p>
|
||||||
|
<label>
|
||||||
|
<select>
|
||||||
|
<option value="-11">UTC-11:00</option>
|
||||||
|
<option value="-10">UTC-10:00</option>
|
||||||
|
<option value="-9">UTC-09:00</option>
|
||||||
|
<option value="-8">UTC-08:00</option>
|
||||||
|
<option value="-7">UTC-07:00</option>
|
||||||
|
<option value="-6">UTC-06:00</option>
|
||||||
|
<option value="-5">UTC-05:00</option>
|
||||||
|
<option value="-4">UTC-04:00</option>
|
||||||
|
<option value="-3">UTC-03:00</option>
|
||||||
|
<option value="-2">UTC-02:00</option>
|
||||||
|
<option value="-1">UTC-01:00</option>
|
||||||
|
<option value="0">UTC+00:00</option>
|
||||||
|
<option value="1">UTC+01:00</option>
|
||||||
|
<option value="2">UTC+02:00</option>
|
||||||
|
<option value="3">UTC+03:00</option>
|
||||||
|
<option value="4">UTC+04:00</option>
|
||||||
|
<option value="5">UTC+05:00</option>
|
||||||
|
<option value="6">UTC+06:00</option>
|
||||||
|
<option value="7">UTC+07:00</option>
|
||||||
|
<option value="8">UTC+08:00</option>
|
||||||
|
<option value="9">UTC+09:00</option>
|
||||||
|
<option value="10">UTC+10:00</option>
|
||||||
|
<option value="11">UTC+11:00</option>
|
||||||
|
<option value="12">UTC+12:00</option>
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</article>
|
||||||
|
<section>
|
||||||
|
<h2>Features</h2>
|
||||||
|
<p>Configure the features of the bot</p>
|
||||||
|
<article>
|
||||||
|
<h3>Time Planning</h3>
|
||||||
|
<input type="checkbox" id="timeplanning" />
|
||||||
|
<p>Make the bot send a planner into a channel</p>
|
||||||
|
<p>Select </p>
|
||||||
|
<label>
|
||||||
|
<select>
|
||||||
|
<option value="id">Channel 1</option>
|
||||||
|
<option value="id">Channel 2</option>
|
||||||
|
<option value="id">Channel 3</option>
|
||||||
|
<option value="id">Channel 4</option>
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</article>
|
||||||
|
<article>
|
||||||
|
<h3>Planning Roles</h3>
|
||||||
|
<input type="checkbox" id="planningroles" />
|
||||||
|
<p>Add roles to the "Time Planning" feature.</p>
|
||||||
|
<p>
|
||||||
|
This feature is bound to the "Time Planning" feature. It will be
|
||||||
|
activated in the same channel.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
<button>Apply</button>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default config;
|
|
@ -1,24 +1,39 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/contact.scss";
|
import "../styles/pages/contact.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function contact() {
|
||||||
<div class="wrapper">
|
return (
|
||||||
<h1>Contact</h1>
|
<>
|
||||||
<section class="contact">
|
<div class="contact">
|
||||||
<a href="mailto:contact@moonleay.net" target="_blank">
|
<h1>Contact</h1>
|
||||||
<img src="https://static.moonleay.net/img/lilJuddWeb/logos/email.svg" alt="Email"/>
|
<section class="contact">
|
||||||
contact@moonleay.net
|
<a href="mailto:contact@moonleay.net" target="_blank">
|
||||||
</a>
|
<img
|
||||||
<a href="https://discord.com/users/372703841151614976" target="_blank">
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/email.svg"
|
||||||
<img src="https://static.moonleay.net/img/lilJuddWeb/logos/discord.svg" alt="Discord"/>
|
alt="Email"
|
||||||
@moonleay
|
/>
|
||||||
</a>
|
contact@moonleay.net
|
||||||
<a href="https://discord.gg/HTZRktfH4A" target="_blank">
|
</a>
|
||||||
<img src="https://static.moonleay.net/img/lilJuddWeb/logos/discord.svg" alt="discord"/>
|
<a
|
||||||
/HTZRktfH4A
|
href="https://discord.com/users/372703841151614976"
|
||||||
</a>
|
target="_blank"
|
||||||
</section>
|
>
|
||||||
</div>
|
<img
|
||||||
</Layout>
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/discord.svg"
|
||||||
|
alt="Discord"
|
||||||
|
/>
|
||||||
|
@moonleay
|
||||||
|
</a>
|
||||||
|
<a href="https://discord.gg/HTZRktfH4A" target="_blank">
|
||||||
|
<img
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/discord.svg"
|
||||||
|
alt="discord"
|
||||||
|
/>
|
||||||
|
li'l Judd's home base
|
||||||
|
</a>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default contact;
|
||||||
|
|
|
@ -1,49 +1,52 @@
|
||||||
---
|
import ImageSection from "~/components/ImageSection";
|
||||||
import ImageSection from "@components/ImageSection.astro";
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/features.scss";
|
import "../styles/pages/features.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function features() {
|
||||||
<div class="container">
|
return (
|
||||||
<h1 class="title">Features</h1>
|
<>
|
||||||
<div class="gridlayout">
|
<div class="features">
|
||||||
<ImageSection
|
<h1 class="title">Features</h1>
|
||||||
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/timeplanner.png"
|
<div class="gridlayout">
|
||||||
imgAlt="Screenshot of the time planning feature of li'l Judd"
|
<ImageSection
|
||||||
title="Time Planning and Management"
|
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/timeplanner.png"
|
||||||
description="Helps you to see on which days your fellow team mates are available."
|
imgAlt="Screenshot of the time planning feature of li'l Judd"
|
||||||
note="The bot can send these planning messages every monday at 3AM. Members can click the buttons on each message to communicate, if they have time on that day."
|
title="Time Planning and Management"
|
||||||
/>
|
description="Helps you to see on which days your fellow team mates are available."
|
||||||
<ImageSection
|
note="The bot can send these planning messages every monday at 3AM. Members can click the buttons on each message to communicate, if they have time on that day."
|
||||||
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/matchplanner.png"
|
/>
|
||||||
imgAlt="Screenshot of the match planning feature of li'l Judd"
|
<ImageSection
|
||||||
title="Match Planner"
|
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/matchplanner.png"
|
||||||
description="Make sure that you know when your next match is and who will participate."
|
imgAlt="Screenshot of the match planning feature of li'l Judd"
|
||||||
note="The bot can send these planning messages, when the command /match is used. Members can click the buttons on each message to communicate, if they will participate in the match. Participating members will get a role until the match has started."
|
title="Match Planner"
|
||||||
/>
|
description="Make sure that you know when your next match is and who will participate."
|
||||||
<ImageSection
|
note="The bot can send these planning messages, when the command /match is used. Members can click the buttons on each message to communicate, if they will participate in the match. Participating members will get a role until the match has started."
|
||||||
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/notifs.png"
|
/>
|
||||||
imgAlt="Screenshot of the notification feature of li'l Judd"
|
<ImageSection
|
||||||
title="Notifications"
|
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/notifs.png"
|
||||||
description="Make sure that you and your team members vote in the Time Planner."
|
imgAlt="Screenshot of the notification feature of li'l Judd"
|
||||||
note="The bot can add roles. The first one gets pinged, when the time planner sends the messages, the other one gets assigned to the available members of the day, so that it is possible to ping all available people."
|
title="Notifications"
|
||||||
/>
|
description="Make sure that you and your team members vote in the Time Planner."
|
||||||
<ImageSection
|
note="The bot can add roles. The first one gets pinged, when the time planner sends the messages, the other one gets assigned to the available members of the day, so that it is possible to ping all available people."
|
||||||
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/rotationstatus.png"
|
/>
|
||||||
imgAlt="Screenshot of the current x map rotation in li'l Judd's status"
|
<ImageSection
|
||||||
title="Rotation Status"
|
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/rotationstatus.png"
|
||||||
description="Li'l Judd can show you the current map rotation in his status."
|
imgAlt="Screenshot of the current x map rotation in li'l Judd's status"
|
||||||
note="The bot cycles through the current map and mode rotation. It updates every few seconds."
|
title="Rotation Status"
|
||||||
/>
|
description="Li'l Judd can show you the current map rotation in his status."
|
||||||
<ImageSection
|
note="The bot cycles through the current map and mode rotation. It updates every few seconds."
|
||||||
span
|
/>
|
||||||
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/unknown.png"
|
<ImageSection
|
||||||
imgAlt="A Question Mark"
|
span
|
||||||
title="More to come.."
|
imgUrl="https://static.moonleay.net/img/lilJuddWeb/features/unknown.png"
|
||||||
description="The bot is still in development. More features will be added."
|
imgAlt="A Question Mark"
|
||||||
note="If you have a specific feature request, you can contact me on Discord: @moonleay or email: contact at moonleay dot net"
|
title="More to come.."
|
||||||
/>
|
description="The bot is still in development. More features will be added."
|
||||||
</div>
|
note="If you have a specific feature request, you can contact me on Discord: @moonleay or email: contact at moonleay dot net"
|
||||||
</div>
|
/>
|
||||||
</Layout>
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default features;
|
||||||
|
|
|
@ -1,40 +1,61 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/how-do-i.scss";
|
import "../styles/pages/how-do-i.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function howDoI() {
|
||||||
<h1 class="title">How do I...?</h1>
|
return (
|
||||||
<section class="section">
|
<>
|
||||||
<h2>.. enable / disable certain features?</h2>
|
<h1 class="hdi-title">How do I...?</h1>
|
||||||
<p>
|
<section class="hdi-section">
|
||||||
Features can be enabled and disables using the <code>/feature</code>
|
<h2>.. enable / disable certain features?</h2>
|
||||||
command.<br />Example:
|
<p>
|
||||||
</p>
|
Features can be enabled and disables using the <code>/feature</code>
|
||||||
<div class="imgwrapper">
|
command.
|
||||||
<img class="desktop"
|
<br />
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/featureexample.png"
|
Example:
|
||||||
alt="A screenshot of the example in Discord."/>
|
</p>
|
||||||
<img class="mobile" src="https://static.moonleay.net/img/lilJuddWeb/howdoi/featureexamplemobile.png" alt="A screenshot of the example in Discord."/>
|
<div class="imgwrapper">
|
||||||
<!--<p><code>/feature feature:Time Planning Feature set:Enable channel:#ich-kann-heute</code></p>-->
|
<img
|
||||||
</div>
|
class="desktop"
|
||||||
</section>
|
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/featureexample.png"
|
||||||
<section class="section">
|
alt="A screenshot of the example in Discord."
|
||||||
<h2>.. create a match?</h2>
|
/>
|
||||||
<p>
|
<img
|
||||||
You can create a match time using the <code>/match</code> command.<br
|
class="mobile"
|
||||||
/>Example:
|
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/featureexamplemobile.png"
|
||||||
</p>
|
alt="A screenshot of the example in Discord."
|
||||||
<div class="imgwrapper">
|
/>
|
||||||
<img class="desktop"
|
{/* <p><code>/feature feature:Time Planning Feature set:Enable channel:#ich-kann-heute</code></p> */}
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/matchexample.png"
|
</div>
|
||||||
alt="A screenshot of the example in Discord."
|
</section>
|
||||||
/>
|
<section class="hdi-section">
|
||||||
<img class="mobile" src="https://static.moonleay.net/img/lilJuddWeb/howdoi/matchexamplemobile.png" alt="A screenshot of the example in Discord."/>
|
<h2>.. create a match?</h2>
|
||||||
<!--<p><code>/match match:Ladder Match timestamp:24.12.2069 04:20 opponent:Forbidden</code></p>-->
|
<p>
|
||||||
</div>
|
You can create a match time using the <code>/match</code> command.
|
||||||
</section>
|
<br />
|
||||||
<section class="footernotesection">
|
Example:
|
||||||
<p>Is something missing here?<br/>Please <a href="/contact" target="_self">contact me</a>!</p>
|
</p>
|
||||||
</section>
|
<div class="imgwrapper">
|
||||||
</Layout>
|
<img
|
||||||
|
class="desktop"
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/matchexample.png"
|
||||||
|
alt="A screenshot of the example in Discord."
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
class="mobile"
|
||||||
|
src="https://static.moonleay.net/img/lilJuddWeb/howdoi/matchexamplemobile.png"
|
||||||
|
alt="A screenshot of the example in Discord."
|
||||||
|
/>
|
||||||
|
{/* <p><code>/match match:Ladder Match timestamp:24.12.2069 04:20 opponent:Forbidden</code></p> */}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="hdi-footernotesection">
|
||||||
|
<p>
|
||||||
|
Is something missing here?
|
||||||
|
<br />
|
||||||
|
Please <a href="/contact">contact me</a>!
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default howDoI;
|
||||||
|
|
|
@ -1,29 +1,61 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/imprint.scss";
|
import "../styles/pages/imprint.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function imprint() {
|
||||||
<section class="wrapper">
|
return (
|
||||||
<h1>Imprint</h1>
|
<>
|
||||||
<p>
|
<section class="imprint">
|
||||||
In accordance with the applicable legal regulations, we would like to
|
<h1>Imprint</h1>
|
||||||
point out that this website is not subject to the imprint obligation. This
|
<section>
|
||||||
notice is for clarification and transparent information for our visitors.
|
<a href="/contact">
|
||||||
<br />
|
<h2>Contact me</h2>
|
||||||
According to § 5 TMG (Telemedia Act), certain providers of telemedia in
|
</a>
|
||||||
Germany are obliged to provide an imprint with certain information. This
|
</section>
|
||||||
obligation applies in particular to commercial websites or those that are
|
<section>
|
||||||
used for business purposes.
|
<h2>Liability for contents</h2>
|
||||||
<br />
|
<p>
|
||||||
However, since this website has no business or commercial character and
|
As a service provider, we are responsible for our own content on
|
||||||
only provides non-commercial, informative or private content, it is not
|
these pages in accordance with general legislation pursuant to
|
||||||
subject to the imprint obligation according to § 5 TMG.
|
Section 7 (1) of the German Telemedia Act (TMG). According to §§ 8
|
||||||
<br />
|
to 10 TMG, however, we are not obligated as a service provider to
|
||||||
Nevertheless, we strive to keep all information on this website correct
|
monitor transmitted or stored third-party information or to
|
||||||
and up-to-date to the best of our knowledge and belief. However, if you
|
investigate circumstances that indicate illegal activity.
|
||||||
have any questions or concerns, please feel free to contact us using the
|
Obligations to remove or block the use of information under the
|
||||||
<a href="/contact" target="_self">contact options</a> provided.
|
general laws remain unaffected. However, liability in this regard is
|
||||||
</p>
|
only possible from the point in time at which a concrete
|
||||||
</section>
|
infringement of the law becomes known. If we become aware of any
|
||||||
</Layout>
|
such infringements, we will remove the relevant content immediately.
|
||||||
|
</p>
|
||||||
|
<h5>
|
||||||
|
Source:{" "}
|
||||||
|
<a href="https://www.e-recht24.de/impressum-generator.html">
|
||||||
|
eRecht24
|
||||||
|
</a>
|
||||||
|
</h5>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Liability for links</h2>
|
||||||
|
<p>
|
||||||
|
Our offer contains links to external websites of third parties, on
|
||||||
|
whose contents we have no influence. Therefore, we cannot assume any
|
||||||
|
liability for these external contents. The respective provider or
|
||||||
|
operator of the pages is always responsible for the content of the
|
||||||
|
linked pages. The linked pages were checked for possible legal
|
||||||
|
violations at the time of linking. Illegal contents were not
|
||||||
|
recognizable at the time of linking. However, a permanent control of
|
||||||
|
the contents of the linked pages is not reasonable without concrete
|
||||||
|
evidence of a violation of the law. If we become aware of any
|
||||||
|
infringements, we will remove such links immediately.{" "}
|
||||||
|
</p>
|
||||||
|
<h5>
|
||||||
|
Source:{" "}
|
||||||
|
<a href="https://www.e-recht24.de/impressum-generator.html">
|
||||||
|
eRecht24
|
||||||
|
</a>
|
||||||
|
</h5>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default imprint;
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
---
|
import "../styles/pages/index.scss";
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import '../styles/pages/index.scss';
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function index() {
|
||||||
<section class="section">
|
return (
|
||||||
<h1>li'l Judd</h1>
|
<>
|
||||||
<h5>The competetive Splatoon Bot</h5>
|
<section class="index">
|
||||||
<div>
|
<h1>li'l Judd</h1>
|
||||||
<p class="p1">Improve your competitive Splatoon experience!</p>
|
<h5>The competetive Splatoon Bot</h5>
|
||||||
<p class="p2">
|
<div>
|
||||||
See what li'l Judd can help you with: <a href="/features">here</a>
|
<p class="p1">Improve your competitive Splatoon experience!</p>
|
||||||
</p>
|
<p class="p2">
|
||||||
</div>
|
See what li'l Judd can help you with: <a href="/features">here</a>
|
||||||
</section>
|
</p>
|
||||||
</Layout>
|
</div>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default index;
|
||||||
|
|
|
@ -1,130 +1,180 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/privacy-policy.scss";
|
import "../styles/pages/privacy-policy.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function privacyPolicy() {
|
||||||
<div class="wrapper">
|
return (
|
||||||
<div>
|
<>
|
||||||
<h1>Privacy Policy for li'l Judd</h1>
|
<div class="privacyPolicy">
|
||||||
<h4>Last updated: 2023-12-05</h4>
|
<div>
|
||||||
</div>
|
<h1>Privacy Policy for li'l Judd</h1>
|
||||||
<section>
|
<h4>Last updated: 2023-12-05</h4>
|
||||||
<h2>1. Introduction</h2>
|
</div>
|
||||||
<p>Welcome to li'l Judd! This Privacy Policy explains how we collect, use, disclose, and safeguard your personal information when you use our Discord bot service.</p>
|
<section>
|
||||||
</section>
|
<h2>1. Introduction</h2>
|
||||||
<section>
|
<p>
|
||||||
<h2>2. Data Controller</h2>
|
Welcome to li'l Judd! This Privacy Policy explains how we
|
||||||
<p>The data controller for the processing of your personal data is: Eric L
|
collect, use, disclose, and safeguard your personal information when
|
||||||
<br/>
|
you use our Discord bot service.
|
||||||
Reachable by email at contact at moonleay dot net (<a href="/contact" target="_self">See contact page.</a>)
|
</p>
|
||||||
</p>
|
</section>
|
||||||
</section>
|
<section>
|
||||||
<section>
|
<h2>2. Data Controller</h2>
|
||||||
<h2>3. Information We Collect</h2>
|
<p>
|
||||||
<h3>3.1 Discord User Data</h3>
|
The data controller for the processing of your personal data is
|
||||||
<p>
|
moonleay.
|
||||||
We may collect and process the following (personal) data related to your Discord account & guilds:
|
<br />
|
||||||
</p>
|
Please note that "moonleay" is primarily used as a username and may
|
||||||
<ul>
|
not directly reflect my legal or real-world identity.
|
||||||
<li>
|
<br />
|
||||||
<p>- Discord User ID</p>
|
You can reach me <a href="/contact">here</a>.
|
||||||
</li>
|
</p>
|
||||||
<li>
|
</section>
|
||||||
<p>- Discord username, discriminator and IDs of users</p>
|
<section>
|
||||||
</li>
|
<h2>3. Information We Collect</h2>
|
||||||
<li>
|
<h3>3.1 Discord User Data</h3>
|
||||||
<p>- Guild name and ID</p>
|
<p>
|
||||||
</li>
|
We may collect and process the following (personal) data related to
|
||||||
<li>
|
your Discord account & guilds:
|
||||||
<p>- Channel names and IDs of channels with active features</p>
|
</p>
|
||||||
</li>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<p>- Message IDs of the bot messages</p>
|
<p>- Discord User ID</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>- Role IDs of created roles</p>
|
<p>- Discord username, discriminator and IDs of users</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li>
|
||||||
<h3>3.2 Usage Data</h3>
|
<p>- Guild name and ID</p>
|
||||||
<p>We may collect information on how you interact with our bot, including but not limited to:</p>
|
</li>
|
||||||
<ul>
|
<li>
|
||||||
<li>
|
<p>- Channel names and IDs of channels with active features</p>
|
||||||
<p>- Commands issued</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p>- Message IDs of the bot messages</p>
|
||||||
<p>- Server and channel information</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p>- Role IDs of created roles</p>
|
||||||
<p>- Timestamps of interactions</p>
|
</li>
|
||||||
</li>
|
</ul>
|
||||||
</ul>
|
<h3>3.2 Usage Data</h3>
|
||||||
</section>
|
<p>
|
||||||
<section>
|
We may collect information on how you interact with our bot,
|
||||||
<h2>4. How we use your Information</h2>
|
including but not limited to:
|
||||||
<p>We process your personal data for the following purposes:</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<p>- To provide and maintain the bot service.</p>
|
<p>- Commands issued</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>- To improve, customize, and optimize our bot.</p>
|
<p>- Server and channel information</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>- To respond to your requests, comments, or inquiries.</p>
|
<p>- Timestamps of interactions</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
</ul>
|
||||||
<p>- To comply with legal obligations.</p>
|
</section>
|
||||||
</li>
|
<section>
|
||||||
</ul>
|
<h2>4. How we use your Information</h2>
|
||||||
</section>
|
<p>We process your personal data for the following purposes:</p>
|
||||||
<section>
|
<ul>
|
||||||
<h2>5. Legal Basis for Processing</h2>
|
<li>
|
||||||
<p>We process your personal data on the following legal bases:</p>
|
<p>- To provide and maintain the bot service.</p>
|
||||||
<ul>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>- Consent: You have given your consent for the processing of your personal data for one or more specific purposes.</p>
|
<p>- To improve, customize, and optimize our bot.</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>- Performance of a contract: The processing is necessary for the performance of the agreement between you and us.</p>
|
<p>- To respond to your requests, comments, or inquiries.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li>
|
||||||
</section>
|
<p>- To comply with legal obligations.</p>
|
||||||
<section>
|
</li>
|
||||||
<h2>6. Data Sharing</h2>
|
</ul>
|
||||||
<p>We do not sell, trade, or otherwise transfer your personal information to third parties. However, we may share your information with:</p>
|
</section>
|
||||||
<ul>
|
<section>
|
||||||
<li>
|
<h2>5. Legal Basis for Processing</h2>
|
||||||
<p>- Third-party service providers involved in the operation and maintenance of the bot.</p>
|
<p>We process your personal data on the following legal bases:</p>
|
||||||
</li>
|
<ul>
|
||||||
</ul>
|
<li>
|
||||||
</section>
|
<p>
|
||||||
<section>
|
- Consent: You have given your consent for the processing of
|
||||||
<h2>7. Data Security</h2>
|
your personal data for one or more specific purposes.
|
||||||
<p>We implement reasonable security measures to protect your personal information from unauthorized access, disclosure, alteration, and destruction.</p>
|
</p>
|
||||||
</section>
|
</li>
|
||||||
<section>
|
<li>
|
||||||
<h2>8. Your Rights</h2>
|
<p>
|
||||||
<p>You have the following rights regarding your personal data:</p>
|
- Performance of a contract: The processing is necessary for the
|
||||||
<ul>
|
performance of the agreement between you and us.
|
||||||
<li>
|
</p>
|
||||||
<p>- Right to withdraw consent: You have the right to withdraw your consent at any time. You can do this by contacting us at contact@moonleay.net.</p>
|
</li>
|
||||||
</li>
|
</ul>
|
||||||
<li>
|
</section>
|
||||||
<p>- Right to rectification: You can request corrections to inaccurate or incomplete information.</p>
|
<section>
|
||||||
</li>
|
<h2>6. Data Sharing</h2>
|
||||||
<li>
|
<p>
|
||||||
<p>- Right to erasure: You can request the deletion of your personal data.</p>
|
We do not sell, trade, or otherwise transfer your personal
|
||||||
</li>
|
information to third parties. However, we may share your information
|
||||||
</ul>
|
with:
|
||||||
</section>
|
</p>
|
||||||
<section>
|
<ul>
|
||||||
<h2>9. Changes to this Privacy Policy</h2>
|
<li>
|
||||||
<p>We may update this Privacy Policy to reflect changes in our practices. The updated version will be posted on https://liljudd.ink/privacy-policy.</p>
|
<p>
|
||||||
</section>
|
- Third-party service providers involved in the operation and
|
||||||
<section>
|
maintenance of the bot.
|
||||||
<h2>10. Contact Information</h2>
|
</p>
|
||||||
<p>If you have any questions or concerns about this Privacy Policy, please contact us at contact@moonleay.net.</p>
|
</li>
|
||||||
</section>
|
</ul>
|
||||||
</div>
|
</section>
|
||||||
</Layout>
|
<section>
|
||||||
|
<h2>7. Data Security</h2>
|
||||||
|
<p>
|
||||||
|
We implement reasonable security measures to protect your personal
|
||||||
|
information from unauthorized access, disclosure, alteration, and
|
||||||
|
destruction.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>8. Your Rights</h2>
|
||||||
|
<p>You have the following rights regarding your personal data:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
- Right to withdraw consent: You have the right to withdraw your
|
||||||
|
consent at any time. You can do this by contacting us at
|
||||||
|
contact@moonleay.net.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
- Right to rectification: You can request corrections to
|
||||||
|
inaccurate or incomplete information.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>
|
||||||
|
- Right to erasure: You can request the deletion of your
|
||||||
|
personal data.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>9. Changes to this Privacy Policy</h2>
|
||||||
|
<p>
|
||||||
|
We may update this Privacy Policy to reflect changes in our
|
||||||
|
practices. The updated version will be posted on
|
||||||
|
https://liljudd.ink/privacy-policy.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>10. Contact Information</h2>
|
||||||
|
<p>
|
||||||
|
If you have any questions or concerns about this Privacy Policy,
|
||||||
|
please contact us at contact@moonleay.net.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default privacyPolicy;
|
||||||
|
|
|
@ -1,58 +1,63 @@
|
||||||
---
|
import "../styles/pages/stack.scss";
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/stack.scss"
|
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function stack() {
|
||||||
<h1 class="title">The Stack</h1>
|
return (
|
||||||
<section class="stacksection">
|
<>
|
||||||
<img
|
<h1 class="stack-title">The Stack</h1>
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/logos/kotlin.svg"
|
<section class="stack-section">
|
||||||
alt="Kotlin 'K' logo"
|
<img
|
||||||
/>
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/kotlin.svg"
|
||||||
<div class="stackgrid_3 stackitm">
|
alt="Kotlin 'K' logo"
|
||||||
<h1>The Kotlin programming language</h1>
|
/>
|
||||||
<p>
|
<div class="stackgrid_3 stackitm">
|
||||||
A programming language, which runs in the JVM. Also my main language.
|
<h1>The Kotlin programming language</h1>
|
||||||
</p>
|
<p>
|
||||||
</div>
|
A programming language, which runs in the JVM. Also my main
|
||||||
</section>
|
language.
|
||||||
<section class="stacksection">
|
</p>
|
||||||
<img
|
</div>
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/logos/kord.png"
|
</section>
|
||||||
alt="The Kord logo"
|
<section class="stack-section">
|
||||||
/>
|
<img
|
||||||
<div class="stackgrid_3 stackitm">
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/kord.png"
|
||||||
<h1>The Kord library</h1>
|
alt="The Kord logo"
|
||||||
<p>A Kotlin library for creating Discord bots. Pretty bare bones.</p>
|
/>
|
||||||
</div>
|
<div class="stackgrid_3 stackitm">
|
||||||
</section>
|
<h1>The Kord library</h1>
|
||||||
<section class="stacksection">
|
<p>A Kotlin library for creating Discord bots. Pretty bare bones.</p>
|
||||||
<img
|
</div>
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/logos/kordextensions.png"
|
</section>
|
||||||
alt="The Kord-Extensions logo"
|
<section class="stack-section">
|
||||||
/>
|
<img
|
||||||
<div class="stackgrid_3 stackitm">
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/kordextensions.png"
|
||||||
<h1>The Kord Extensions library</h1>
|
alt="The Kord-Extensions logo"
|
||||||
<p>A Kotlin library to improve the Kord experience.</p>
|
/>
|
||||||
</div>
|
<div class="stackgrid_3 stackitm">
|
||||||
</section>
|
<h1>The Kord Extensions library</h1>
|
||||||
<section class="stacksection">
|
<p>A Kotlin library to improve the Kord experience.</p>
|
||||||
<img
|
</div>
|
||||||
src="https://static.moonleay.net/img/lilJuddWeb/logos/pgelephant.png"
|
</section>
|
||||||
alt="The PostgreSQL elephant"
|
<section class="stack-section">
|
||||||
/>
|
<img
|
||||||
<div class="stackgrid_3 stackitm">
|
src="https://static.moonleay.net/img/lilJuddWeb/logos/pgelephant.png"
|
||||||
<h1>The PostgreSQL database</h1>
|
alt="The PostgreSQL elephant"
|
||||||
<p>
|
/>
|
||||||
A fast and reliable database. Also something, which I already used
|
<div class="stackgrid_3 stackitm">
|
||||||
beforehand.
|
<h1>The PostgreSQL database</h1>
|
||||||
</p>
|
<p>
|
||||||
</div>
|
A fast and reliable database. Also something, which I already used
|
||||||
</section>
|
beforehand.
|
||||||
<section class="stacknote">
|
</p>
|
||||||
<p>
|
</div>
|
||||||
To view all used libraries and their licenses, check the <a href="/acknowledgements">Acknowledgements</a>.
|
</section>
|
||||||
</p>
|
<section class="stack-note">
|
||||||
</section>
|
<p>
|
||||||
</Layout>
|
To view all used libraries and their licenses, check the{" "}
|
||||||
|
<a href="/acknowledgements">Acknowledgements</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default stack;
|
||||||
|
|
|
@ -1,52 +1,97 @@
|
||||||
---
|
|
||||||
import Layout from "@layouts/Layout.astro";
|
|
||||||
import "../styles/pages/terms-of-service.scss";
|
import "../styles/pages/terms-of-service.scss";
|
||||||
---
|
|
||||||
|
|
||||||
<Layout>
|
function termsOfService() {
|
||||||
<div class="wrapper">
|
return (
|
||||||
<h1>Terms of Service</h1>
|
<>
|
||||||
<div>
|
<div class="termsOfService">
|
||||||
<h2>Usage Agreement</h2>
|
<h1>Terms of Service</h1>
|
||||||
<p>
|
<div>
|
||||||
By inviting the bot and using its features (commands, planning system) are you agreeing to the below mentioned Terms and Privacy Policy (Policy) of the bot.<br/>
|
<h2>Usage Agreement</h2>
|
||||||
|
<p>
|
||||||
|
By inviting the bot and using its features (commands, planning
|
||||||
|
system) are you agreeing to the below mentioned Terms and Privacy
|
||||||
|
Policy (Policy) of the bot.
|
||||||
|
<br />
|
||||||
|
You acknowledge that you have the privilege to use the bot freely on
|
||||||
|
any Discord Server (Server) you share with it, that you can invite
|
||||||
|
it to any Server that you have "Manage Server" rights for and that
|
||||||
|
this privilege might get revoked for you, if you're subject of
|
||||||
|
breaking the terms and/or policy of this bot, or the{" "}
|
||||||
|
<a href="https://discord.com/terms" target="_blank">
|
||||||
|
Terms of Service
|
||||||
|
</a>
|
||||||
|
,{" "}
|
||||||
|
<a href="https://discord.com/privacy" target="_blank">
|
||||||
|
Privacy Policy
|
||||||
|
</a>{" "}
|
||||||
|
and/or{" "}
|
||||||
|
<a href="https://discord.com/guidelines" target="_blank">
|
||||||
|
Community Guidelines
|
||||||
|
</a>{" "}
|
||||||
|
of{" "}
|
||||||
|
<a href="https://discord.com/" target="_blank">
|
||||||
|
Discord Inc
|
||||||
|
</a>
|
||||||
|
.<br />
|
||||||
|
Through Inviting the bot may it collect specific data as described
|
||||||
|
in its Policy.
|
||||||
|
<br />
|
||||||
|
The intended usage of this data is for core functionalities of the
|
||||||
|
bot such as command handling, guild-specific settings and the
|
||||||
|
time-planning system.
|
||||||
|
<br />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Intended Age</h2>
|
||||||
|
<p>
|
||||||
|
The bot may not be used by individuals under the minimal age
|
||||||
|
described in Discord's Terms of Service.
|
||||||
|
<br />
|
||||||
|
Doing so will be seen as a violation of these terms and will result
|
||||||
|
in a removal of the bot from any servers you own.
|
||||||
|
<br />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Affiliation</h2>
|
||||||
|
<p>
|
||||||
|
The Bot is not affiliated with, supported or made by Discord Inc.
|
||||||
|
<br />
|
||||||
|
Any direct connection to Discord or any of its Trademark objects is
|
||||||
|
purely coincidental. We do not claim to have the copyright ownership
|
||||||
|
of any of Discord's assets, trademarks or other intellectual
|
||||||
|
property.
|
||||||
|
<br />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Liability</h2>
|
||||||
|
<p>
|
||||||
|
The owner of the bot may not be made liable for individuals breaking
|
||||||
|
these Terms at any given time.
|
||||||
|
<br />
|
||||||
|
He has faith in the end users being truthfull about their
|
||||||
|
information and not misusing this bot or the services of Discord Inc
|
||||||
|
in a malicious way.
|
||||||
|
<br />
|
||||||
|
We reserve the right to update these terms at our own discretion,
|
||||||
|
giving you a 1-Week (7 days) period to opt out of these terms if
|
||||||
|
you're not agreeing with the new changes. You may opt out by
|
||||||
|
Removing the bot from any Server you have the rights for.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Contact</h2>
|
||||||
|
<p>
|
||||||
|
People may get in contact through e-mail at contact@moonleay.net, or
|
||||||
|
through the official Support Discord of the Bot. Other ways of
|
||||||
|
support may be provided but aren't guaranteed.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
You acknowledge that you have the privilege to use the bot freely on any Discord Server (Server) you share with it, that you can invite it to any Server that you have "Manage Server" rights for and that this privilege might get revoked for you, if you're subject of breaking the terms and/or policy of this bot, or the <a href="https://discord.com/terms" target="_blank">Terms of Service</a>, <a href="https://discord.com/privacy" target="_blank">Privacy Policy</a> and/or <a href="https://discord.com/guidelines" target="_blank">Community Guidelines</a> of <a href="https://discord.com/" target="_blank">Discord Inc</a>.<br/>
|
export default termsOfService;
|
||||||
|
|
||||||
Through Inviting the bot may it collect specific data as described in its Policy.<br/>
|
|
||||||
The intended usage of this data is for core functionalities of the bot such as command handling, guild-specific settings and the time-planning system.<br/>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h2>Intended Age</h2>
|
|
||||||
<p>
|
|
||||||
The bot may not be used by individuals under the minimal age described in Discord's Terms of Service.<br/>
|
|
||||||
Doing so will be seen as a violation of these terms and will result in a removal of the bot from any servers you own.<br/>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h2>Affiliation</h2>
|
|
||||||
<p>
|
|
||||||
The Bot is not affiliated with, supported or made by Discord Inc.<br/>
|
|
||||||
Any direct connection to Discord or any of its Trademark objects is purely coincidental. We do not claim to have the copyright ownership of any of Discord's assets, trademarks or other intellectual property.<br/>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h2>Liability</h2>
|
|
||||||
<p>
|
|
||||||
The owner of the bot may not be made liable for individuals breaking these Terms at any given time.<br/>
|
|
||||||
He has faith in the end users being truthfull about their information and not misusing this bot or the services of Discord Inc in a malicious way.<br/>
|
|
||||||
|
|
||||||
We reserve the right to update these terms at our own discretion, giving you a 1-Week (7 days) period to opt out of these terms if you're not agreeing with the new changes.
|
|
||||||
You may opt out by Removing the bot from any Server you have the rights for.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h2>Contact</h2>
|
|
||||||
<p>
|
|
||||||
People may get in contact through e-mail at contact@moonleay.net, or through the official Support Discord of the Bot.
|
|
||||||
Other ways of support may be provided but aren't guaranteed.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</Layout>
|
|
||||||
|
|
26
src/server/auth.ts
Normal file
26
src/server/auth.ts
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import Discord from "@auth/core/providers/discord";
|
||||||
|
import { DrizzleAdapter } from "@auth/drizzle-adapter";
|
||||||
|
import { type SolidAuthConfig } from "@auth/solid-start";
|
||||||
|
import db from "~/drizzle";
|
||||||
|
|
||||||
|
export const authOptions: SolidAuthConfig = {
|
||||||
|
providers: [
|
||||||
|
{
|
||||||
|
...Discord({
|
||||||
|
clientId: process.env.DISCORD_CLIENT_ID,
|
||||||
|
clientSecret: process.env.DISCORD_CLIENT_SECRET,
|
||||||
|
}),
|
||||||
|
authorization:
|
||||||
|
"https://discord.com/api/oauth2/authorize?scope=identify+email+guilds+guilds.members.read",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
adapter: DrizzleAdapter(db),
|
||||||
|
secret: process.env.AUTH_SECRET,
|
||||||
|
pages: {
|
||||||
|
// signIn: "/signin",
|
||||||
|
// signOut: "/signout",
|
||||||
|
// error: '/auth/error', // Error code passed in query string as ?error=
|
||||||
|
// verifyRequest: '/auth/verify-request', // (used for check email message)
|
||||||
|
// newUser: '/auth/new-user' // New users will be directed here on first sign in (leave the property out if not of interest)
|
||||||
|
},
|
||||||
|
};
|
|
@ -24,16 +24,16 @@ footer {
|
||||||
}
|
}
|
||||||
|
|
||||||
.footerTable {
|
.footerTable {
|
||||||
padding: 20px;
|
padding: 15px;
|
||||||
display: grid;
|
display: grid;
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 800px) {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 0;
|
gap: 0;
|
||||||
div {
|
div {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 769px) {
|
@media (min-width: 801px) {
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
}
|
}
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
max-width: 90vw;
|
||||||
|
|
||||||
@media (min-width: 1150px) {
|
@media (min-width: 1150px) {
|
||||||
max-width: 80vw;
|
max-width: 80vw;
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
h1 {
|
|
||||||
font-size: 3rem;
|
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aboutdiv {
|
.aboutdiv {
|
||||||
max-width: 1100px;
|
max-width: 1100px;
|
||||||
margin: 1rem auto;
|
margin: 1rem auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 3rem;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.wrapper {
|
.acknowledgements {
|
||||||
h1 {
|
h1 {
|
||||||
@media (min-width: 420px) {
|
@media (min-width: 420px) {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
|
@ -11,7 +11,8 @@
|
||||||
section {
|
section {
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
|
|
||||||
p, a {
|
p,
|
||||||
|
a {
|
||||||
@media (max-width: 420px) {
|
@media (max-width: 420px) {
|
||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.wrapper {
|
.contact {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.container {
|
.features {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
.title {
|
.hdi-title {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 1.2rem;
|
margin-bottom: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.section {
|
.hdi-section {
|
||||||
max-width: 1100px;
|
max-width: 1100px;
|
||||||
margin: 1rem auto;
|
margin: 1rem auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.footernotesection {
|
.hdi-footernotesection {
|
||||||
max-width: 1100px;
|
max-width: 1100px;
|
||||||
margin: 1rem auto;
|
margin: 1rem auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -62,4 +62,3 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
.wrapper {
|
.imprint {
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 1.2rem;
|
margin-bottom: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
section {
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
|
@ -16,17 +16,20 @@
|
||||||
margin: 1rem auto;
|
margin: 1rem auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
|
||||||
color: white;
|
|
||||||
text-decoration: underline;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
transition: 0.5s;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: rgb(96 59 255) !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: white;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: 0.5s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: rgb(96 59 255) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.section {
|
.index {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
@ -15,23 +15,25 @@
|
||||||
|
|
||||||
div {
|
div {
|
||||||
margin-top: 1.5rem;
|
margin-top: 1.5rem;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.p1 {
|
.p1 {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.p2 {
|
.p2 {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
a {
|
}
|
||||||
font-weight: bolder;
|
|
||||||
text-decoration: underline;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
transition: 0.5s;
|
|
||||||
|
|
||||||
&:hover {
|
.p1 a,
|
||||||
color: rgb(96 59 255) !important;
|
.p2 a {
|
||||||
|
font-weight: bolder;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: 0.5s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: rgb(96 59 255) !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
.wrapper {
|
.privacyPolicy {
|
||||||
div {
|
div {
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
h4{
|
h4 {
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 1.2rem;
|
margin-bottom: 1.2rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
.title {
|
.stack-title {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 1.2rem;
|
margin-bottom: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacksection {
|
.stack-section {
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacknote {
|
.stack-note {
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.wrapper {
|
.termsOfService {
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
@ -1,10 +1,19 @@
|
||||||
{
|
{
|
||||||
"extends": "astro/tsconfigs/strict",
|
"compilerOptions": {
|
||||||
"compilerOptions": {
|
"target": "ESNext",
|
||||||
"baseUrl": ".",
|
"module": "ESNext",
|
||||||
"paths": {
|
"moduleResolution": "node",
|
||||||
"@components/*": ["src/components/*"],
|
"allowSyntheticDefaultImports": true,
|
||||||
"@layouts/*": ["src/layouts/*"]
|
"esModuleInterop": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"jsxImportSource": "solid-js",
|
||||||
|
"allowJs": true,
|
||||||
|
"strict": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"types": ["vinxi/client"],
|
||||||
|
"isolatedModules": true,
|
||||||
|
"paths": {
|
||||||
|
"~/*": ["./src/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
vite.config.ts
Normal file
3
vite.config.ts
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import { defineConfig } from "@solidjs/start/config";
|
||||||
|
|
||||||
|
export default defineConfig({});
|
Loading…
Reference in a new issue