Updated patchnotes site to use astro
203
.astro/types.d.ts
vendored
Normal 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");
|
||||
}
|
37
.github/workflows/deploy.yml
vendored
|
@ -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
|
22
.github/workflows/test-deploy.yml
vendored
|
@ -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
|
@ -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
|
|
@ -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
|
@ -0,0 +1,6 @@
|
|||
import { defineConfig } from 'astro/config';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: 'https://notes.elliebot.net',
|
||||
});
|
|
@ -1,3 +0,0 @@
|
|||
module.exports = {
|
||||
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||
};
|
|
@ -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
|
|
@ -1,10 +0,0 @@
|
|||
---
|
||||
slug: 4.1.4-patch-notes
|
||||
title: 4.1.4 patch notes
|
||||
authors: [EmotionChild]
|
||||
tags: [Patchnote]
|
||||
---
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed `'yun`
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
1
dist/_astro/index.a6ymtXr2.css
vendored
Normal 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}
|
0
static/img/favicon.ico → dist/favicon.ico
vendored
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
60
dist/index.html
vendored
Normal 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 they’re 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
|
@ -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
|
@ -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 they’re 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>
|
|
@ -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;
|
46
package.json
|
@ -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
After Width: | Height: | Size: 4.2 KiB |
31
sidebars.js
|
@ -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;
|
BIN
src/assets/starlog-placeholder-14.jpg
Normal file
After Width: | Height: | Size: 355 KiB |
BIN
src/assets/starlog-placeholder-18.jpg
Normal file
After Width: | Height: | Size: 376 KiB |
19
src/components/BaseHead.astro
Normal 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 />
|
11
src/components/Footer.astro
Normal 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>
|
25
src/components/FormattedDate.astro
Normal 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>
|
23
src/components/Header.astro
Normal 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>
|
|
@ -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'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>
|
||||
);
|
||||
}
|
|
@ -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
|
@ -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
|
@ -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
|
@ -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 };
|
13
src/content/releases/4_3_17.md
Normal 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
|
24
src/content/releases/4_3_18.md
Normal 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
|
|
@ -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
|
@ -0,0 +1,2 @@
|
|||
/// <reference path="../.astro/types.d.ts" />
|
||||
/// <reference types="astro/client" />
|
23
src/layouts/IndexLayout.astro
Normal 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>
|
38
src/layouts/PostLayout.astro
Normal 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
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
---
|
||||
title: Markdown page example
|
||||
---
|
||||
|
||||
# Markdown page example
|
||||
|
||||
You don't need React to write simple standalone pages.
|
21
src/pages/releases/[slug].astro
Normal 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
|
@ -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
|
@ -0,0 +1,3 @@
|
|||
@import 'colors.scss';
|
||||
@import 'type.scss';
|
||||
@import 'layout.scss';
|
291
src/styles/layout.scss
Normal 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
|
@ -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);
|
||||
}
|
Before Width: | Height: | Size: 182 KiB |
Before Width: | Height: | Size: 182 KiB |
6
tsconfig.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"exclude": [
|
||||
"dist"
|
||||
]
|
||||
}
|