Notes update
This commit is contained in:
commit
bf48e26516
55 changed files with 3653 additions and 7416 deletions
210
.astro/types.d.ts
vendored
Normal file
210
.astro/types.d.ts
vendored
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
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"] };
|
||||||
|
"5.0.8-beta.md": {
|
||||||
|
id: "5.0.8-beta.md";
|
||||||
|
slug: "508-beta";
|
||||||
|
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
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
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
|
|
22
.gitignore
vendored
22
.gitignore
vendored
|
@ -1,20 +1,2 @@
|
||||||
# Dependencies
|
node_modules
|
||||||
/node_modules
|
dist
|
||||||
|
|
||||||
# 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*
|
|
|
@ -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
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,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
46
package.json
|
@ -1,41 +1,19 @@
|
||||||
{
|
{
|
||||||
"name": "ellie-patchnotes",
|
"name": "ellie-patchnotes",
|
||||||
"version": "0.0.0",
|
"type": "module",
|
||||||
"private": true,
|
"version": "0.0.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"docusaurus": "docusaurus",
|
"dev": "astro dev",
|
||||||
"start": "docusaurus start",
|
"start": "astro dev",
|
||||||
"build": "docusaurus build",
|
"build": "astro check && astro build",
|
||||||
"swizzle": "docusaurus swizzle",
|
"preview": "astro preview",
|
||||||
"deploy": "docusaurus deploy",
|
"astro": "astro"
|
||||||
"clear": "docusaurus clear",
|
|
||||||
"serve": "docusaurus serve",
|
|
||||||
"write-translations": "docusaurus write-translations",
|
|
||||||
"write-heading-ids": "docusaurus write-heading-ids"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "2.4.1",
|
"@astrojs/check": "^0.4.0",
|
||||||
"@docusaurus/preset-classic": "2.4.1",
|
"astro": "^4.1.1",
|
||||||
"@docusaurus/types": "^2.4.1",
|
"sass": "^1.69.5",
|
||||||
"@mdx-js/react": "^1.6.22",
|
"sharp": "^0.32.5",
|
||||||
"clsx": "^1.1.1",
|
"typescript": "^5.3.3"
|
||||||
"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"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
31
sidebars.js
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
BIN
src/assets/starlog-placeholder-14.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 355 KiB |
BIN
src/assets/starlog-placeholder-18.jpg
Normal file
BIN
src/assets/starlog-placeholder-18.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 376 KiB |
19
src/components/BaseHead.astro
Normal file
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
11
src/components/Footer.astro
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
import '../styles/global.scss';
|
||||||
|
---
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<p>© 2024 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
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
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
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
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
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
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
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
|
30
src/content/releases/5.0.8-beta.md
Normal file
30
src/content/releases/5.0.8-beta.md
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
title: 'Ellie Bot 5.0.8-beta1!'
|
||||||
|
date: '2024-06-21'
|
||||||
|
versionNumber: '5.0.8-beta1'
|
||||||
|
description: 'Ellie Bot version 5.0.8 release notes.'
|
||||||
|
---
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `'setserverbanner` and `'setservericon` commands
|
||||||
|
- Added overloads section to `'h command` which will show you all versions of command usage with param names
|
||||||
|
- You can now check commands for submodules, for example `'cmds SelfAssignedRoles` will show brief help for each of the commands in that submodule
|
||||||
|
- Added dropdown menus for 'mdls and 'cmds (both module and group versions) which will give you the option to see more detailed help for each specific module, group or command respectively
|
||||||
|
- Self-Hosters only:
|
||||||
|
- Added a dangerous cleanup command that you don't have to know about
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Quotes will now use alphanumerical ids (like expressions)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `'verbose` will now be respected for expression errors
|
||||||
|
- Using `'pick` will now correctly show the name of the user who picked the currency
|
||||||
|
- Fixed `'h` not working on some commands
|
||||||
|
- `'langset` and `'langsetd` should no longer allow unsupported languages and nonsense to be typed in
|
||||||
|
|
||||||
|
### Known Issues
|
||||||
|
|
||||||
|
- Db does not populate the models correctly and thus the bot refuses to boot, this will hopefully be fixed by the next beta release.
|
|
@ -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
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
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
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>
|
37
src/pages/index.astro
Normal file
37
src/pages/index.astro
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
---
|
||||||
|
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>
|
||||||
|
<title>Ellie Notes</title>
|
||||||
|
<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
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
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
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
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
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);
|
||||||
|
}
|
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
6
tsconfig.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"exclude": [
|
||||||
|
"dist"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in a new issue