Updated patchnotes site to use astro

This commit is contained in:
Toastie 2024-01-19 23:55:32 +13:00
parent 3e30057b7a
commit 607c0b65df
Signed by: toastie_t0ast
GPG key ID: 27F3B6855AFD40A4
60 changed files with 3775 additions and 7416 deletions

203
.astro/types.d.ts vendored Normal file
View file

@ -0,0 +1,203 @@
declare module 'astro:content' {
interface Render {
'.md': Promise<{
Content: import('astro').MarkdownInstance<{}>['Content'];
headings: import('astro').MarkdownHeading[];
remarkPluginFrontmatter: Record<string, any>;
}>;
}
}
declare module 'astro:content' {
export { z } from 'astro/zod';
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
export type CollectionKey = keyof AnyEntryMap;
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
export type ContentCollectionKey = keyof ContentEntryMap;
export type DataCollectionKey = keyof DataEntryMap;
// This needs to be in sync with ImageMetadata
export type ImageFunction = () => import('astro/zod').ZodObject<{
src: import('astro/zod').ZodString;
width: import('astro/zod').ZodNumber;
height: import('astro/zod').ZodNumber;
format: import('astro/zod').ZodUnion<
[
import('astro/zod').ZodLiteral<'png'>,
import('astro/zod').ZodLiteral<'jpg'>,
import('astro/zod').ZodLiteral<'jpeg'>,
import('astro/zod').ZodLiteral<'tiff'>,
import('astro/zod').ZodLiteral<'webp'>,
import('astro/zod').ZodLiteral<'gif'>,
import('astro/zod').ZodLiteral<'svg'>,
import('astro/zod').ZodLiteral<'avif'>,
]
>;
}>;
type BaseSchemaWithoutEffects =
| import('astro/zod').AnyZodObject
| import('astro/zod').ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]>
| import('astro/zod').ZodDiscriminatedUnion<string, import('astro/zod').AnyZodObject[]>
| import('astro/zod').ZodIntersection<BaseSchemaWithoutEffects, BaseSchemaWithoutEffects>;
type BaseSchema =
| BaseSchemaWithoutEffects
| import('astro/zod').ZodEffects<BaseSchemaWithoutEffects>;
export type SchemaContext = { image: ImageFunction };
type DataCollectionConfig<S extends BaseSchema> = {
type: 'data';
schema?: S | ((context: SchemaContext) => S);
};
type ContentCollectionConfig<S extends BaseSchema> = {
type?: 'content';
schema?: S | ((context: SchemaContext) => S);
};
type CollectionConfig<S> = ContentCollectionConfig<S> | DataCollectionConfig<S>;
export function defineCollection<S extends BaseSchema>(
input: CollectionConfig<S>
): CollectionConfig<S>;
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
ContentEntryMap[C]
>['slug'];
export function getEntryBySlug<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
// Note that this has to accept a regular string too, for SSR
entrySlug: E
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
collection: C,
entryId: E
): Promise<CollectionEntry<C>>;
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
collection: C,
filter?: (entry: CollectionEntry<C>) => entry is E
): Promise<E[]>;
export function getCollection<C extends keyof AnyEntryMap>(
collection: C,
filter?: (entry: CollectionEntry<C>) => unknown
): Promise<CollectionEntry<C>[]>;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(entry: {
collection: C;
slug: E;
}): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(entry: {
collection: C;
id: E;
}): E extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof ContentEntryMap,
E extends ValidContentEntrySlug<C> | (string & {}),
>(
collection: C,
slug: E
): E extends ValidContentEntrySlug<C>
? Promise<CollectionEntry<C>>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(
collection: C,
id: E
): E extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
/** Resolve an array of entry references from the same collection */
export function getEntries<C extends keyof ContentEntryMap>(
entries: {
collection: C;
slug: ValidContentEntrySlug<C>;
}[]
): Promise<CollectionEntry<C>[]>;
export function getEntries<C extends keyof DataEntryMap>(
entries: {
collection: C;
id: keyof DataEntryMap[C];
}[]
): Promise<CollectionEntry<C>[]>;
export function reference<C extends keyof AnyEntryMap>(
collection: C
): import('astro/zod').ZodEffects<
import('astro/zod').ZodString,
C extends keyof ContentEntryMap
? {
collection: C;
slug: ValidContentEntrySlug<C>;
}
: {
collection: C;
id: keyof DataEntryMap[C];
}
>;
// Allow generic `string` to avoid excessive type errors in the config
// if `dev` is not running to update as you edit.
// Invalid collection names will be caught at build time.
export function reference<C extends string>(
collection: C
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
>;
type ContentEntryMap = {
"releases": {
"4_3_17.md": {
id: "4_3_17.md";
slug: "4_3_17";
body: string;
collection: "releases";
data: InferEntrySchema<"releases">
} & { render(): Render[".md"] };
"4_3_18.md": {
id: "4_3_18.md";
slug: "4_3_18";
body: string;
collection: "releases";
data: InferEntrySchema<"releases">
} & { render(): Render[".md"] };
};
};
type DataEntryMap = {
};
type AnyEntryMap = ContentEntryMap & DataEntryMap;
type ContentConfig = typeof import("../src/content/config");
}

View file

@ -1,37 +0,0 @@
name: Deploy to GitHub Pages
on:
push:
branches: [main]
paths: [website/**]
jobs:
deploy:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
cache: yarn
- name: Build website
working-directory: website
run: |
yarn install --frozen-lockfile
yarn build
# Popular action to deploy to GitHub Pages:
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Build output to publish to the `gh-pages` branch:
publish_dir: ./website/build
# Assign commit authorship to the official GH-Actions bot for deploys to `gh-pages` branch:
# https://github.com/actions/checkout/issues/13#issuecomment-724415212
# The GH actions bot is used by default if you didn't specify the two fields.
# You can swap them out with your own user credentials.
user_name: github-actions[bot]
user_email: 41898282+github-actions[bot]@users.noreply.github.com

View file

@ -1,22 +0,0 @@
name: Test deployment
on:
pull_request:
branches: [main]
paths: [website/**]
jobs:
test-deploy:
name: Test deployment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14.x
cache: yarn
- name: Test build
working-directory: website
run: |
yarn install --frozen-lockfile
yarn build

21
.gitignore vendored
View file

@ -1,20 +1 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
node_modules

View file

@ -1,3 +1,3 @@
# ellie-patchnotes
# Ellie Patchnotes
[![Netlify Status](https://api.netlify.com/api/v1/badges/6819b1e5-ef88-4867-86fd-862281cda04d/deploy-status)](https://app.netlify.com/sites/ellie-patchnotes/deploys)
## Release notes site built with Astro

6
astro.config.mjs Normal file
View file

@ -0,0 +1,6 @@
import { defineConfig } from 'astro/config';
// https://astro.build/config
export default defineConfig({
site: 'https://notes.elliebot.net',
});

View file

@ -1,3 +0,0 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

View file

@ -1,48 +0,0 @@
---
slug: 4.1.3-patch-notes
title: 4.1.3 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Added
- Added support for embed arrays in commands such as 'say, 'greet, 'bye, etc...
- Website to create them is live at https://eb.elliebot.net (old one is moved to https://oldeb.elliebot.net)
- Embed arrays don't have a plainText property (it's renamed to 'content')
- Embed arrays use color hex values instead of an integer
- Old embed format will still work
- There shouldn't be any breaking changes
- Added `'stondel` command which, when toggled, will make the bot delete online stream messages on the server when the stream goes offline
- Added a simple bank system.
- Users can deposit, withdraw and check the balance of their currency in the bank.
- Users can't check other user's bank balances.
- Added a button on a '$ command which, when clicked, sends you a message with your bank balance that only you can see.
- Added `'h <command group>`
- Using this command will list all commands in the specified group
- Atm only 'bank is a proper group (`'h bank`)
- Added "Bank Accounts" entry to `'economy`
### Changed
- Reaction roles rewritten completely
- Supports multiple exclusivity groups per message
- Supports level requirements
- However they can only be added one by one
- Use the following commands for more information
- `'h 'reroa`
- `'h 'reroli`
- `'h 'rerot`
- `'h 'rerorm`
- `'h 'rerodela`
- Pagination is now using buttons instead of reactions
- Bot will now support much higher XP values for global and server levels
### Fixed
- Fixed `'deletexp` command
- `'give` command should send DMs again
- `'modules` command now has a medusa module description

View file

@ -1,10 +0,0 @@
---
slug: 4.1.4-patch-notes
title: 4.1.4 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- Fixed `'yun`

View file

@ -1,17 +0,0 @@
---
slug: 4.1.5-patch-notes
title: 4.1.5 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Changed
- `'clubdesc <msg>` will now have a nicer response
### Fixed
- `'give` DM will once again show an amount
- Fixed an issue with filters not working and with custom reactions no longer being able to override commands.
- Fixed `'stock` command

View file

@ -1,8 +0,0 @@
---
slug: 4.1.6-patch-notes
title: 4.1.6 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
Not anything to mention in this update to list as a patch note

View file

@ -1,32 +0,0 @@
---
slug: 4.3.10-patch-notes
title: 4.3.10 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
Here are the current patch notes for Ellie
## Added
- 'filterlist / 'fl command which lists link and invite filtering channels and status
- Added support for %target% placeholder in 'alias command
- Added 'forwardtochannel which will forward messages to the current channel. It has lower priority than fwtoall
- Added 'exprtoggleglobal / 'extg which can be used to toggle usage of global expressions on the server
## Changed
- Several club related command have their error messages improved
- Updated help text for 'antispam and 'antiraid
- You can now specify time and date (time is optional) in .remind command instead of relative time, in the format HH:mm dd.MM.YYYY
## Fixed
- Fixed 'cmdcd console error
- Fixed an error when currency is add per xp
- Fixed 'feedadd
- Fixed 'prune @target not working
- Fixed command cooldown calculation

View file

@ -1,12 +0,0 @@
---
slug: small-update
title: Small update on things
authors: [EmotionChild]
tags: [Update]
---
Hey guys sorry for the lack of patch notes I have been really busy with IRL stuff hopefully I can get back into writing the patch notes and publishing them again I am sorry for the lack of posts here and I plan on changing that
Thanks for reading,
EmotionChild

View file

@ -1,38 +0,0 @@
---
slug: 4.3.11-patch-notes
title: 4.3.11 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Added
- Added `'stickeradd` command
### Changed
- `'waifuinfo` optimized
- You can now specify an optional custom message in `'feed` and `'yun` which will be posted along with an update
- Greet/bye messages will now get disabled if they're set to a deleted/unknown channel
- Updated response strings
- `'translate` now supports many more languages
- `'translangs` prettier output
### Fixed
- Added logging for thread events
- Fixed a bug for `'quotedeleteauthor` causing the executing user to delete own messages
- Fixed TimeOut punishment not alklowing duration
- Fixed a nullref in streamrole service
- Fixed some potential causes for ratelimit due to default message retry settings
- Fixed a patron rewards bug caused by monthly donation checking not accounting for year increase
- Fixed a patron rewards bug for users who connected the same discord account with multiple patreon accounts
- `'deletecurrency` will now also reset banked currency
- Fixed DMHelpText reply
- `'h` command show now properly show both channel and server user permission requirements
- Many fixes and improvements to medusa system
- Fixed trivia --nohint
- `'joinrace` will no longer fail if the user isn't in the database yet

View file

@ -1,12 +0,0 @@
---
slug: 4.3.12-patch-notes
title: 4.3.12 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- Fixed `'betstats` not working on european locales
- Timed `'ban` will work on users who are not in the server
- Fixed some general bugs

View file

@ -1,12 +0,0 @@
---
slug: 4.3.13-patch-notes
title: 4.3.13 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- Fixed `'log` userpresence
- `'q` will now use yt-dlp if anything other than ytProvider: Ytdl is set in data/searches.yml
- Fixed Title links on some embeds

View file

@ -1,13 +0,0 @@
---
slug: 4.3.14-patch-notes
title: 4.3.14 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- `'banktake` had ok/error responses flipped. No functional change
- PermRole should deny messages in threads todo
- Fixed chucknorris jokes
- `'logserver` will now work as intended

View file

@ -1,13 +0,0 @@
---
slug: 4.3.15-patch-notes
title: 4.3.15 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- Fixed -w 0 in trivia
- Fixed `'rps` amount field in the response
- Fixed `'showembed` output
- Fixed bank award's incorrect output message

View file

@ -1,11 +0,0 @@
---
slug: 4.3.16-patch-notes
title: 4.3.16 patch notes
authors: [EmotionChild]
tags: [Patchnote]
---
### Fixed
- Fixed missing events from `'logevents`
- Fixed `'log` thread deleted and thread created events not working properly

View file

@ -1,11 +0,0 @@
EmotionChild:
name: EmotionChild
title: Lead Developer and Project Lead
url: https://www.emotionchild.com
image_url: https://github.com/EmotionChild.png
Ellie Devs:
name: Ellie Devs
title: Dev / management team
url: https://github.com/EllieBotDevs
image_url: https://github.com/EllieBotDevs.png

1
dist/_astro/hoisted.-OpaiJNX.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/_astro/index.a6ymtXr2.css vendored Normal file
View file

@ -0,0 +1 @@
.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}body{font-family:Lato,sans-serif;font-size:18px;line-height:1.65;font-weight:400;color:#2c3145;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}@media (prefers-color-scheme: dark){body{color:#c7c9db}}h1,h2,h3,h4,h5{line-height:1.2;margin:1em 0 .5em;color:#0e1016;font-weight:700}@media (prefers-color-scheme: dark){h1,h2,h3,h4,h5{color:#fff}}h1{font-size:3.052em}h2{font-size:2.441em}h3{font-size:1.953em}h4{font-size:1.563em}h5{font-size:1.25em}p{margin:0 0 1em}code{font-family:Source Code Pro,monospace}b,strong{font-weight:700;color:#fff;color:#0e1016}@media (prefers-color-scheme: dark){b,strong{color:#fff}}*{box-sizing:border-box}body{margin:0 auto;padding:0 1em;width:1040px;max-width:100%;background-color:#fff}@media (prefers-color-scheme: dark){body{background-color:#020002}}@media (max-width: 768px){body{font-size:16px}}.glow{width:100%;height:100%;position:absolute;z-index:-1;top:0;left:0;overflow:hidden}.glow:after{content:"";display:block;position:absolute;top:-120px;left:calc(50% - 360px);width:720px;height:240px;background:radial-gradient(50% 50% at 50% 50%,#df7f4f33,#df7f4f00)}@media (prefers-color-scheme: dark){.glow:after{background:radial-gradient(50% 50% at 50% 50%,#ffffff0f,#fff0)}}::selection{background:#f2cab7}@media (prefers-color-scheme: dark){::selection{background:#d05f26}}a,a:visited{color:#d05f26;transition:.1s ease}@media (prefers-color-scheme: dark){a,a:visited{color:#ecb194}}a:hover,a:visited:hover{color:#df7f4f}hr{margin:1em 0;border:0;border-bottom:1px solid #e6e7ef}@media (prefers-color-scheme: dark){hr{border-color:#181b26}}nav{display:flex;align-items:center;justify-content:space-between;margin:0 0 2em;padding:2em 0}nav a{transition:.1s ease}nav a:hover{opacity:.6}nav #site_title{margin:0}nav #site_title a{display:flex;align-items:center;gap:10px;color:#0e1016;font-size:16px;font-weight:700;letter-spacing:2px;line-height:1;text-decoration:none;text-transform:uppercase}@media (prefers-color-scheme: dark){nav #site_title a{color:#fff}}nav .links a{margin-left:1em;color:#2c3145}@media (prefers-color-scheme: dark){nav .links a{color:#c7c9db}}.content ol,.content ul{padding-left:2em;margin-bottom:1em}.content ul{list-style:none}.content ul li{position:relative;margin-bottom:.75em}.content ul li:before{content:"";display:block;position:absolute;left:-1em;top:.63em;width:8px;height:8px;background:linear-gradient(25deg,#9818e7,#df7f4f);border-radius:99px}.page_title{margin:1.5em 0}@media (max-width: 768px){.page_title{margin:.5em 0}}.posts{list-style:none;padding:0}.post{display:flex;width:100%}@media (max-width: 768px){.post{flex-flow:column}}.post:last-child .content,.post.single .content{border-bottom:0}.version_wrapper{flex-basis:260px;flex-grow:0;flex-shrink:0;margin:4.5em 0 0}@media (max-width: 1040px){.version_wrapper{flex-basis:140px}}@media (max-width: 768px){.version_wrapper{flex-basis:0;margin-top:2em}}.version_wrapper .version_info{position:sticky;top:1em}@media (max-width: 768px){.version_wrapper .version_info{position:relative;top:0}}.version_wrapper a{float:left;color:#fff;text-decoration:none;transition:.1s ease}.version_wrapper a:hover{opacity:.6}.version_number{display:inline-block;font-family:Source Code Pro,monospace;line-height:1;margin-bottom:8px;padding:4px 12px;color:#fff;background:linear-gradient(25deg,#3a084e,#5b0e81,#bc4c9b,#df7f4f);border-radius:8px}.date{clear:both;color:#2c3145;font-family:Source Code Pro,monospace;font-size:15px}@media (max-width: 768px){.date{display:inline;margin-left:1em}}@media (prefers-color-scheme: dark){.date{color:#c7c9db}}.content{margin:0;padding:4em 0;border-bottom:1px solid #e6e7ef}@media (max-width: 768px){.content{margin:1em 0;padding:0 0 2em}}@media (prefers-color-scheme: dark){.content{border-color:#181b26}}.content *:first-child{margin-top:0}.content img{max-width:100%;height:auto;border-radius:12px;border:1px solid #c7c9db}@media (prefers-color-scheme: dark){.content img{border-color:#2c3145}}footer{display:flex;padding:2em 0;color:#6a71a0;justify-content:space-between;border-top:1px solid #e6e7ef}@media (max-width: 768px){footer{padding:1em 0}}@media (prefers-color-scheme: dark){footer{border-color:#181b26}}footer a{margin-left:1em;color:#6a71a0;text-decoration:none}footer a:hover{color:#6a71a0;opacity:.6}.links[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{text-decoration:none}

View file

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

60
dist/index.html vendored Normal file
View file

@ -0,0 +1,60 @@
<!DOCTYPE html><meta charset="utf-8"><!-- Page Metadata --><link rel="canonical" href="https://patchnotes.elliebot.net/"><meta name="description" content="The patchnotes of EllieBot!"><!-- OpenGraph Tags --><meta property="og:title" content="Ellie Notes"><meta property="og:type" content="website"><meta property="og:url" content="https://patchnotes.elliebot.net/"><meta property="og:locale" content="en"><meta property="og:description" content="The patchnotes of EllieBot!"><meta property="og:site_name" content="Ellie Notes"><!-- Twitter Tags --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site"><meta name="twitter:title" content="Ellie Notes"><meta name="twitter:description" content="The patchnotes of EllieBot!"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&family=Source+Code+Pro&display=swap" rel="stylesheet"> <meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><style>time[data-astro-cid-baakmyjh]{display:block}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
</style>
<link rel="stylesheet" href="/_astro/index.a6ymtXr2.css" /><script type="module" src="/_astro/hoisted.-OpaiJNX.js"></script><style>[data-astro-transition-scope="astro-4xnpz4kg-1"] { view-transition-name: post; }@layer astro { ::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-4xnpz4kg-1"],
[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-4xnpz4kg-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-4xnpz4kg-1"],
[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-4xnpz4kg-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-4xnpz4kg-1"],
[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-4xnpz4kg-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-4xnpz4kg-1"],
[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-4xnpz4kg-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }</style><body> <div class="glow"></div> <header data-astro-cid-3ef6ksr2> <nav data-astro-cid-3ef6ksr2> <h2 id="site_title" data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-3ef6ksr2> Ellie Notes </a> </h2> <div class="links" data-astro-cid-3ef6ksr2> <a href="mailto:contact@elliebot.net" data-astro-cid-3ef6ksr2>Contact</a> </div> </nav> </header> <main> <h1 class="page_title">Changelogs</h1> <hr> <ul class="posts" data-astro-transition-scope="astro-4xnpz4kg-1"> <li class="post"> <div class="version_wrapper"> <div class="version_info"> <a href="/releases/4_3_18"> <div class="version_number">4.3.18</div> <time datetime="2023-12-26T00:00:00.000Z" class="date astro-baakmyjh" data-astro-cid-baakmyjh> Dec 26, 2023 </time> </a> </div> </div> <div class="content"> <h2 id="ellie-bot-v4318">Ellie Bot v4.3.18</h2>
<h3 id="added">Added</h3>
<ul>
<li>Added <code>'cacheusers</code> command</li>
<li>Added <code>'clubreject</code> which lets you reject club applications</li>
</ul>
<h3 id="fixed">Fixed</h3>
<ul>
<li>Fixed <code>icon_url</code> when using <code>'showembed</code></li>
<li>Fixed <code>'quoteshow</code> not showing sometimes</li>
<li>Notifications will no longer be sent if dms are off when using <code>'give</code></li>
<li>Users should no longer be able to apply to clubs while in a club already (especially not to the same club theyre already in)</li>
</ul>
<h3 id="removed">Removed</h3>
<ul>
<li><code>'revimg</code> and <code>'revav</code> as google removed reverse image search</li>
</ul> </div> </li><li class="post"> <div class="version_wrapper"> <div class="version_info"> <a href="/releases/4_3_17"> <div class="version_number">4.3.17</div> <time datetime="2023-09-06T00:00:00.000Z" class="date astro-baakmyjh" data-astro-cid-baakmyjh> Sep 6, 2023 </time> </a> </div> </div> <div class="content"> <h2 id="ellie-bot-v4317">Ellie Bot v4.3.17</h2>
<h3 id="fixed">Fixed</h3>
<ul>
<li>Fix to waifu gifts being character limited</li>
<li>Fixes UserUpdated and UserPresence not correctly ignoring users that are logignored</li>
</ul> </div> </li> </ul> </main> <footer> <p>© 2023 EllieBotDevs</p> <div class="footer_links"> <a href="https://discord.gg/etQdZxSyEH">Discord</a> <a href="https://toastielab.dev/EllieBotDevs/ellie-patchnotes">Toastielab</a> </div> </footer> </body>

44
dist/releases/4_3_17/index.html vendored Normal file
View file

@ -0,0 +1,44 @@
<!DOCTYPE html><html lang="en"> <head><!-- Page Metadata --><link rel="canonical" href="https://patchnotes.elliebot.net/releases/4_3_17/"><meta name="description" content="Ellie Bot version 4.3.17 release notes."><!-- OpenGraph Tags --><meta property="og:title" content="Ellie Bot 4.3.17!"><meta property="og:type" content="website"><meta property="og:url" content="https://patchnotes.elliebot.net/releases/4_3_17/"><meta property="og:locale" content="en"><meta property="og:description" content="Ellie Bot version 4.3.17 release notes."><meta property="og:site_name" content="Ellie Notes"><!-- Twitter Tags --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site"><meta name="twitter:title" content="Ellie Bot 4.3.17!"><meta name="twitter:description" content="Ellie Bot version 4.3.17 release notes."> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&family=Source+Code+Pro&display=swap" rel="stylesheet"> <meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><style>time[data-astro-cid-baakmyjh]{display:block}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
</style>
<link rel="stylesheet" href="/_astro/index.a6ymtXr2.css" /><script type="module" src="/_astro/hoisted.-OpaiJNX.js"></script><style>[data-astro-transition-scope="astro-jpx3f7vy-1"] { view-transition-name: post; }@layer astro { ::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }</style></head><body> <div class="glow"></div> <header data-astro-cid-3ef6ksr2> <nav data-astro-cid-3ef6ksr2> <h2 id="site_title" data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-3ef6ksr2> Ellie Notes </a> </h2> <div class="links" data-astro-cid-3ef6ksr2> <a href="mailto:contact@elliebot.net" data-astro-cid-3ef6ksr2>Contact</a> </div> </nav> </header> <div class="post single" data-astro-transition-persist="post" data-astro-transition-scope="astro-jpx3f7vy-1"> <div class="version_wrapper"> <div class="version_info"> <div class="version_number">4.3.17</div> <time datetime="2023-09-06T00:00:00.000Z" class="date astro-baakmyjh" data-astro-cid-baakmyjh> Sep 6, 2023 </time> </div> </div> <div class="content"> <h2 id="ellie-bot-v4317">Ellie Bot v4.3.17</h2>
<h3 id="fixed">Fixed</h3>
<ul>
<li>Fix to waifu gifts being character limited</li>
<li>Fixes UserUpdated and UserPresence not correctly ignoring users that are logignored</li>
</ul> </div> </div> <footer> <p>© 2023 EllieBotDevs</p> <div class="footer_links"> <a href="https://discord.gg/etQdZxSyEH">Discord</a> <a href="https://toastielab.dev/EllieBotDevs/ellie-patchnotes">Toastielab</a> </div> </footer> </body></html>

55
dist/releases/4_3_18/index.html vendored Normal file
View file

@ -0,0 +1,55 @@
<!DOCTYPE html><html lang="en"> <head><!-- Page Metadata --><link rel="canonical" href="https://patchnotes.elliebot.net/releases/4_3_18/"><meta name="description" content="Ellie Bot version 4.3.18 release notes."><!-- OpenGraph Tags --><meta property="og:title" content="Ellie Bot 4.3.18!"><meta property="og:type" content="website"><meta property="og:url" content="https://patchnotes.elliebot.net/releases/4_3_18/"><meta property="og:locale" content="en"><meta property="og:description" content="Ellie Bot version 4.3.18 release notes."><meta property="og:site_name" content="Ellie Notes"><!-- Twitter Tags --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site"><meta name="twitter:title" content="Ellie Bot 4.3.18!"><meta name="twitter:description" content="Ellie Bot version 4.3.18 release notes."> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&family=Source+Code+Pro&display=swap" rel="stylesheet"> <meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><style>time[data-astro-cid-baakmyjh]{display:block}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0}}@keyframes astroFadeOut{to{opacity:0}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
</style>
<link rel="stylesheet" href="/_astro/index.a6ymtXr2.css" /><script type="module" src="/_astro/hoisted.-OpaiJNX.js"></script><style>[data-astro-transition-scope="astro-jpx3f7vy-1"] { view-transition-name: post; }@layer astro { ::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(post) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-jpx3f7vy-1"],
[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-jpx3f7vy-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }</style></head><body> <div class="glow"></div> <header data-astro-cid-3ef6ksr2> <nav data-astro-cid-3ef6ksr2> <h2 id="site_title" data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-3ef6ksr2> Ellie Notes </a> </h2> <div class="links" data-astro-cid-3ef6ksr2> <a href="mailto:contact@elliebot.net" data-astro-cid-3ef6ksr2>Contact</a> </div> </nav> </header> <div class="post single" data-astro-transition-persist="post" data-astro-transition-scope="astro-jpx3f7vy-1"> <div class="version_wrapper"> <div class="version_info"> <div class="version_number">4.3.18</div> <time datetime="2023-12-26T00:00:00.000Z" class="date astro-baakmyjh" data-astro-cid-baakmyjh> Dec 26, 2023 </time> </div> </div> <div class="content"> <h2 id="ellie-bot-v4318">Ellie Bot v4.3.18</h2>
<h3 id="added">Added</h3>
<ul>
<li>Added <code>'cacheusers</code> command</li>
<li>Added <code>'clubreject</code> which lets you reject club applications</li>
</ul>
<h3 id="fixed">Fixed</h3>
<ul>
<li>Fixed <code>icon_url</code> when using <code>'showembed</code></li>
<li>Fixed <code>'quoteshow</code> not showing sometimes</li>
<li>Notifications will no longer be sent if dms are off when using <code>'give</code></li>
<li>Users should no longer be able to apply to clubs while in a club already (especially not to the same club theyre already in)</li>
</ul>
<h3 id="removed">Removed</h3>
<ul>
<li><code>'revimg</code> and <code>'revav</code> as google removed reverse image search</li>
</ul> </div> </div> <footer> <p>© 2023 EllieBotDevs</p> <div class="footer_links"> <a href="https://discord.gg/etQdZxSyEH">Discord</a> <a href="https://toastielab.dev/EllieBotDevs/ellie-patchnotes">Toastielab</a> </div> </footer> </body></html>

View file

@ -1,130 +0,0 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const lightCodeTheme = require('prism-react-renderer/themes/github');
const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */
const config = {
title: 'Ellie patchnotes',
tagline: 'Ellie patch notes',
url: 'https://patchnotes.elliebot.net',
baseUrl: '/',
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
trailingSlash: false,
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: 'EllieBotDevs', // Usually your GitHub org/user name.
projectName: 'ellie-patchnotes', // Usually your repo name.
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en'],
},
presets: [
[
'classic',
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: false,
blog: {
routeBasePath: '/',
showReadingTime: true,
readingTime: ({content, frontMatter, defaultReadingTime}) =>
frontMatter.hide_reading_time ? undefined : defaultReadingTime({content}),
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl:
'https://github.com/EllieBotDevs/ellie-patchnotes/tree/dev/blog',
blogTitle: 'Ellie patchnotes',
blogDescription: 'Here you can find the patch notes for Ellie',
postsPerPage: 'ALL',
feedOptions: {
type: 'all',
copyright: `Copyright © ${new Date().getFullYear()} EllieBotDevs.`,
},
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
}),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
navbar: {
title: 'Ellie patchnotes',
logo: {
alt: 'Ellie patchnotes',
src: 'img/favicon.ico',
},
items: [
{
href: 'https://github.com/EllieBotDevs/ellie-patchnotes',
label: 'GitHub',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Our other sites',
items: [
{
label: 'Documentation Site',
to: 'https://docs.elliebot.net',
},
{
label: 'Ellie blog',
to: 'https://blog.elliebot.net',
},
{
label: 'Main site',
to: 'https://elliebot.net',
}
],
},
{
title: 'Community',
items: [
{
label: 'Discord',
href: 'https://discord.com/invite/SVQVzJq',
},
{
label: 'Twitter',
href: 'https://twitter.com/Computergeex5',
},
],
},
{
title: 'More',
items: [
{
label: 'GitHub',
href: 'https://github.com/EllieBotDevs/ellie-patchnotes',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} EllieBotDevs.`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
}),
};
module.exports = config;

View file

@ -1,41 +1,19 @@
{
"name": "ellie-patchnotes",
"version": "0.0.0",
"private": true,
"type": "module",
"version": "0.0.1",
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@docusaurus/core": "2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/types": "^2.4.1",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.1.1",
"prism-react-renderer": "^1.3.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "2.4.1"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"@astrojs/check": "^0.4.0",
"astro": "^4.1.1",
"sass": "^1.69.5",
"sharp": "^0.32.5",
"typescript": "^5.3.3"
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,31 +0,0 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
// But you can create a sidebar manually
/*
tutorialSidebar: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
},
],
*/
};
module.exports = sidebars;

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

View file

@ -0,0 +1,19 @@
---
import { ViewTransitions } from 'astro:transitions';
import SEO, { type Props as SEOProps } from './SEO.astro';
import { SiteTitle, SiteDescription } from '../consts';
export type Props = Partial<SEOProps>;
const { title = SiteTitle, name = SiteTitle, description = SiteDescription, ...seo } = Astro.props;
---
<SEO {title} {description} {name} {...seo} />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&family=Source+Code+Pro&display=swap"
rel="stylesheet"
/>
<ViewTransitions />

View file

@ -0,0 +1,11 @@
---
import '../styles/global.scss';
---
<footer>
<p>© 2023 EllieBotDevs</p>
<div class="footer_links">
<a href="https://discord.gg/etQdZxSyEH">Discord</a>
<a href="https://toastielab.dev/EllieBotDevs/ellie-patchnotes">Toastielab</a>
</div>
</footer>

View file

@ -0,0 +1,25 @@
---
import type { HTMLAttributes } from 'astro/types';
type Props = HTMLAttributes<'time'> & {
date: Date;
};
const { date, ...attrs } = Astro.props;
---
<time datetime={date.toISOString()} {...attrs}>
{
date.toLocaleDateString('en-us', {
year: 'numeric',
month: 'short',
day: 'numeric',
})
}
</time>
<style>
time {
display: block;
}
</style>

View file

@ -0,0 +1,23 @@
---
import '../styles/global.scss';
import { SiteTitle } from '../consts';
---
<header>
<nav>
<h2 id="site_title">
<a href="/">
{SiteTitle}
</a>
</h2>
<div class="links">
<a href="mailto:contact@elliebot.net">Contact</a>
</div>
</nav>
</header>
<style>
.links a {
text-decoration: none;
}
</style>

View file

@ -1,64 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import styles from './styles.module.css';
const FeatureList = [
{
title: 'Easy to Use',
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
description: (
<>
Docusaurus was designed from the ground up to be easily installed and
used to get your website up and running quickly.
</>
),
},
{
title: 'Focus on What Matters',
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
description: (
<>
Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go
ahead and move your docs into the <code>docs</code> directory.
</>
),
},
{
title: 'Powered by React',
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
description: (
<>
Extend or customize your website layout by reusing React. Docusaurus can
be extended while reusing the same header and footer.
</>
),
},
];
function Feature({Svg, title, description}) {
return (
<div className={clsx('col col--4')}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View file

@ -1,11 +0,0 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}

87
src/components/SEO.astro Normal file
View file

@ -0,0 +1,87 @@
---
import type { ImageMetadata } from 'astro';
type Image = {
src: string | ImageMetadata;
alt: string;
};
type SEOMetadata = {
name: string;
title: string;
description: string;
image?: Image | undefined;
canonicalURL?: URL | string | undefined;
locale?: string;
};
type OpenGraph = Partial<SEOMetadata> & {
type?: string;
};
type Twitter = Partial<SEOMetadata> & {
handle?: string;
card?: 'summary' | 'summary_large_image';
};
export type Props = SEOMetadata & {
og?: OpenGraph;
twitter?: Twitter;
};
const {
name,
title,
description,
image,
locale = 'en',
canonicalURL = new URL(Astro.url.pathname, Astro.site),
} = Astro.props;
const og = {
name,
title,
description,
canonicalURL,
image,
locale,
type: 'website',
...(Astro.props.og ?? {}),
} satisfies OpenGraph;
const twitter = {
name,
title,
description,
canonicalURL,
image,
locale,
card: 'summary_large_image',
...Astro.props.twitter,
};
function normalizeImageUrl(image: string | ImageMetadata) {
return typeof image === 'string' ? image : image.src;
}
---
<!-- Page Metadata -->
<link rel="canonical" href={canonicalURL} />
<meta name="description" content={description} />
<!-- OpenGraph Tags -->
<meta property="og:title" content={og.title} />
<meta property="og:type" content={og.type} />
<meta property="og:url" content={canonicalURL} />
<meta property="og:locale" content={og.locale} />
<meta property="og:description" content={og.description} />
<meta property="og:site_name" content={og.name} />
{og.image && <meta property="og:image" content={normalizeImageUrl(og.image.src)} />}
{og.image && <meta property="og:image:alt" content={og.image.alt} />}
<!-- Twitter Tags -->
<meta name="twitter:card" content={twitter.card} />
<meta name="twitter:site" content={twitter.handle} />
<meta name="twitter:title" content={twitter.title} />
<meta name="twitter:description" content={twitter.description} />
{twitter.image && <meta name="twitter:image" content={normalizeImageUrl(twitter.image.src)} />}
{twitter.image && <meta name="twitter:image:alt" content={twitter.image.alt} />}

5
src/consts.ts Normal file
View file

@ -0,0 +1,5 @@
// Place any global data in this file.
// You can import this data from anywhere in your site by using the `import` keyword.
export const SiteTitle = 'Ellie Notes';
export const SiteDescription = 'The patchnotes of EllieBot!';

15
src/content/config.ts Normal file
View file

@ -0,0 +1,15 @@
import { defineCollection, z } from 'astro:content';
const releases = defineCollection({
// Type-check frontmatter using a schema
schema:
z.object({
title: z.string(),
description: z.string(),
versionNumber: z.string(),
// Transform string to Date object
date: z.date({ coerce: true }),
}),
});
export const collections = { releases };

View file

@ -0,0 +1,13 @@
---
title: 'Ellie Bot 4.3.17!'
date: '2023-09-06'
versionNumber: '4.3.17'
description: 'Ellie Bot version 4.3.17 release notes.'
---
## Ellie Bot v4.3.17
### Fixed
- Fix to waifu gifts being character limited
- Fixes UserUpdated and UserPresence not correctly ignoring users that are logignored

View file

@ -0,0 +1,24 @@
---
title: 'Ellie Bot 4.3.18!'
date: '2023-12-26'
versionNumber: '4.3.18'
description: 'Ellie Bot version 4.3.18 release notes.'
---
## Ellie Bot v4.3.18
### Added
- Added `'cacheusers` command
- Added `'clubreject` which lets you reject club applications
### Fixed
- Fixed `icon_url` when using `'showembed`
- Fixed `'quoteshow` not showing sometimes
- Notifications will no longer be sent if dms are off when using `'give`
- Users should no longer be able to apply to clubs while in a club already (especially not to the same club they're already in)
### Removed
- `'revimg` and `'revav` as google removed reverse image search

View file

@ -1,30 +0,0 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme='dark'] {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: #21af90;
--ifm-color-primary-darker: #1fa588;
--ifm-color-primary-darkest: #1a8870;
--ifm-color-primary-light: #29d5b0;
--ifm-color-primary-lighter: #32d8b4;
--ifm-color-primary-lightest: #4fddbf;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}

2
src/env.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />

View file

@ -0,0 +1,23 @@
---
import BaseHead, { type Props as HeadProps } from '../components/BaseHead.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
type Props = HeadProps;
const { ...head } = Astro.props;
---
<!doctype html>
<meta charset="utf-8" />
<html lang="en">
<head>
<BaseHead {...head} />
<body>
<div class="glow"></div>
<Header />
<slot />
<Footer />
</body>
</head>
</html>

View file

@ -0,0 +1,38 @@
---
import type { CollectionEntry } from 'astro:content';
import BaseHead from '../components/BaseHead.astro';
import FormattedDate from '../components/FormattedDate.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
type Props = {
release: CollectionEntry<'releases'>;
};
const { release } = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
<BaseHead
title={release.data.title}
description={release.data.description}
/>
</head><body>
<div class="glow"></div>
<Header />
<div class="post single" transition:persist transition:name="post">
<div class="version_wrapper">
<div class="version_info">
<div class="version_number">{release.data.versionNumber}</div>
<FormattedDate class="date" date={release.data.date} />
</div>
</div>
<div class="content">
<slot />
</div>
</div>
<Footer />
</body>
</html>

36
src/pages/index.astro Normal file
View file

@ -0,0 +1,36 @@
---
import { getCollection } from 'astro:content';
import FormattedDate from '../components/FormattedDate.astro';
import Layout from '../layouts/IndexLayout.astro';
const posts = await getCollection('releases');
posts.sort((a, b) => +b.data.date - +a.data.date);
---
<Layout>
<main>
<h1 class="page_title">Changelogs</h1>
<hr />
<ul class="posts" transition:name="post">
{
posts.map((post) => (
<li class="post">
<div class="version_wrapper">
<div class="version_info">
<a href={`/releases/${post.slug}`}>
<div class="version_number">{post.data.versionNumber}</div>
<FormattedDate class="date" date={post.data.date} />
</a>
</div>
</div>
<div class="content">
{post.render().then(({ Content }) => (
<Content />
))}
</div>
</li>
))
}
</ul>
</main>
</Layout>

View file

@ -1,23 +0,0 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 996px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

View file

@ -1,7 +0,0 @@
---
title: Markdown page example
---
# Markdown page example
You don't need React to write simple standalone pages.

View file

@ -0,0 +1,21 @@
---
import { getCollection } from 'astro:content';
import Layout from '../../layouts/PostLayout.astro';
export async function getStaticPaths() {
const releases = await getCollection('releases');
return releases.map((release) => ({
params: { slug: release.slug },
props: { release },
}));
}
const { release } = Astro.props;
const { Content } = await release.render();
---
<Layout {release}>
<Content />
</Layout>

61
src/styles/colors.scss Normal file
View file

@ -0,0 +1,61 @@
@function color($color, $tone) {
// @warn map-get($palette,$color);
@if map-has-key($palette, $color) {
$color: map-get($palette, $color);
@if map-has-key($color, $tone) {
$tone: map-get($color, $tone);
@return $tone;
}
@warn "unknown tone `#{$tone}` in color";
@return null;
}
@warn "unknown color `#{$color}` in palette";
@return null;
}
$white: #ffffff;
$palette: (
purple: (
50: #f2e8fd,
100: #e6d1fa,
200: #cfa3f5,
300: #ba75f0,
400: #a846ec,
500: #9818e7,
600: #7b13b4,
700: #5b0e81,
800: #3a084e,
900: #15031c,
950: #020002,
),
orange: (
50: #fbf0ea,
100: #f8e3d9,
200: #f2cab7,
300: #ecb194,
400: #e59872,
500: #df7f4f,
600: #d05f26,
700: #a1491d,
800: #713315,
900: #421e0c,
950: #2a1308,
),
gray: (
50: #f6f6f9,
100: #e6e7ef,
200: #c7c9db,
300: #a8abc7,
400: #898eb4,
500: #6a71a0,
600: #545b83,
700: #404664,
800: #2c3145,
900: #181b26,
950: #0e1016,
),
);

3
src/styles/global.scss Normal file
View file

@ -0,0 +1,3 @@
@import 'colors.scss';
@import 'type.scss';
@import 'layout.scss';

291
src/styles/layout.scss Normal file
View file

@ -0,0 +1,291 @@
$container: 1040px;
$tablet: 768px;
$mobile: 420px;
* {
box-sizing: border-box;
}
body {
margin: 0 auto;
padding: 0 1em;
width: 1040px;
max-width: 100%;
background-color: $white;
@media (prefers-color-scheme: dark) {
background-color: color(purple, 950);
}
@media (max-width: $tablet) {
font-size: 16px;
}
}
.glow {
width: 100%;
height: 100%;
position: absolute;
z-index: -1;
top: 0;
left: 0;
overflow: hidden;
&:after {
content: '';
display: block;
position: absolute;
top: -120px;
left: calc(50% - 360px);
width: 720px;
height: 240px;
background: radial-gradient(
50% 50% at 50% 50%,
rgba(color(orange, 500), 0.2) 0%,
rgba(color(orange, 500), 0) 100%
);
@media (prefers-color-scheme: dark) {
background: radial-gradient(
50% 50% at 50% 50%,
rgba(255, 255, 255, 0.06) 0%,
rgba(255, 255, 255, 0) 100%
);
}
}
}
::selection {
background: color(orange, 200);
@media (prefers-color-scheme: dark) {
background: color(orange, 600);
}
}
a,
a:visited {
color: color(orange, 600);
@media (prefers-color-scheme: dark) {
color: color(orange, 300);
}
transition: 0.1s ease;
&:hover {
color: color(orange, 500);
}
}
hr {
margin: 1em 0;
border: 0;
border-bottom: 1px solid color(gray, 100);
@media (prefers-color-scheme: dark) {
border-color: color(gray, 900);
}
}
nav {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0 0 2em 0;
padding: 2em 0;
a {
transition: 0.1s ease;
&:hover {
opacity: 0.6;
}
}
#site_title {
margin: 0;
}
#site_title a {
display: flex;
align-items: center;
gap: 10px;
color: color(gray, 950);
@media (prefers-color-scheme: dark) {
color: $white;
}
font-size: 16px;
font-weight: 700;
letter-spacing: 2px;
line-height: 1;
text-decoration: none;
text-transform: uppercase;
}
.links a {
margin-left: 1em;
color: color(gray, 800);
@media (prefers-color-scheme: dark) {
color: color(gray, 200);
}
}
}
.content {
ol,
ul {
padding-left: 2em;
margin-bottom: 1em;
}
ul {
list-style: none;
li {
position: relative;
margin-bottom: 0.75em;
&:before {
content: '';
display: block;
position: absolute;
left: -1em;
top: 0.63em;
width: 8px;
height: 8px;
background: linear-gradient(25deg, color(purple, 500), color(orange, 500));
border-radius: 99px;
}
}
}
}
.page_title {
margin: 1.5em 0;
@media (max-width: $tablet) {
margin: 0.5em 0;
}
}
.posts {
list-style: none;
padding: 0;
}
.post {
display: flex;
width: 100%;
@media (max-width: $tablet) {
flex-flow: column;
}
&:last-child .content,
&.single .content {
border-bottom: 0;
}
}
.version_wrapper {
flex-basis: 260px;
@media (max-width: $container) {
flex-basis: 140px;
}
flex-grow: 0;
flex-shrink: 0;
margin: 4.5em 0 0 0;
@media (max-width: $tablet) {
flex-basis: 0;
margin-top: 2em;
}
.version_info {
position: sticky;
top: 1em;
@media (max-width: $tablet) {
position: relative;
top: 0;
}
}
a {
float: left;
color: $white;
text-decoration: none;
transition: 0.1s ease;
&:hover {
opacity: 0.6;
}
}
}
.version_number {
display: inline-block;
font-family: $codeFont;
line-height: 1;
margin-bottom: 8px;
padding: 4px 12px;
color: $white;
background: linear-gradient(
25deg,
color(purple, 800),
color(purple, 700),
mix(color(purple, 500), color(orange, 500)),
color(orange, 500)
);
border-radius: 8px;
}
.date {
clear: both;
@media (max-width: $tablet) {
display: inline;
margin-left: 1em;
}
color: color(gray, 800);
@media (prefers-color-scheme: dark) {
color: color(gray, 200);
}
font-family: $codeFont;
font-size: $fontSizeSmall;
}
.content {
margin: 0;
padding: 4em 0;
@media (max-width: $tablet) {
margin: 1em 0;
padding: 0 0 2em 0;
}
border-bottom: 1px solid color(gray, 100);
@media (prefers-color-scheme: dark) {
border-color: color(gray, 900);
}
*:first-child {
margin-top: 0;
}
img {
max-width: 100%;
height: auto;
border-radius: 12px;
border: 1px solid color(gray, 200);
@media (prefers-color-scheme: dark) {
border-color: color(gray, 800);
}
}
}
footer {
display: flex;
padding: 2em 0;
@media (max-width: $tablet) {
padding: 1em 0;
}
color: color(gray, 500);
justify-content: space-between;
border-top: 1px solid color(gray, 100);
@media (prefers-color-scheme: dark) {
border-color: color(gray, 900);
}
a {
margin-left: 1em;
color: color(gray, 500);
text-decoration: none;
&:hover {
color: color(gray, 500);
opacity: 0.6;
}
}
}

65
src/styles/type.scss Normal file
View file

@ -0,0 +1,65 @@
$baseFont: 'Lato', sans-serif;
$codeFont: 'Source Code Pro', monospace;
$fontSizeSmall: 15px;
body {
font-family: $baseFont;
font-size: 18px;
line-height: 1.65;
font-weight: 400;
@media (prefers-color-scheme: dark) {
color: color(gray, 200);
}
color: color(gray, 800);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
h1,
h2,
h3,
h4,
h5 {
line-height: 1.2;
margin: 1em 0 0.5em 0;
@media (prefers-color-scheme: dark) {
color: $white;
}
color: color(gray, 950);
font-weight: 700;
}
h1 {
font-size: 3.052em;
}
h2 {
font-size: 2.441em;
}
h3 {
font-size: 1.953em;
}
h4 {
font-size: 1.563em;
}
h5 {
font-size: 1.25em;
}
p {
margin: 0 0 1em 0;
}
code {
font-family: $codeFont;
}
b,
strong {
font-weight: 700;
color: #fff;
@media (prefers-color-scheme: dark) {
color: $white;
}
color: color(gray, 950);
}

View file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

6
tsconfig.json Normal file
View file

@ -0,0 +1,6 @@
{
"extends": "astro/tsconfigs/strict",
"exclude": [
"dist"
]
}

9387
yarn.lock

File diff suppressed because it is too large Load diff