diff --git a/docs/assets/css/styling/padding.css b/docs/assets/css/styling/padding.css
index f858ab48..875bf683 100644
--- a/docs/assets/css/styling/padding.css
+++ b/docs/assets/css/styling/padding.css
@@ -14,3 +14,23 @@
.md-nav__item--section > .md-nav > .md-nav__list {
margin-left: 0.5rem;
}
+
+.md-banner__inner {
+ margin: 0 auto;
+}
+
+.announcement-translation {
+ margin: .5em auto;
+ display: table;
+ color: #64dd17;
+ border: 1px solid #64dd17;
+ border-radius: .01rem;
+ background-color: #64dd171a;
+ padding: .2rem;
+}
+
+.announcement-translation.announcement-translation__not-translatable {
+ color: #ff9100;
+ border: 1px solid #ff9100;
+ background-color: #ff91001a;
+}
\ No newline at end of file
diff --git a/docs/de/bot/commands.md b/docs/de-CH/bot/commands.md
similarity index 69%
rename from docs/de/bot/commands.md
rename to docs/de-CH/bot/commands.md
index b1717e4d..502428fe 100644
--- a/docs/de/bot/commands.md
+++ b/docs/de-CH/bot/commands.md
@@ -30,7 +30,7 @@ Zudem kann anstelle des Präfix auch eine Erwähnung des Bots (`@*Purr*#6875`) v
- Argumente welche mit `...` enden geben an, dass du sie so oft wie du willst anwenden kannst.
///
-### [Spass](#category-fun)
+### [Spass](#category-fun) { #fun }
- [Angry](#angry)
- [Bite](#bite)
- [Blush](#blush)
@@ -60,12 +60,12 @@ Zudem kann anstelle des Präfix auch eine Erwähnung des Bots (`@*Purr*#6875`) v
- [Tail](#tail)
- [Tickle](#tickle)
-### [Gilde](#category-guild)
+### [Gilde](#category-guild) { #guild }
- [Language](#language)
- [Prefix](#prefix)
- [Welcome](#welcome)
-### [Info](#category-info)
+### [Info](#category-info) { #info }
- [Donate](#donate)
- [Emote](#emote)
- [Guild](#guild)
@@ -78,7 +78,7 @@ Zudem kann anstelle des Präfix auch eine Erwähnung des Bots (`@*Purr*#6875`) v
- [Stats](#stats)
- [User](#user)
-### [NSFW](#category-nsfw)
+### [NSFW](#category-nsfw) { #nsfw }
- [Blowjob](#blowjob)
- [Cum](#cum)
- [Fuck](#fuck)
@@ -124,12 +124,12 @@ Lässt dich wütend sein.
**Argumente:**
--
+-
Der/Die Benutzer die du beissen willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.bite @user`
+- `p.bite @benutzer`
///
Beisst die erwähnten Benutzer.
@@ -207,12 +207,12 @@ Lässt dich weinen. :cry:
**Argumente:**
--
+-
Der/Die Benutzer welche du Knuddeln willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.cuddle`
+- `p.cuddle @benutzer`
///
Knuddel die erwähnten Benutzer.
@@ -273,12 +273,12 @@ Gibt dir ein zufälliges Bild/Gif vom Pokémon Evoli. ([Beispiel (Bild)](https:/
**Argumente:**
--
+-
Der Benutzer dem du Essen geben willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.feed @user`
+- `p.feed @benutzer`
///
Lässt dich jemanden was zu essen geben.
@@ -297,12 +297,12 @@ Der angefragte Benutzer kann deine Anfrage akzeptieren oder ablehnen.
**Argumente:**
--
+-
Der Benutzer den du fluffen möchtest. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.fluff @user`
+- `p.fluff @benutzer`
///
Fragt jemanden ob du ihren Schweif fluffen kannst.
@@ -341,12 +341,12 @@ Gibt ein zufälliges Bild von Holo aus dem Manga und Anime "Spice & Wolf". ([Bei
**Argumente:**
--
+-
Der/Die Benutzer welche du Umarmen willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.hug @user`
+- `p.hug @benutzer`
///
Umarmt die erwähnten Benutzer.
@@ -365,12 +365,12 @@ Umarmt die erwähnten Benutzer.
**Argumente:**
--
+-
Der/Die Benutzer welche du küssen willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.kiss @user`
+- `p.kiss @benutzer`
///
Küsst die erwähnten Benutzer.
@@ -426,12 +426,12 @@ Lässt dich liegen
**Argumente:**
--
+-
Der/Die Benutzer welche du lecken willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.lick @user`
+- `p.lick @benutzer`
///
Leckt die erwähnten Benutzer.
@@ -476,12 +476,12 @@ Für die NSFW version dieses Befehls, klicke [hier](#neko-nsfw).
**Argumente:**
--
+-
Der/Die Benutzer welche du streicheln willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.pat @user`
+- `p.pat @benutzer`
///
Streichelt die erwähnten Benutzer.
@@ -500,12 +500,12 @@ Streichelt die erwähnten Benutzer.
**Argumente:**
--
+-
Der/Die Benutzer welche du stupsen willst. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.poke @user`
+- `p.poke @benutzer`
///
Stupst die erwähnten Benutzer.
@@ -565,15 +565,15 @@ Gibt ein zufälliges Bild von Senko-san aus dem Manga und Anime "Sewayaki Kitsun
**Argumente:**
--
+-
Der Benutzer mit welchem man verkuppelt werden soll. Muss eine Erwähnung sein.
--
+-
Zweiter Benutzer welcher mit dem ersten Benutzer verkuppelt werden soll. Muss eine Erwähnung sein. Verwendet standardmässig dich.
**Beispiele:**
-- `p.ship @user`
-- `p.ship @user @user2`
+- `p.ship @benutzer1`
+- `p.ship @benutzer1 @benutzer2`
///
Verkuppelt dich (oder den zweiten Benutzer wenn gegeben) mit dem erwähnten Benutzer.
@@ -608,12 +608,12 @@ Gibt ein zufälliges Bild von Shiro aus dem Manga und Anime "Sewayaki Kitsune no
**Argumente:**
--
+-
Der/Die Benutzer die geohrfeigt werden sollen. Muss eine Erwähnung sein.
**Beispiele:**
-- `p.slap @user`
+- `p.slap @benutzer`
///
Ohrfeigt die erwähnten Benutzer.
@@ -671,12 +671,12 @@ Lässt dich deinen Schwanz wedeln.
**Argumente:**
--
+-
Der/Die Benutzer die du kitzeln willst.
**Beispiele:**
-- `p.tickle @user`
+- `p.tickle @benutzer`
///
Kitzelt die erwähnten Benutzer.
@@ -962,316 +962,331 @@ Gibt dir informationen wie du den Bot einladen kannst.
----
### Ping
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.ping`
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliase:** `Keine`
+
+**Argumente:** `Keine`
-Checks the connection to Discord and how long it takes to edit a message and displays it to you.
+**Beispiele:**
+
+- `p.ping`
+///
+
+Überprüft und zeigt den aktuellen Ping zu Discord und wie lange es dauert, eine Nachricht zu bearbeiten.
----
### Quote
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- The ID of the message to quote.
- -
- Channel to quote the message from. Needs to me a channel mention.
- Only required if the message is not in the same channel as where you executed this command in.
-
- **Examples:**
-
- - `p.quote 123456789123456789`
- - `p.quote 123456789123456789 #otherchannel`
-
-Gets the message using the provided message ID and quotes it.
-The bot won't quote messages, if the channel it is located in is marked as Age-gated (NSFW) while the channel you used the command in is not.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:** `Keine`
+
+**Argumente:**
-----
+-
+ Die ID der Nachricht, welche zitiert werden soll.
+-
+ Optionaler Kanal in welchem die Nachricht ist. Muss eine Erwähnung sein. Verwendet den Kanal in welchem der Befehl ausgeführt wurde, sollte kein Kanal angegeben werden.
+
+**Beispiele:**
+
+- `p.quote 1234567890123456789`
+- `p.quote 1234567890123456789 #andererkanal`
+///
+
+Holt die Nachricht mit der verwendeten ID und zitiert diese.
+Der Bot wird die Nachricht nicht zitieren, wenn diese in einem Altersbeschränkten kanal ist, während der Kanal in welchem der Befehl verwendet wird, nicht Altersbeschränkt ist.
+
+---
### Shards
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Shard`
- - `Shardinfo`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.shards`
-
-Lists the shards the bot currently has including their ping, number of servers and connection status.
-
-??? question "What is a shard?"
- Quote from the [Discord Developer Documentation][shard_info]:
- > As apps grow and are added to an increasing number of guilds, some developers may find it necessary to divide portions of their app's operations across multiple processes. As such, the Gateway implements a method of user-controlled guild sharding which allows apps to split events across a number of Gateway connections. Guild sharding is entirely controlled by an app, and requires no state-sharing between separate connections to operate. While all apps can enable sharding, it's not necessary for apps in a smaller number of guilds.
-
- tl;dr: Shards are - in most simplistic terms - separate gateway connections to Discord, which receive updates and events only for themself and not other shards.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
-----
+**Aliasse:**
+
+- `Shard`
+- `Shardinfo`
+
+**Argumente:** `Keine`
+
+**Beispiele:**
+
+- `p.shards`
+///
+
+Gibt eine Liste aller Shards, welcher der Bot aktuell hat, inklusive deren Ping, Anzahl an Servern und Verbindungsstatus.
+
+/// details | Was ist eine Shard?
+ type: question
+
+Zitat von der [Discord Entwickler Dokumentation][shard_info] (Übersetzt vom Englischen):
+> Wenn Anwendungen wachsen und zu einer zunehmenden Anzahl von Gilden hinzugefügt werden, kann es für einige Entwickler notwendig sein, Teile der Vorgänge ihrer Anwendung auf mehrere Prozesse aufzuteilen. Daher implementiert das Gateway eine Methode der benutzergesteuerten Gildenaufteilung, die es Anwenungen ermöglicht, Ereignisse auf mehrere Gateway-Verbindungen aufzuteilen. Gildenaufteilung wird vvollständig von einer Anwendung gesteuert und erfordert keine gemeinsame Nutzung von Zuständen zwischen separaten Verbindungen, um zu funktionieren. Während alle Answendungen aufteilungen aktivieren können, ist es für Anwendungen in einer kleineren Anzahl von Gilden nicht notwendig.
+
+Kurz zusammengefasst: Shards sind - einfach zusammengefasst - separate Gateway-Verbindungen zu Discord, welche nur Ereignisse und Updates für sich selber erhält und nicht für andere Shards.
+///
+
+---
### Stats
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Stat`
- - `Statistic`
- - `Statistics`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.stats`
-
-Gives some statistics about the bot such as total number of servers, shards, RAM usage and how long it has been running since last restart.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
-----
+**Aliasse:**
+
+- `Stat`
+- `Statistic`
+- `Statistics`
+
+**Argumente:** `Keine`
+
+**Beispiele:**
+
+- `p.stats`
+///
+
+Gibt einige Statistiken über den Bot wie beispielsweise totale anzahl Server, Shards, RAM benutzung und wie lange es seit dem letzten Neustart läuft.
+
+---
### User
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Member`
- - `Userinfo`
- - `Userstats`
-
- **Arguments:**
-
- -
- Optional user to get information from.
- Defaults to you if not specified.
-
- **Examples:**
-
- - `p.user`
- - `p.user @user`
-
-Shows information about yourself or another user, if provided.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
-----
-## NSFW { #category-nsfw }
+- `Member`
+- `Userinfo`
+- `Userstats`
+
+**Argumente:**
+
+-
+ Der Benutzer von welchem du Informationen willst. Muss eine Erwähnung sein. Verwendet standardmässig dich.
+
+**Beispiele:**
+
+- `p.user`
+- `p.user @benutzer`
+///
+
+Zeigt informationen über den erwähnten Benutzer.
+
+---
+## NSFW
### Blowjob
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Bj`
- - `Bjob`
- - `Succ`
-
- **Arguments:**
-
- -
- The User to give a blojob. Needs to be a mention.
-
- **Examples:**
-
- - `p.blowjob @user`
-
-Askes the mentioned user, if you can give them a blowjob.
-The user can accept or deny the request.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
-----
+- `Bj`
+- `Bjob`
+- `Succ`
+
+**Argumente:**
+
+-
+ Der Benutzer, welchem du einen Blowjob geben möchtest. Muss eine Erwähnung sein.
+
+**Beispiele:**
+
+- `p.blowjob @benutzer`
+///
+
+Fragt den erwähnten Benutzer, ob du ihm einen Blowjob geben kannst.
+Der Benutzer kann deine Anfrage annehmen oder ablehnen.
+
+---
### Cum
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Cumming`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.cum`
-
-Returns a random gif of someone cumming.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
-----
+**Aliasse:**
+
+- `Cumming`
+
+**Argumente:** `Keine`
+
+**Beispiele:**
+
+- `p.cum`
+///
+
+Gibt ein zufälliges Gif von jemandem, welcher einen Orgasmus hat.
+
+---
### Fuck
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Sex`
-
- **Arguments:**
-
- -
- The user to have sex with. Needs to be a mention
- -
- Pre-selects anal as sex option.
- -
- Pre-selects hetero sex as sex option.
- -
- Pre-selects yaoi (Gay) sex as sex option.
- -
- Pre-selects yuri (Lesbian) sex as sex option.
-
- **Examples:**
-
- - `p.fuck @user`
- - `p.fuck @user --anal`
- - `p.fuck @user --normal`
- - `p.fuck @user --yaoi`
- - `p.fuck @user --yuri`
-
-Asks the mentioned user if they want to have sex with you.
-
-If no other argument was provided can the asked user select between anal, normal, yaoi (Gay) or Yuri (Lesbian) sex, or deny the request.
-When one of the options has been provided can the asked user only accept or deny the request.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
-----
+- `Sex`
+
+**Argumente:**
+
+-
+ Der Benutzer, mit welchem du Sex haben willst. Muss eine Erwähnung sein.
+-
+ Wählt Analsex als Option aus.
+-
+ Wählt Heterosex als Option aus.
+-
+ Wählt Yaoi (Homosexuellen) Sex als Option aus.
+-
+ Wählt Yuri (Lesbischen) Sex als Option aus.
+
+**Beispiele:**
+
+- `p.fuck @benutzer`
+- `p.fuck @benutzer --anal`
+- `p.fuck @benutzer --normal`
+- `p.fuck @benutzer --yaoi`
+- `p.fuck @benutzer --yuri`
+///
+
+Fragt die Erwähnte Person, ob sie mit dir Sex haben will.
+
+Wenn keine weiteren Argumente gegeben wurden, kann der gefragte Benutzer zwischen Anal, Normal (Hetero), Yaoi (Homosexuell) oder Yuri (Lesbisch) Sex auswählen, oder die Anfrage ablehnen.
+Wenn eine der Argumente gegeben wurde, kann der gefragte Benutzer die Anfrage annehmen oder ablehnen.
+
+---
### Neko { #neko-nsfw }
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Catgirl`
-
- **Arguments:**
-
- -
- Gives a NSFW neko image or gif.
- -
- Receive a gif instead of an image.
-
- **Examples:**
-
- - `p.neko --nsfw`
- - `p.neko --nsfw --gif`
-
-Gives a random image or gif of a NSFW Neko (Cat girl)
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
+
+- `Catgirl`
-----
+**Argumente:**
+
+-
+ Gibt ein/e nicht Jugendfreie/s Bild/Gif.
+-
+ Erhalte ein Gif anstelle eines Bildes.
+
+**Beispiele:**
+
+- `p.neko --nsfw`
+- `p.neko --nsfw --gif`
+///
+
+Gibt ein zufälliges Bild oder Gif einer nicht jugendfreien Neko (Katzenfrau).
+
+---
### Pussylick
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Plick`
- - `Cunni`
-
- **Arguments:**
-
- -
- The User to give cunnylingus. Needs to be a mention.
-
- **Examples:**
-
- - `p.pussylick @user`
-
-Asks the mentioned user if you can lick their pussy.
-The user can accept or deny the request.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
-----
+**Aliasse:**
+
+- `Plick`
+- `Cunni`
+
+**Argumente:**
+
+-
+ Der Benutzer, welchem du Cunnilingus geben willst. Muss eine Erwähnung sein.
+
+**Beispiele:**
+
+- `p.pussylick @benutzer`
+///
+
+Fragt den erwähnten Benutzer, ob du deren Pussy lecken kannst.
+Der Benutzer kann deine Anfrage annehmen oder ablehnen.
+
+---
### Solo
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Girl`
-
- **Arguments:**
-
- -
- Gives a male masturbating instead of a female.
-
- **Examples:**
-
- - `p.solo`
- - `p.solo --male`
-
-Gives a random gif of a girl masturbating.
-When `--male` is provided, returns a gif of a male masturbating instead.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
+
+- `Girl`
-----
+**Argumente:**
+
+-
+ Gibt einen Mann, welcher masturbiert, anstelle einer Frau.
+
+**Beispiele:**
+
+- `p.solo`
+- `p.solo --male`
+///
+
+Gibt ein zufälliges Gif einer Frau, welche masturbiert.
+Wenn `--male` verwendet wird, wird ein Gif eines Mannes welcher masturbiert gegeben.
+
+---
### Threesome
--8<-- "nsfw-only__de.md"
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `3some`
-
- **Arguments:**
-
- -
- The first User to ask to have a threesome with. Needs to be a mention.
- -
- The second user to ask to have a threesome with. Needs to be a mention.
- -
- Will return a gif with only females in it.
- -
- Will return a gif with 2 males and 1 female in it.
-
- **Examples:**
-
- - `p.threesome @user1 @user2`
- - `p.threesome @user1 @user2 --fff`
- - `p.threesome @user1 @user2 --mmf`
-
-Askes two users if they want to have sex with you.
-If no additional argument is provided, will the returned gif show 1 male and 2 females. This can be changed to only females with `--fff` or 2 males and 1 female with `--mmf`.
-The users can accept or deny the request. Only when both accept will the command succeed.
+/// note | Daten
+**Berechtigungen:** `Nichts`
+**Bot benötigt:** `Nichts`
+
+**Aliasse:**
+
+- `3some`
+
+**Argumente:**
+
+-
+ Der erste Benutzer mit welchem du einen Dreier willst. Muss eine Erwähnung sein.
+-
+ Der zweite Benutzer mit welchem du einen Dreier willst. Muss eine Erwähnung sein.
+-
+ Gibt ein Gif, in welchem nur Frauen zu sehen sind.
+-
+ Gibt ein Gif, in welchem 2 Männer und 1 Frau zu sehen sind.
+
+**Beispiele:**
+
+- `p.threesome @benutzer1 @benutzer2`
+- `p.threesome @benutzer1 @benutzer2 --fff`
+- `p.threesome @benutzer1 @benutzer2 --mmf`
+///
+
+Fragt zwei Benutzer, ob diese mit dir einen Dreier haben wollen.
+Wenn keine weiteren Argumente angegeben wurde, wird das Gif einen Mann und zwei Frauen zeigen. Dies kann mit `--fff` zu nur Frauen oder mit `--mmf` zu zwei Männern und einer Frau geändert werden.
+Die Benutzer können die Anfrage annehmen oder ablehnen. Nur wenn beide annehmen ist der Befehl erfolgreich.
+
+---
\ No newline at end of file
diff --git a/docs/de/bot/index.md b/docs/de-CH/bot/index.md
similarity index 100%
rename from docs/de/bot/index.md
rename to docs/de-CH/bot/index.md
diff --git a/docs/de-CH/bot/selfhosting.md b/docs/de-CH/bot/selfhosting.md
new file mode 100644
index 00000000..5c2e0cfc
--- /dev/null
+++ b/docs/de-CH/bot/selfhosting.md
@@ -0,0 +1,171 @@
+---
+title: Selbsthosting
+description: Möchtest du den Bot selbst hosten? Diese Seite erklärt die Details.
+---
+
+[MIT-License]: https://github.com/Andre601/PurrBot/blob/master/LICENSE
+
+[RethinkDB]: https://rethinkdb.com
+
+[PurrBot.java]: https://github.com/purrbot-site/PurrBot/blob/master/src/main/java/site/purrbot/bot/PurrBot.java
+[HttpUtil.java]: https://github.com/purrbot-site/PurrBot/blob/master/src/main/java/site/purrbot/bot/util/HttpUtil.java
+[IDs.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/IDs.java
+[Emotes.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Emotes.java
+[Roles.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Roles.java
+[Links.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Links.java
+
+[random.json]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/random.json
+[data.json]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/data.json
+[lang-files]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/lang
+
+Einige von euch möchten eventuell den Bot auf ihrem eigenen VPS/Server hosten.
+Diese Seite erklärt, wie du den Bot für dich selber hosten kannst.
+
+/// warning | Wichtig!
+Durch das Selbsthosten des Bots erklärst du dich mit den folgenden Bedingungen einverstanden:
+
+- Du follgst der [MIT Lizens][MIT-License] des Bots.
+ - Das bedeutet, dass du Credits an den original Autor (Andre_601) gibst und den Code nicht als deinen eigenen ausgibst.
+- Du akzeptierst und bestätigst, dass du keinen Support für deinen selbst gehosteten Bot erhälst.
+///
+
+## Vorraussetzungen { #requirements }
+Bevor du den Bot hosten kannst musst du sicherstellen, dass die folgenden Vorraussetzungen erfüllt sind.
+
+### RethinkDB
+Du musst [RethinkDB] installiert und aktiv auf deinem Server haben, auf welchem der Bot später laufen wird.
+Dies beinhaltet das erstellen aller nötigen Datenbanken und Tabellen, welche du später in der config.json setzt.
+
+### Java
+Du musst **mindestens** Java 11 installiert und funktionsfähig haben. Neuere Versionen von Java sollten auch funktionieren.
+
+### Einrichten { #setup }
+Wenn du sichergestellt hast, dass die [Vorraussetzungen](#requirements) erfüllt sind, kannst du mit dem vorbereiten des Codes weitermachen.
+
+### Klone das Repository {: #clone-repository }
+Klone/Forke das PurrBot Repository, sofern du dies nicht bereits getan hast, und öffne es in deiner bevorzugten IDE.
+
+### Mache änderungen am Code {: #change-code }
+Du musst bestimmte Abschnitte des Codes ändern, um Fehler zu verhindern.
+Alternativ kannst du den "beta" Modus in der config.json auf `true` stellen, um den Bot im Beta-Modus zu benutzen, welche bestimmte Funktionen wie beispielsweise das posten von Statistiken auf Botlisten deaktiviert.
+
+Wenn du änderungen am Code vornimmst, solltest du die folgenden Code-Zeilen in [PurrBot.java] entfernen oder auskommentieren:
+
+```java title="PurrBot.java"
+public void startUpdater(){
+ scheduler.scheduleAtFixedRate(() -> {
+ getShardManager().setActivity(Activity.of(
+ Activity.ActivityType.WATCHING,
+ getMessageUtil().getBotGame(getShardManager().getGuildCache().size())
+ ));
+
+ if(isBeta()) // (1)
+ return;
+
+ long guilds = getShardManager().getGuildCache().size();
+ long shards = getShardManager().getShardCache().size();
+
+ logger.info("Posting Guild Stats to Bot lists...");
+ for(HttpUtil.BotList botList : HttpUtil.BotList.values()){
+ getHttpUtil().postServerStats(
+ "*Purr*",
+ "6875",
+ guilds,
+ shards,
+ botList,
+ getFileManager().getString("config", botList.getTokenPath())
+ ).whenComplete((botListResult, ex) -> {
+ if(botListResult == null || !botListResult.isSuccess() || ex != null){
+ logger.warn("Error while posting Guild stats to bot list {}!", botList.getName());
+ if(botListResult == null){
+ logger.warn("BotListResult is null!");
+ return;
+ }
+
+ if(ex != null){
+ ex.printStackTrace();
+ return;
+ }
+
+ logger.info("Response Code: {}", botListResult.getResponseCode());
+ logger.info("Response Message: {}", botListResult.getResponseMessage());
+ return;
+ }
+
+ logger.info("Successfully posted stats to {}!", botListResult.getBotList());
+ });
+ }
+ }, 1, 5, TimeUnit.MINUTES);
+}
+```
+
+ 1. Um das Posten auf Botlisten zu deaktivieren, setze den Bot entweder in den Beta-Modus durch die [`config.json`](#config) oder setze alles nach diesem if und vor `}, 1, 5, TimeUnits.MINUTES);` in Kommentare.
+ Du kannst auch die `BotList` Enum in der [`HttpUtil.java`][HttpUtil.java] aktualisieren um auf anderen Botlisten zu posten.
+
+### Verschiedene Classes ändern {: #update-classes }
+Du musst verschiedene Werte in bestimmten Classes ändern, um sicherzustellen, dass deine Version ohne Probleme funktioniert.
+Im detail musst du Inhalte folgender Classes ändern:
+
+- [`IDs.java`][IDs.java] (Enthält verschiedene IDs von Benutzern und Gilden)
+- [`Emotes.java`][Emotes.java] (Enthält verschiedene Emotes welche in Befehlen verwendet werden)
+- [`Links.java`][Links.java] (Enthält verschiedene Links vom Bot)
+
+### Jar Datei erstellen {: #build-jar }
+Wenn du fertig mit deinen änderungen bist, vergiss nicht `gradlew clean shadowJar` auszuführen um eine geshadete Jar zu erstellen, welche alle nötigen Abhängigkeiten hat.
+
+### Config.json {: #config }
+Die `config.json` ist die Hauptdatei des Bots in welcher du verschiedenste informationen setzt, welche durch den Bot verwendet werden.
+Bei der ersten einrichtung wird es die Datei mit folgenden Standardwerten erstellen.
+
+/// details | Standard config.json
+ type: info
+
+```json
+{
+ "bot-token": "TOKEN",
+
+ "beta": false,
+ "debug": false,
+
+ "webhooks": {
+ "guild": "guild-webhook-url",
+ "log": "log-webhook-url"
+ },
+
+ "tokens": {
+ "fluxpoint-dev": "fluxpoint-dev-token",
+
+ "discord-bots-gg": "dbgg-token",
+ "botlist-space": "botlist-token",
+ "discordextremelist-xyz": "debl-token",
+ "discordservices-net": "discordservices-net-token"
+ },
+
+ "database": {
+ "ip": "127.0.0.1",
+ "name": "DatabaseName",
+ "guildTable": "GuildTable"
+ }
+}
+```
+///
+
+Beachte dass du nicht werte für alle Optionen in der config.json setzen musst.
+Sofern du die vorherigen Schritte zum vorbereiten des Bots befolgt hast, musst du nur die folgenen Optionen bearbeiten:
+
+| Option: | Value required: |
+|------------------------|------------------------------------------------------------------------------------|
+| `bot-token` | Gültiger Bot-Token deiner Applikation zum einloggen. |
+| `webhooks.guild` | Eine URL für einen Discord-Webhook zum loggen von beitritt und verlssaen des Bots. |
+| `webhooks.log` | Eine URL für einen Discord-Webhook zum loggen von Bot dis- und reconnects. |
+| `tokens.fluxpoint-dev` | Gültiger Berechtigungstoken für die Fluxpoint.dev API. |
+| `database.ip` | Domain/IP der RethinkDB Datenbank. |
+| `database.name` | Name der Datenbank, welche du erstellt hast. |
+| `database.guildTable` | Name der Tabelle, welche du zum speichern von Gildeneinstellungen erstellt hast. |
+
+### Andere Dateien { #other-files }
+Der Bot besitzt auch andere Dateien, welche du nach Herzenslust bearbeiten kannst.
+
+- [`random.json`][random.json] enthält verschiedenste Nachrichten und Links welche für (oftmals) zufällige Antworten benutzt werden.
+- [`data.json`][data.json] enthält Daten wie aktuelle Gilden-Blacklist, spezielle Benutzer und mehr.
+- Verschiedenste [Sprachdateien][lang-files] welche für die verschiedenen Befehle des Bots verwendet werden.
diff --git a/docs/de-CH/bot/welcome-channel.md b/docs/de-CH/bot/welcome-channel.md
new file mode 100644
index 00000000..558afc53
--- /dev/null
+++ b/docs/de-CH/bot/welcome-channel.md
@@ -0,0 +1,79 @@
+---
+title: Einrichten
+description: Wie du das Willkommenssystem einrichten kannst.
+---
+
+Der Willkommenskanal erlaubt es dir, Benutzer mit einer Nachricht und Bild zu begrüssen, wenn diese den Server betreten.
+
+/// info | Hinweise
+Bevor du den Kanal einrichtest, stelle sicher, dass du folgenden Dinge überprüft hast:
+
+- Du hast `Server verwalten` Berechtigungen oder bist der Servereigentümer.
+- Der Bot hat `Nachrichten senden` und `Dateien anhängen` Berechtigungen für den kanal, in welchem es die Willkommensnachrichten zeigen soll.
+
+Der einfachheit halber werden die gezeigten Befehle den Standardpräfix (`p.`) verwenden.
+Wenn du einen anderen Präfix gesetzt hast, verwende diesen.
+///
+
+/// details | Video Tutorial (Englisch)
+ type: youtube
+
+Hier ist ein Video welcher die unten stehenden Schritte erklärt.
+
+
+///
+
+## Schritt 1: Einen Kanal setzen {: #step-1 }
+
+Du musst zuerst den Kanal setzen, bevor Leute begrüssen kannst.
+Um dies zu tun, führe `p.welcome channel set #kanal` aus, bei welchem `#kanal` der Kanal ist, welchen du zum begrüssen von Leuten verwenden willst.
+
+Setze diese Einstellung mit `p.welcome channel reset` zurück.
+
+## Schritt 2: Einen Hintergrund setzen {: #step-2 }
+
+Setze einen Hintergrund welches im Bild verwendet wird.
+Der Befehl ist `p.welcome bg set ` wo `` ein [gültiger Hintergrund](welcome-images.md#backgrounds) ist.
+
+Setze diese Einstellung mit `p.welcome bg reset` zurück.
+
+## Schritt 3: Ein Icon setzen {: #step-3 }
+
+Du kannst ein Icon setzen, welches auf der rechten seite des Bildes angezeigt wird.
+Vewende `p.welcome icon set ` wo `` ein [gültiges Icon](welcome-images.md#icons) ist.
+
+Setze diese Einstellung mit `p.welcome icon reset` zurück.
+
+## Schritt 4: Eine Schriftfarbe setzen {: #step-4 }
+
+Die Standardschriftfarbe ist nicht auf allen Hintegründen sichtbar. Darum kannst du diese mit `p.welcome color set ` ändern.
+`` muss entweder `hex:rrggbb`, `rgb:r,g,b` oder `random` sein.
+
+Setze diese Einstellung mit `p.welcome color reset` zurück.
+
+## Schritt 5: Eine Nachricht setzen {: #step-5 }
+
+Du kannst deine ganz eigene Willkommensnachricht setzen, welche zusammen mit dem Bild gezeigt wird.
+Um dies zu tun, verwende `p.welcome msg set ` wo `` alles sein kann, was du willst.
+
+### Platzhalter { #placeholders }
+
+| Platzhalter: | Beschreibung: | Beispiel: |
+|---------------------------------------------|-------------------------------------------------------------------------------------|------------------|
+| `{count}` / `{members}` | Die aktuelle Anzahl an Servermitgliedern auf dem Server. | 1000 |
+| `{count_formatted}` / `{members_formatted}` | Die aktuelle Anzahl an Servermitgliedern auf dem Server, aber formatiert. | 1,000 |
+| `{guild}` / `{server}` | Der Servername. | EinDiscord |
+| `{mention}` | Erwähnung des Benutzers, welcher den Server betreten hat. | @EinBenutzer |
+| `{name}` / `{username}` | Name des Benutzers, welcher den Server betreten hat. | EinBenutzer |
+| `{c_mention:}` | Erwähnung des angegebenen Kanals per ID. Funktioniert mit Text und Sprachkanälen. | #EinKanal |
+| `{c_name:}` | Name des angegebenen Kanals per ID. Funktioniert mit jedem Kanaltyp und Kategorien. | EinKanal |
+| `{r_mention:}` | Erwähnung der angegebenen Rolle per ID. | @EineRolle |
+| `{r_name:}` | Name der angegebenen Rolle per ID. | EineRolle |
+| `{tag}` | Der Tag des Benutzers, welcher den Server betreten hat. | EinBenutzer#1234 |
+
+Setze diese Einstellung mit `p.welcome bg reset` zurück.
+
+## Finaler Schritt: Testen {: #final-step }
+
+Du kannst die aktuelle Nachricht und das aktuelle Bild sehen, indem du `p.welcome test` verwendest.
+Dies erstellt eine Nachricht ähnlich der, welche für beitretende Benutzer gezeigt wird.
diff --git a/docs/de/bot/welcome-images.md b/docs/de-CH/bot/welcome-images.md
similarity index 100%
rename from docs/de/bot/welcome-images.md
rename to docs/de-CH/bot/welcome-images.md
diff --git a/docs/de-CH/contribute/formatting-help.md b/docs/de-CH/contribute/formatting-help.md
new file mode 100644
index 00000000..8f5164eb
--- /dev/null
+++ b/docs/de-CH/contribute/formatting-help.md
@@ -0,0 +1,424 @@
+---
+title: Formatierungshilfe
+description: Seite welche die Details zum formatieren der Doks erklärt.
+---
+
+[pymdownx]: https://facelessuser.github.io/pymdown-extensions/
+[MkDocs]: https://www.mkdocs.org
+[MkDocs-Material extension]: https://github.com/facelessuser/mkdocs-material-extensions
+
+[FontAwesome]: https://fontawesome.com/icons?d=gallery&m=free
+[Material Design]: https://materialdesignicons.com/
+[Octicons]: https://octicons.github.com
+[Simple-Icons]: https://simpleicons.org
+
+Diese Seite zeigt all die verschiedenen Markdown formatierungssyntaxe, welche in der Dokumentation verwendet werden können.
+Bitte beachte dass nicht alle Styles im Standard Markdown verfügbar sind, welche mit MkDocs kommen und bestimmte Erweiterungen benötigen.
+Jede benötigte Erweiterung wird erwähnt.
+
+## Listen { #lists }
+Unnummerierte und nummerierte Listen haben eine leicht andere Formatierung als die, welche du wahrscheinlich gewohnt bist.
+Damit eine Liste funktioniert benötigen sie eine leere Zeile zwischen der Liste selbst und jeglichem Text darüber.
+
+//// example | Listen Beispiel
+/// tab | Markdown
+```markdown
+Diese Liste funktioniert.
+
+- Eintrag 1
+- Eintrag 2
+- Eintrag 3
+
+----
+Diese Liste jedoch nicht.
+- Eintrag 1
+- Eintrag 2
+- Eintrag 3
+```
+///
+
+/// tab | Ergebnis
+Diese Liste funktioniert.
+
+- Eintrag 1
+- Eintrag 2
+- Eintrag 3
+
+----
+Diese Liste jedoch nicht.
+- Eintrag 1
+- Eintrag 2
+- Eintrag 3
+///
+////
+
+Zusätzlich zu den obigen Bedingungen musst du auch 4 Leerzeichen verwenden anstelle der üblichen 2, sofern du die Liste einrücken willst.
+
+//// example | Einrück Beispiel
+/// tab | Markdown
+```markdown
+Funktionierendes Einrücken:
+
+- Eintrag 1
+ - Eintrag 1.1
+- Eintrag 2
+
+----
+Nicht funktionierendes Einrücken:
+
+- Eintrag 1
+ - Eintrag 1.1
+- Eintrag 2
+```
+///
+
+/// tab | Ergebnis
+Funktionierendes Einrücken:
+
+- Eintrag 1
+ - Eintrag 1.1
+- Eintrag 2
+
+----
+Nicht funktionierendes Einrücken:
+
+- Eintrag 1
+ - Eintrag 1.1
+- Eintrag 2
+///
+////
+
+## Info boxen { #info-boxes }
+
+Du hast doch sicher diese nett aussehenden Boxen bemerkt, welche unterschiedlichste Informationen enthalten.
+Diese sind alls "callouts" oder "admonitions" bekannt und werden durch die [Pymdown Erweiterung `blocks.admonition`][pymdownx] bereitgestellt.
+
+///// example | Box Beispiel
+//// tab | Markdown
+```markdown
+/// info | Titel
+Regeln über Markdown sind immernoch aktiv.
+
+- z.B. Listen
+- benötigen noch immer eine leere Zeile
+///
+
+----
+
+/// info
+Der Titel kann weggelassen werden.
+Die Box wird dann den Namen des Typs verwenden.
+///
+```
+////
+
+//// tab | Ergebnis
+/// info | Titel
+Regeln über Markdown sind immernoch aktiv.
+
+- z.B. Listen
+- benötigen noch immer eine leere Zeile
+///
+
+----
+
+/// info
+Der Titel kann weggelassen werden.
+Die Box wird dann den Namen des Typs verwenden.
+///
+////
+/////
+
+### Arten { #types }
+
+Admonition Boxen haben verschiedene Arten verfügbar von welchen du wählen kannst:
+
+/// note
+///
+
+/// abstract
+///
+
+/// info
+///
+
+/// tip
+///
+
+/// success
+///
+
+/// question
+///
+
+/// warning
+///
+
+/// failure
+///
+
+/// danger
+///
+
+/// bug
+///
+
+/// example
+///
+
+/// quote
+///
+
+## Kollabierbare Info Boxen (Details) { #details }
+
+Dieses Feature benötigt die `blocks.details` Erweiterung von [Pymdown extensions][pymdownx].
+
+Details haben das selbe Design wie Admonition Boxen, sind aber darin anders, dass sie geöffnet und geschlossen werden können.
+Der Syntax ist derselbe wie mit [Admonition Boxes](#info-boxes) mit dem Unterschied, dass `details` als Identifier verwenden und dass du den `type` als Option angeben musst.
+
+///// example | Kollabierbare Box Beispiel
+//// tab | Markdown
+```markdown
+/// details | Titel
+ type: info
+
+Diese Box ist standardmässig zu.
+///
+
+----
+
+/// details | Titel
+ type: info
+ open: true
+
+Das hinzufügen von `open:true` öffnet sie standardmässig.
+///
+```
+////
+
+//// tab | Ergebnis
+/// details | Titel
+ type: info
+
+Diese Box ist standardmässig zu.
+///
+
+----
+
+/// details | Titel
+ type: info
+ open: true
+
+Das hinzufügen von `open:true` öffnet sie standardmässig.
+///
+////
+/////
+
+## Tabs
+
+Dieses Feature benötigt die `blocks.tab` Erweiterung von [Pymdown extensions][pymdownx].
+
+Es erlaubt dir, Tabs zu erstellen zwischen welchen du hin und her wechseln kannst um unterschiedlichen Inhalt zu zeigen. Auf dieser seite wird es für die `Markdown` und `Ergebnis` tabs verwendet.
+Der Syntax ist derselbe wie mit [Admonition Boxes](#info-boxes) mit dem Unterschied, dass `details` als Identifier verwenden und dass du keine Art angeben kannst.
+
+///// example | Tabs Beispiel
+//// tab | Markdown
+```markdown
+/// tab | Tab 1
+Du kannst weiter tabs hinzufügen...
+///
+
+/// tab | Tab 2
+...indem du weitere `/// tab | title ... ///` anhängst.
+///
+
+/// tab | Tab A
+ new: true
+
+Das hinzufügen von `new: true`...
+///
+
+/// tab | Tab B
+...erstellt ein neues Set von tabs.
+///
+```
+////
+
+//// tab | Ergebnis
+/// tab | Tab 1
+Du kannst weiter tabs hinzufügen...
+///
+
+/// tab | Tab 2
+...indem du weitere `/// tab | title ... ///` anhängst.
+///
+
+/// tab | Tab A
+ new: true
+
+Das hinzufügen von `new: true`...
+///
+
+/// tab | Tab B
+...erstellt ein neues Set von tabs.
+///
+////
+/////
+
+## Links
+
+Wir verwenden `MagicLink` von [Pymdown extensions][pymdownx] um Links automatisch klickbar zu machen. Dies ist leider kein Standardverhalten in Markdown.
+
+//// example | Link Beispiel
+/// tab | Markdown
+```markdown
+https://purrbot.site
+```
+///
+
+/// tab | Ergebnis
+https://purrbot.site
+///
+////
+
+Zusätzlich können wir eine Repository oder einen GitHub Benutzer verlinken, indem wir einfach die Formate `@benutzer/repo` respektive `@benutzer` verwenden.
+Dies funktioniert auch mit Twitter Benutzers, indem der Name mit `twitter:` als Präfix versehen wird (`@twitter:benutzername`).
+
+//// example | Mention Beispiel
+/// tab | Markdown
+```markdown
+@purrbot-site
+@purrbot-site/Docs
+@twitter:TruePurrBot
+```
+///
+
+/// tab | Ergebnis
+@purrbot-site
+@purrbot-site/Docs
+@twitter:TruePurrBot
+///
+////
+
+## Emojis
+
+Wir verwenden `Emojis` von [PyMdown extensions][pymdownx] um das verwenden von Emojis durch das bekannte `:emoji:` Muster zu ermöglichen.
+Zudem verwenden wir auch [MkDocs-Material Extension] welches Unterstützung für SVG Icons von [FontAwesome], [Material Design], [Octicons] und [Simple Icons][simple-icons] durch das selbe Format hinzufügt.
+
+Beachte das anders als Emojis, die benutzerdefinierten welche von MkDocs-Material Extension hinzugefügt werden mit der seite von welcher sie kommen gepräfixt werden müssen.
+
+- `fontawesome-brands` für Icons von Marken
+- `fontawesome-regular` für alle Standardicons
+- `fontawesome-solid` für alle soliden Icons
+- `material` für die Material Design Icons
+- `octicons` für die Octicons Icons
+- `simple` für die Simple Icons Icons
+
+//// warning | Hinweis über FontAwesome und Octicons
+/// tab | FontAwesome
+Die MkDocs-Material Extension ist nur in der lage, die gratis FontAwesome Icons zu verwenden! Premium Icons sind nicht unterstützt.
+///
+
+/// tab | Octicons
+Da Octicons ihre Icons in 16px und 24px formaten anbietet musst du `-16` oder `-24` an den Namen anhängen, abhängig davon, welches format du verwenden willst.
+Beispie: Anstelle von `:octicons-repo:` verwendest du entweder `:octicons-repo-16:` oder `:octicons-repo-24:`
+///
+////
+
+//// example | Emoji/Icons Beispiele
+/// tab | Markdown
+```markdown
+Normale Emojis:
+
+- :smile:
+- :heart:
+
+FontAwesome Icons (Marken):
+
+- :fontawesome-brands-github:
+- :fontawesome-brands-discord:
+
+FontAwesome Icons (Regulär):
+
+- :fontawesome-regular-bell:
+- :fontawesome-regular-bell-slash:
+
+FontAwesome Icons (Solide):
+
+- :fontawesome-solid-bell:
+- :fontawesome-solid-bell-slash:
+
+Material Design:
+
+- :material-sync:
+- :material-alert:
+
+Octicons:
+
+- :octicons-repo-24:
+- :octicons-git-pull-request-24:
+
+Simple-Icons:
+
+- :simple-mastodon:
+- :simple-simpleicons:
+```
+///
+
+/// tab | Ergebnis
+Normale Emojis:
+
+- :smile:
+- :heart:
+
+FontAwesome Icons (Marken):
+
+- :fontawesome-brands-github:
+- :fontawesome-brands-discord:
+
+FontAwesome Icons (Regulär):
+
+- :fontawesome-regular-bell:
+- :fontawesome-regular-bell-slash:
+
+FontAwesome Icons (Solide):
+
+- :fontawesome-solid-bell:
+- :fontawesome-solid-bell-slash:
+
+Material Design:
+
+- :material-sync:
+- :material-alert:
+
+Octicons:
+
+- :octicons-repo-24:
+- :octicons-git-pull-request-24:
+
+Simple-Icons:
+
+- :simple-mastodon:
+- :simple-simpleicons:
+///
+////
+
+## Knöpfe { #buttons }
+Durch das verwenden der List Attribute Erweiterung können wir eingebettete Links (`[text](link)`) in Knöpfe verwandeln indem wir `{ .md-button }` anhängen.
+
+//// example | Button Example
+/// tab | Markdown
+```markdown
+[Zur Webseite](https://purrbot.site){ .md-button }
+```
+///
+
+/// tab | Ergebnis
+[Zur Webseite](https://purrbot.site){ .md-button }
+///
+////
+
+## Letzte Worte { #final-words }
+
+Dies sind all die Wichtigen dinge welche du über den markdown Syntax dieser Dokumentation wissen musst.
+Für alle anderen Markdown-relevanten Dinge welche hier nicht erwähnt wurden kann man davon ausgehen, dass die normale formatierung (z.B. `*kursiv*`, `**fett**`, etc.) verwendet wird.
diff --git a/docs/de-CH/contribute/index.md b/docs/de-CH/contribute/index.md
new file mode 100644
index 00000000..8bc9e15e
--- /dev/null
+++ b/docs/de-CH/contribute/index.md
@@ -0,0 +1,37 @@
+---
+title: Mitmachen
+description: Hilf uns den Bot, die Webseite oder diese Dokumentation zu verbessern!
+---
+
+[doc]: https://github.com/purrbot-site/Docs
+[contributing_docs]: https://github.com/purrbot-site/Docs/blob/master/CONTRIBUTING.md
+
+[purr]: https://github.com/purrbot-site/PurrBot
+[contributing_bot]: https://github.com/purrbot-site/PurrBot/blob/master/CONTRIBUTING.md
+
+[imageapi]: https://github.com/purrbot-site/ImageAPI
+
+Wir sind immer über Leute froh, welche uns helfen wollen, unsere verschiedenen Projekte zu verbessern.
+Aber bevor du dich blind hineinstürzt, behalte die folgenden Dinge im Hinterkopf.
+
+## Dokumentation/Wiki { #documentation-wiki }
+Die Dokumentation (Die Seite, welche du gerade anschaust) ist [hier][doc] zu finden und wir sind über jede Verbesserung froh, sei es hinzufügen von fehlenden Informationen, das beheben von Designfehlern oder sogar das einfache korrigieren von Schreibfehlern.
+
+Bevor du startest, stelle sicher, dass du dir die [Formattierungshilfe](formatting-help.md) durchgelesen hast, um alles wichtige übder das Design der Doks zu wissen.
+Stelle auch sicher, dass du dir die [CONTRIBUTING.md Datei (Englisch)][contributing_docs] für wichtige Dinge über das Design der Dokumentation durchgelesen hast.
+
+## Bot
+Ich (Andre_601) bin nicht der beste Entwickler, darum können einige Problematische Programmierentscheidungen im Code von [\*Purr\*][purr] vorhanden sein.
+Deswegen bin ich immer über den erhalt von Pull requests froh, welche dinge verbessern und fixen.
+Bitte stelle sicher, dass du dir die [Mitmach Richtlinien][contributing_bot] für die Repository durchgelesen hast.
+
+## API
+Ähnlich zum Bot ist die API nicht das beste im Sinne von Code.
+Sei so frei und übermittle Pull requests zur verbesserung dieser.
+
+Den Quellcode kannst du [hier][imageapi] finden.
+
+## Übersetzungen { #translations }
+
+Wir begrüssen jede Art von Übersetzung. Dies kann auch Sprachen beinhalten, die nicht existieren (Welche Witzsprachen sind wie Klingonisch... Keinen Hass gegen diese Leute).
+Um ein Übersetzer zu werden, lies dir die [Übersetzungen seite](translate/index.md) durch.
diff --git a/docs/de-CH/contribute/translate/index.md b/docs/de-CH/contribute/translate/index.md
new file mode 100644
index 00000000..7cabc12f
--- /dev/null
+++ b/docs/de-CH/contribute/translate/index.md
@@ -0,0 +1,43 @@
+---
+title: Übersetzungen
+description: Finde heraus, wie du den Bot in andere Sprachen übersetzen kannst.
+---
+
+[discord]: https://purrbot.site/discord
+[crowdin]: https://crowdin.com
+
+/// warning | Wichtig
+Diese Seite behandelt nur, wie du den Discord Bot übersetzen kannst.
+Wenn du gerne diese Doks übersetzen willst, gehe zur [Dokumentation übersetzen](translate-docs.md) Seite.
+///
+
+\*Purr\* ist in verschiedensten Sprachen verfügbar.
+Jede dieser Sprachen wurde mit :heart:, Mühe und einigen Buchstaben von der Community erstellt.
+
+Wenn du gerne den Bot in eine Sprache übersetzen willst, welche noch nicht für den Bot vorhanden ist, oder du gerne helfen willst eine existierende Übersetzung zu verbessern, folge diesem einfachen Guide um herauszufinden, wie du dies tun kannst.
+
+## Schritt 1: Tritt dem Discord Server bei { #step-1 }
+Du musst dem [~Nya Discord Server][discord] beitreten, da es der Hauptangelpunkt ist um Benachrichtigungen über neue Zeilen welche eine Übersetzung brauchen zu erhalten.
+Das verlassen des Discords als Übersetzer hat zur folge, dass du als Übersetzer von dem Übersetzungsproject entfernt wirst!
+
+## Schritt 2: Bitte darum, hinzugefügt zu werden { #step-2 }
+Sobald du auf dem Discord Server bist, solltest du `andre601` kontaktieren um als Übersetzer hinzugefügt zu werden.
+Sag ihm einfach, welche Sprache du übersetzen willst.
+
+/// info | Neue Sprache
+Sollte die Sprache, welche du übersetzen willst, nicht im Projekt vorhanden sein, wird sie von Andre erstellt und du kannst zum [nächsten Schritt](#step-3) wechseln.
+///
+
+## Schritt 3: Tritt dem Crowdin Projekt bei { #step-3 }
+Das Übersetzungsprojekt ist auf [Crowdin] gehostet, welches du auch unter folgender URL finden kannst: https://lang.purrbot.site
+
+Sobald du als Übersetzer auf dem Discord Server hinzugefügt wurdest, kannst du nun eine Anfrage an das Projekt senden, um hinzugefügt zu werden.
+Du musst zuerst dich in dein Konto auf Crowdin einloggen oder eines erstellen. Danach wählst du die Sprache aus, welche du für den Bot übersetzen willst. Du solltest einen `Join` Knopf sehen mit welcher du eine Anfrage senden kannst.
+Wenn alles gut geht wirst du hinzugefügt.
+
+## Du bist fertig! { #done }
+Gratuliere! Sofern du allen obigen Schritten gefolgt bist, bist du nun ein Übersetzer des Bot und kannst damit anfangen, ihre Nachrichten in deine Sprache zu übersetzen.
+
+/// warning | Wichtige Hinweise
+Sollte deine Sprache für längere Zeit und ohne Grund von dir nicht übersetzt werden, wird sie vom Projekt entfernt und du wirst als Übersetzer entfernt.
+///
\ No newline at end of file
diff --git a/docs/de-CH/contribute/translate/translate-docs.md b/docs/de-CH/contribute/translate/translate-docs.md
new file mode 100644
index 00000000..bdfaecef
--- /dev/null
+++ b/docs/de-CH/contribute/translate/translate-docs.md
@@ -0,0 +1,173 @@
+---
+title: Dokumentation übersetzen
+description: Wie du diese Dokumentation in eine andere Sprache übersetzen kannst.
+---
+
+Unser Ziel ist es, diese Doks in so vielen Sprachen wie nur möglich anzubieten, um sie jedem verfügbar zu machen.
+
+Um dies zu erreichen benötigen wir deine Hilfe! Solltest du eine andere Sprache kennen, welche hier nicht gezeigt wird, und möchtest du beim übersetzen mithelfen, dann lies weiter.
+
+## Vorraussetzungen { #prerequisites }
+
+Bevor du mit dem übersetzen startest, solltest du sicherstellen, dass du folgendes vorbereitet hast:
+
+- Du hast Erfahrung mit Git (Zum pullen und committen von Änderungen)
+- Du hast mindestens Python 3.11 installiert
+- Du hast MkDocs und alle nötigen Abhängigkeiten installiert.
+ Verwende einfach `pip install -U -r requirements.txt` im root deiner lokalen Repo um alle Abhängigkeiten zu installieren und zu aktualisieren.
+
+## Übersetzen { #translating }
+
+### Doks Struktur { #docs-structure }
+
+Wir verwenden das `mkdocs-static-i18n` Plugin mit der `folder` Einstellung um die verschiedenen Übersetzungen zu erstellen. Was dies bedeutet ist, dass jede Sprache in ihrem eigenen Ordner ist.
+
+Als ein Beispiel ist hier die Struktur der Englischen (Standard) Sprache innerhalb des `docs` Ordners:
+```txt title="Ordnerstruktur"
+docs/
+└── en/
+ ├── api/
+ │ └── index.md
+ ├── bot/
+ │ ├── commands.md
+ │ ├── index.md
+ │ ├── selfhosting.md
+ │ ├── welcome-channel.md
+ │ └── welcome-images.md
+ ├── contribute/
+ │ ├── translate/
+ │ │ ├── index.md
+ │ │ └── translate-docs.md
+ │ ├── formatting-help.md
+ │ └── index.md
+ ├── credits/
+ │ └── index.md
+ ├── legal/
+ │ ├── api.md
+ │ ├── bot.md
+ │ ├── index.md
+ │ └── website.md
+ └── index.md
+```
+
+Um mit dem übersetzen der Doks zu starten, kopiere die folgenden Dateien und Ordner vom `en` Ordner in deinen eigenen Unterordner. Stelle sicher dass der Name des Unterordners einem [existierenden Sprach Identifier][languages]{ target="_blank" rel="nofollow" } entspricht:
+```txt title="Dateien zum kopieren"
+docs/
+└── en/
+ ├── bot/
+ │ ├── commands.md
+ │ ├── index.md
+ │ ├── selfhosting.md
+ │ ├── welcome-channel.md
+ │ └── welcome-images.md
+ ├── contribute/
+ │ ├── translate/
+ │ │ ├── index.md
+ │ │ └── translate-docs.md
+ │ ├── formatting-help.md
+ │ └── index.md
+ ├── credits/
+ │ └── index.md
+ ├── legal/
+ │ └── index.md
+ └── index.md
+```
+
+### Deine Sprache hinzufügen { #adding-your-language }
+
+Damit das `mkdocs-static-i18n` Plugin deine Sprache erkennt musst du diese als neuen Eintraf zur `languages` Einstellung des `i18n` Plugin in der `mkdocs.yml` hinzufügen.
+Die einfachste Struktur sieht ähnlich wie diese aus (`de-CH` (Schweizer Hochdeutsch) wird als Beispiel verwendet):
+
+```yaml title="mkdocs.yml"
+ - search
+ - neoteroi.mkdocsoad:
+ use_pymdownx: true
+ - i18n:
+ docs_structure: folder
+ languages:
+ - locale: en
+ default: true
+ name: English
+ build: true
+ # ...other languages
+ - locale: de-CH # (1)
+ name: Deutsch (Schweiz) # (2)
+ build: true
+ site_name: PurrBot Dokumentation
+ site_description: 'API-Dokumentation und Wiki von *Purr*'
+ copyright: | # (3)
+ Dokumentation mit
+
+ gemacht und unter der
+ MIT-Lizenz geteilt.
+ extra: # (4)
+ translate:
+ missing_translation: 'Diese Seite wurde noch nicht übersetzt.'
+ not_translatable: 'Diese Seite kann nicht übersetzt werden und ist darum nur auf Englisch verfügbar.'
+ footer: |
+ Erstellt mit MkDocs,
+ Material for MkDocs und
+ Pymdown Extensions.
+ nav_translations: # (5)
+ # Welcome system
+ Welcome-System: Willkommenssystem
+ # Contributing
+ Contributing: Mitmachen
+ Translations: Übersetzungen
+ # Legal
+ Legal: Rechtliches
+```
+
+ 1. Ersetze diesen Eintrag mit einer [gültigen Sprache Option][languages]{ target="_blank" rel="nofollow" }.
+ 2. Dies wird in der Sprachauswahl angezeigt.
+ 3. Dies wird zum ändern des Copyright text im Footer verwendet. Die `` class sollte - Mit ausnahme des `title` Attributes - nicht geändert werden.
+ 4. Dies wird verwendet um Zeilen im "extra" Abschnitt der Config zu übersetzen.
+
+ - `missing_translation` wird auf Seiten angezeigt, welche noch nicht für diese Sprache existieren.
+ - `not_translatable` wird auf Seiten angezeigt, welche nicht übersetzt werden können (Seiten mit `not_translatable: true` im Frontmatter).
+ - `footer` ändert den `Erstellt mit ...` text im Footer der Seite.
+ 5. Dies wird verwendet, um bestimmte deile der Navigation zu übersetzen, welche nicht durch andere Methoden übersetzt werden können.
+
+Dieses Beispiel würde nun nach Dateien im `de-CH` Ordner schauen und diese laden. Du solltest natürlich deinen eigenen Sprach Identifikator als Ordnername verwenden.
+
+### Spezielle Hinweise { #special-notes }
+
+#### Seitentitel und -beschreibung { #page-title-and-description }
+
+Der Seitentitel sollte wann immer über das YAML Frontmatter übersetzt werden.
+
+#### Kopfzeilen { #headers }
+
+Kopfzeilen sollten übersetzt werden. Um jedoch Kreuz-Sprach-Navigation zu ermöglichen, solltest du `{ #:id }` nach der Kopfzeile hinzufügen wo `:id` die ID der originalen Kopfzeile ist.
+
+Als ein Beispiel: `## Some header` wird zu `## Lorem ipsum { #some-header }`, wodurch die Kopfzeile übersetzt, nicht aber deren ID geändert wird.
+Sollte die Kopfzeile bereits eine `{ #:id }` am Ende besitzen musst du nur die Kopfzeile übersetzen, jedoch nicht eine weitere id hinzufügen.
+
+#### Unübersetzbare Seiten { #untranslatable-pages }
+
+Es gibt einige Seiten welche aus verschiedenen Gründen nicht übersetzt werden können.
+Um Fehler zu vermeide, füge diese Seiten nicht in deiner Übersetzung hinzu (Lösche sie, sollten sie in deinem Ordner existieren).
+
+Die folgenden Seiten sollten nicht in deiner Übersetzung existieren (Pfad relativ zu `docs/en/`):
+
+- `api/index.md`
+- `legal/api.md`
+- `legal/bot.md`
+- `legal/website.md`
+
+#### Snippets
+
+Snippets sind Dateien welche in `theme/.snippets/` existieren und sollten auch übersetzt werden.
+Um dies zu tun, kopiere das Snippet, ändere das `__en` zu deinem Sprachcode (z.B. `__de-CH`) und übersetze den Inhalt. Stell sicher, dass du dinge wie Admonition formatierung beibehälst.
+
+#### Nicht zu übersetzende Inhalte { #untranslatable-content }
+
+Die folgenden Inhalte sollten **nicht** übersetzt werden und als solche beibehalten werden:
+
+- Kopfzeilen von Bildnamen in [Bilder](../../bot/welcome-images.md) (z.B. `color_black`).
+- Befehlsnamen und Aliasse in [Befehle](../../bot/commands.md) (z.B. `bite`).
+- Der Name des Bot (`*Purr*`).
+- Projektnamen und Benutzernamen in [`Credits`](../../credits/index.md).
+- Jegliche Markennamen (Discord, YouTube, etc.) ausser sie haben einen Namen speziell für deine Sprache.
+
+[languages]: https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#site-language
\ No newline at end of file
diff --git a/docs/de-CH/credits/index.md b/docs/de-CH/credits/index.md
new file mode 100644
index 00000000..583abe89
--- /dev/null
+++ b/docs/de-CH/credits/index.md
@@ -0,0 +1,31 @@
+---
+title: Credits
+description: Finde heraus, welche coole quelloffene Software *Purr* und die API funktionieren lässt.
+---
+
+Diese Seite zeigt verschiedene Credits für all die unterschiedlichen Dinge welche entweder von \*Purr\* oder von einem anderen Projekt auf der purrbot.site Organisation verwendet wird.
+
+## Verwendete Bibliotheken { #used-libraries-and-utilities }
+
+### Bot
+Dank gilt den folgenden Leuten, welche Ihre Bibliothek bereitstellen, welche von \*Purr\* verwendet werden:
+
+| Bibliothek | Lizenz | Verwendet für |
+|-----------------------------------|------------|---------------------------------------------------------------|
+| @ben-manes/Caffeine | Apache 2.0 | Vorrübergehendes Speichern von verschiedenen Daten. |
+| @MinnDevelopment/Discord-Webhooks | Apache 2.0 | Senden von Webhook-Nachrichten in Discord. |
+| @google/Gson | Apache 2.0 | Parsen von und zu JSON. |
+| @discord-jda/JDA | Apache 2.0 | Einloggen und verwenden der Discord API. |
+| @rainestormee/jda-command | Apache 2.0 | Hinzufügen und verwalten von Befehlen in Discord. |
+| @rethinkdb/rethinkdb | Apache 2.0 | Datenbank handhaben. |
+
+### Wiki
+Dank gilt den folgenden Personsn, welche Software bereitstellen, welche diese Dokumentation möglich machen!
+
+| Software | Lizenz | Verwendet für |
+|---------------------------------|--------------|------------------------------------------------|
+| @mkdocs/mkdocs | BSD-2-Clause | Erstellen dieser Dokumentation. |
+| @squidfunk/mkdocs-material | MIT | Design dieser Dokumentation. |
+| @facelessuser/pymdown-extension | MIT | Unzählige Erweiterungen für die Dokumentation. |
+| @neoteroi/mkdocs-plugins | MIT | REST-API Dokumentation. |
+| @ultrabug/mkdocs-static-i18n | MIT | Übersetzungen der Dokumentation |
diff --git a/docs/de/index.md b/docs/de-CH/index.md
similarity index 97%
rename from docs/de/index.md
rename to docs/de-CH/index.md
index 47cdd6e6..e6508407 100644
--- a/docs/de/index.md
+++ b/docs/de-CH/index.md
@@ -10,7 +10,7 @@ button:
Willkommen auf der PurrBot Dokumentation!
Diese Seiten behandeln verschiedenste Dinge für die API, den Bot und einige andere.
-Möchtest du dabei helpen, diese Seiten zu verbessern? Wunderbar! Schau dir einfach den [Mitmachen Bereich](#contributing) an um zu erfahren, wie das geht.
+Möchtest du dabei helfen, diese Seiten zu verbessern? Wunderbar! Schau dir einfach den [Mitmachen Bereich](#contributing) an um zu erfahren, wie das geht.
## Pages
diff --git a/docs/de-CH/legal/index.md b/docs/de-CH/legal/index.md
new file mode 100644
index 00000000..89390491
--- /dev/null
+++ b/docs/de-CH/legal/index.md
@@ -0,0 +1,17 @@
+---
+title: Rechtliche Informationen
+description: Rechtliche Informationen über den Bot, die API und die Webseite.
+---
+
+Diese Seiten enthalten alle rechtlichen informationen welche eventuell benötigt werden, um verwirrungen und mögliche Probleme zu verhindern.
+Wir empfehlen wärmstens, diese Seiten komplett durchzulesen um eventuelle zukünftige Missverständnisse zu vermeiden.
+
+Du kannst rechtliche Seiten für folgende Service finden:
+
+- [\*Purr\*](bot.md) - Discord Bot
+- [API](api.md) - Die ImageAPI welche von \*Purr\* verwendet wird
+- [Website](website.md) - Die Webseite welche man unter https://purrbot.site finden kann
+
+/// warning | Wichtig
+Aus verschiedenen Gründen sind die oben gelisteten Seiten nur in Englisch verfügbar.
+///
\ No newline at end of file
diff --git a/docs/de/api/index.md b/docs/de/api/index.md
deleted file mode 100644
index b0752314..00000000
--- a/docs/de/api/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: API
-description: 'Dokumentation über die ImageAPI unter https://purrbot.site/api'
-
-hide:
- - navigation
----
-
-/// info | Hinweis
-Die gezeigte API Dokumentation ist auto-generiert und nur in Englisch verfügbar.
-///
-
-[OAD(./docs/assets/imageapi.json)]
\ No newline at end of file
diff --git a/docs/de/bot/selfhosting.md b/docs/de/bot/selfhosting.md
deleted file mode 100644
index d1fd5a06..00000000
--- a/docs/de/bot/selfhosting.md
+++ /dev/null
@@ -1,167 +0,0 @@
----
-title: Selfhosting
-description: Want to selfhost the Bot? This page explains the details.
----
-
-[MIT-License]: https://github.com/Andre601/PurrBot/blob/master/LICENSE
-
-[RethinkDB]: https://rethinkdb.com
-
-[PurrBot.java]: https://github.com/purrbot-site/PurrBot/blob/master/src/main/java/site/purrbot/bot/PurrBot.java
-[HttpUtil.java]: https://github.com/purrbot-site/PurrBot/blob/master/src/main/java/site/purrbot/bot/util/HttpUtil.java
-[IDs.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/IDs.java
-[Emotes.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Emotes.java
-[Roles.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Roles.java
-[Links.java]: https://github.com/Andre601/PurrBot/blob/master/src/main/java/site/purrbot/bot/constants/Links.java
-
-[random.json]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/random.json
-[data.json]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/data.json
-[lang-files]: https://github.com/Andre601/PurrBot/blob/master/src/main/resources/lang
-
-Some of you may want to selfhost the bot on your own VPS/server.
-This page explains how you can selfhost the bot for yourself.
-
-!!! warning "Important!"
- By selfhosting the bot will you agree to the following terms:
-
- - You follow the [MIT-License] of the bot.
- - This means that you give credit to the original author (Andre_601) and won't claim this code as your own.
- - You aknowledge and agree that you won't receive any support for your selfhosted bot.
-
-## Requirements
-Before you can run the bot will you need to make sure that the following requirements are met.
-
-### RethinkDB
-You need to have [RethinkDB] installed and running on your server, where the bot will later run.
-This also includes creating databases and tables to later set in the config.json.
-
-### Java
-You need **at least** Java 11 to be installed and working. Newer versions of Java should work too.
-
-## Setup
-When you made sure, that the [requirements](#requirements) are met, can you continue with preparing the code.
-
-### Clone the repository {: #clone-repository }
-Clone/Fork the PurrBot repository, if you didn't already and open it in your preferred IDE.
-
-### Make changes to code {: #change-code }
-You need to alter specific parts of the code, to prevent errors from appearing.
-Alternatively could you set "beta" in the config.json to true, to set the bot as Beta-Bot, disabling certain functionalities such as posting stats to Bot Lists.
-
-When making changes to the code should you remove or uncomment the following code-snippets in [PurrBot.java]:
-
-```java title="PurrBot.java"
-public void startUpdater(){
- scheduler.scheduleAtFixedRate(() -> {
- getShardManager().setActivity(Activity.of(
- Activity.ActivityType.WATCHING,
- getMessageUtil().getBotGame(getShardManager().getGuildCache().size())
- ));
-
- if(isBeta()) // (1)
- return;
-
- long guilds = getShardManager().getGuildCache().size();
- long shards = getShardManager().getShardCache().size();
-
- logger.info("Posting Guild Stats to Bot lists...");
- for(HttpUtil.BotList botList : HttpUtil.BotList.values()){
- getHttpUtil().postServerStats(
- "*Purr*",
- "6875",
- guilds,
- shards,
- botList,
- getFileManager().getString("config", botList.getTokenPath())
- ).whenComplete((botListResult, ex) -> {
- if(botListResult == null || !botListResult.isSuccess() || ex != null){
- logger.warn("Error while posting Guild stats to bot list {}!", botList.getName());
- if(botListResult == null){
- logger.warn("BotListResult is null!");
- return;
- }
-
- if(ex != null){
- ex.printStackTrace();
- return;
- }
-
- logger.info("Response Code: {}", botListResult.getResponseCode());
- logger.info("Response Message: {}", botListResult.getResponseMessage());
- return;
- }
-
- logger.info("Successfully posted stats to {}!", botListResult.getBotList());
- });
- }
- }, 1, 5, TimeUnit.MINUTES);
-}
-```
-
-1. To disable posting to Bot list, either set the bot into beta mode through the [`config.json`](#config) or put everything after this if and before the `}, 1, 5, TimeUnit.MINUTES);` into comments.
- You can also update the `BotList` enum in the [`HttpUtil,java`][HttpUtil.java] to post to different bot lists.
-
-### Update some classes {: #update-classes }
-You need to update values in specific classes to make your version work without issues.
-Namely you have to alter the content of the following classes:
-
-- [`IDs.java`][IDs.java] (Contains various IDs of users or Guilds)
-- [`Emotes.java`][Emotes.java] (Contains different emotes used in commands)
-- [`Links.java`][Links.java] (Contains various links of the bot)
-
-### Build jar file {: #build-jar }
-When you're done with your changes, make sure to execute `gradlew clean shadowJar` to build a shaded jar containing all dependnencies required.
-
-### Config.json {: #config }
-The `config.json` is the core file of the bot in which you set various different information that will be used by the bot.
-On first startup will it generate with the below default values.
-
-??? note "Default Config.json"
- ```json
- {
- "bot-token": "TOKEN",
-
- "beta": false,
- "debug": false,
-
- "webhooks": {
- "guild": "guild-webhook-url",
- "log": "log-webhook-url"
- },
-
- "tokens": {
- "fluxpoint-dev": "fluxpoint-dev-token",
-
- "discord-bots-gg": "dbgg-token",
- "botlist-space": "botlist-token",
- "discordextremelist-xyz": "debl-token",
- "discordservices-net": "discordservices-net-token"
- },
-
- "database": {
- "ip": "127.0.0.1",
- "name": "DatabaseName",
- "guildTable": "GuildTable"
- }
- }
- ```
-
-Note that you don't have to set values for every option in the config.json.
-If you followed the previous step on preparing the bot will you only need to set the following options:
-
-| Option: | Value required: |
-| ---------------------- | ------------------------------------------------------------------- |
-| `bot-token` | Valid Bot-token of your Bot-application to login. |
-| `webhooks.guild` | A URL to a Discord webhook for logging joins and leaves of the bot. |
-| `webhooks.log` | A URL to a Discord webhook for logging dis/reconnects of the bot. |
-| `tokens.fluxpoint-dev` | Valid Authentication-token for the image-API of Fluxpoint.dev |
-| `database.ip` | Domain/IP of the RethinkDB server. |
-| `database.name` | Name of the database you created. |
-| `database.guildTable` | Name of the table you created to store guild settings. |
-
-### Other files
-The bot also has other files, which you can alter to your liking.
-
-- [`random.json`][random.json] contains various messages and links used for (often) random responses.
-- [`data.json`][data.json] contains data such as current guild blacklist, special users and more.
-- Various [lang-files] used for the different command responses of the bot.
diff --git a/docs/de/bot/welcome-channel.md b/docs/de/bot/welcome-channel.md
deleted file mode 100644
index 67d7ec43..00000000
--- a/docs/de/bot/welcome-channel.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: Einrichten
-description: Wie du das Willkommenssystem einrichten kannst.
----
-
-The welcome channel allows you to greet people with a message and image when they join your Discord.
-
-!!! info "Notes"
- Before you set up the channel, make sure you have made the following checks first:
-
- - You have `Manage Server` permission or are the owner of the Discord server.
- - The bot has `Send Messages` and `Attach Files` permission for the channel where it should send the welcome messsages.
-
- For simplicity reasons will the shown commands here use the default prefix (`p.`).
- If you have set a different prefix, use that instead.
-
-??? youtube "Video Tutorial"
- Here is a video explaining the steps below.
-
-
-
-## Step 1: Set a channel {: #step-1 }
-
-
-
-You first have to set a channel, before you can greet people.
-To do that, run `p.welcome channel set #channel` where `#channel` is the channel you want to use for greeting people.
-
-Reset this using `p.welcome channel reset`
-
-## Step 2: Set a background {: #step-2 }
-
-[](welcome-images.md#color_white)
-
-Set a background that will be used on the image.
-The syntax is `p.welcome bg set ` where `` is one of the [available backgrounds](welcome-images.md#backgrounds).
-
-Reset this using `p.welcome bg reset`
-
-## Step 3: Set an icon {: #step-3 }
-
-[](welcome-images.md#purr)
-
-You can set an icon, which is shown on the right side of the image.
-Use `p.welcome icon set ` where `` is one of the [available icons](welcome-images.md#icons).
-
-Reset this using `p.welcome icon reset`
-
-## Step 4: Set a text color {: #step-4 }
-
-
-
-The default font color isn't visible on all backgrounds. For that can you change it with `.welcome color set `.
-`` has to be either `hex:rrggbb`, `rgb:r,g,b` or `random`.
-
-Reset this using `p.welcome color reset`
-
-## Step 5: Set a message {: #step-5 }
-
-
-
-You can set your very own welcome message that is shown next to the image.
-To do that run `p.welcome msg set ` where `` can be anything you want.
-
-### Placeholders
-
-| Placeholder: | Description: | Example Output: |
-| ------------------------------------------- | --------------------------------------------------------------------------- | --------------- |
-| `{count}` / `{members}` | The current amount of members on the Discord server. | 1000 |
-| `{count_formatted}` / `{members_formatted}` | The current amount of members on the Discord server, but formatted. | 1,000 |
-| `{guild}` / `{server}` | The name of the server. | SomeDiscord |
-| `{mention}` | Mention of the user that joined the server. | @SomeUser |
-| `{name}` / `{username}` | The name of the user that joined the server. | SomeUser |
-| `{c_mention:}` | A mention of the provided channel ID. Works with text and voice. | #SomeChannel |
-| `{c_name:}` | The name of the provided channel ID. Works with any channel and categories. | SomeChannel |
-| `{r_mention:}` | A mention of the provided role ID. | @SomeRole |
-| `{r_name:}` | The name of the provided role ID. | SomeRole |
-| `{tag}` | The tag of the user that joined the server. | SomeUser#1234 |
-
-Reset this using `p.welcome msg reset`
-
-## Final Step: Testing {: #final-step }
-
-
-
-You can see the current message and image set by running `p.welcome test`
-This will generate a message similar to the one which would be shown for joining members.
diff --git a/docs/de/contribute/formatting-help.md b/docs/de/contribute/formatting-help.md
deleted file mode 100644
index 8e1d5f47..00000000
--- a/docs/de/contribute/formatting-help.md
+++ /dev/null
@@ -1,340 +0,0 @@
----
-title: Formattierungshilfe
-description: Seite welche die Details über das formattieren dieser Dokumentation erklärt.
----
-
-[PyMdown]: https://facelessuser.github.io/pymdown-extensions/
-[MkDocs]: https://www.mkdocs.org
-[MkDocs-Material extension]: https://github.com/facelessuser/mkdocs-material-extensions
-
-[FontAwesome]: https://fontawesome.com/icons?d=gallery&m=free
-[Material Design]: https://materialdesignicons.com/
-[Octicons]: https://octicons.github.com
-
-Diese Seite listet alle verschiedenen Markdown formattierungssyntaxe welche in der Dokumentation verwendet werden.
-Beachte bitte dass nicht alle Style im Standard Markdown für MkDocs verfügbar sind und gewisse Erweiterungen benötigen.
-Jegliche benötigte Erweiterung wird erwähnt.
-
-## Listen
-Ungeordnete und geordnete Listen haben ein leicht unterschiedliches verhalten von was du wahrscheinlich gewohnt bist.
-Damit eine Liste funktioniert benötigt sie eine leere Zeile zwischen der Liste selbst und dem Text davor.
-
-!!! example "Listen Beispiel"
- === "Markdown"
- ```markdown
- Diese Liste funktioniert.
-
- - Eintrag 1
- - Eintrag 2
- - Eintrag 3
-
- ----
- Diese Liste jedoch nicht.
- - Eintrag 1
- - Eintrag 2
- - Eintrag 3
- ```
-
- === "Resultat"
- Diese Liste funktioniert.
-
- - Eintrag 1
- - Eintrag 2
- - Eintrag 3
-
- ----
- Diese Liste jedoch nicht.
- - Eintrag 1
- - Eintrag 2
- - Eintrag 3
-
-Zusätzlich zu den oben genannten Bedingungen musst du auch 4 leerzeichen anstelle der standard 2 verwenden wenn du die Liste nach innen verschieben willst.
-
-!!! example "Indent example"
- === "Markdown"
- ```markdown
- Working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
-
- ----
- Not working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
- ```
-
- === "Result"
- Working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
-
- ----
- Not working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
-
-## Info boxes
-You sure have noticed those neat looking boxes that contain various information of stuff.
-Those are provided through [MkDocs] and use a specific syntax, that you need to follow.
-
-!!! example "Box examples"
- === "Markdown"
- ```markdown
- !!! info "Title"
- Rules about Markdown still apply.
-
- - F.e. Lists
- - Still need an empty line
-
- ----
-
- !!! info
- The title can be omited.
- The box will then use the name of its type.
- ```
-
- === "Result"
- !!! info "Title"
- Rules about Markdown still apply.
-
- - F.e. Lists
- - Still need an empty line
-
- ----
-
- !!! info
- The title can be omited.
- The box will then use the name of its type.
-
-!!! warning "Special rules"
- - You don't need to add two spaces after the `!!! ""`. MkDocs can handle this just fine.
- - You need to add at least one empty line before and after the info box to not have unwanted formatting issues.
-
-### Types
-The info boxes have various types available which you can choose from:
-
-!!! note
-
-!!! summary
-
-!!! info
-
-!!! tip
-
-!!! success
-
-!!! question
-
-!!! warning
-
-!!! failure
-
-!!! danger
-
-!!! bug
-
-!!! example
-
-!!! quote
-
-## Collapsable info boxes (Details)
-This feature requires the `Details` extension from [PyMdown].
-
-Those boxes are similar to the normal info boxes, but can be collapsed (closed) or expanded (opened).
-They follow the same syntax as the info boxes, but use question marks (`?`) instead of exclamation marks (`!`).
-You can use the exact same [types](#types) as with the info boxes.
-
-
-!!! example "Collapsable Box example"
- === "Markdown"
- ```markdown
- ??? info "Title"
- This box is closed by default
-
- ----
-
- ???+ info "Title"
- Adding a + after the question mark makes this box open by default.
- ```
-
- === "Result"
- ??? info "Title"
- This box is closed by default
-
- ----
-
- ???+ info "Title"
- Adding a + after the question mark makes this box open by default.
-
-## Tabs
-This feature requires the `Tabbed` extension from [PyMdown].
-
-Adds tabbed Markdown to list content after each other. This was used here for the various Markdown examples and their results.
-The syntax is the same as with the info box, with the difference that it uses equal signs (`=`) instead of exclamation marks (`!`).
-Additionally does it also not have a type parameter, meaning you can only set the tile itself.
-
-!!! example "Tabs example"
- === "Markdown"
- ```markdown
- === "Tab 1"
- You can add more tabs...
-
- === "Tab 2"
- ...by adding extra `===`.
-
- ===! "Tab A"
- Using a ! after the equal signs...
-
- === "Tab B"
- ...indicates a new set of tabs.
- ```
-
- === "Result"
- === "Tab 1"
- You can add more tabs...
-
- === "Tab 2"
- ...by adding extra `===`.
-
- ===! "Tab A"
- Using a ! after the equal signs...
-
- === "Tab B"
- ...indicates a new set of tabs.
-
-## Links
-We use the [PyMdown] extension `MagicLink` which allows us to automatically transform links into clickable links. This doesn't happen by default.
-
-!!! example "Link example"
- === "Markdown"
- ```markdown
- https://purrbot.site
- ```
-
- === "Result"
- https://purrbot.site
-
-Additionally can we link to a repository or GitHub user by just using the format `@user/repo` and `@user` respectively.
-This also works with Twitter-users by prefixing the name with `twitter:` (`@twitter:username`)
-
-!!! example "Mention examples"
- === "Markdown"
- ```markdown
- @purrbot-site
- @purrbot-site/Docs
- @twitter:TruePurrBot
- ```
-
- === "Result"
- @purrbot-site
- @purrbot-site/Docs
- @twitter:TruePurrBot
-
-## Emojis
-We use the `Emojis` extension from [PyMdown] to allow the usage of emojis through the common `:emoji:` pattern.
-We also use the [MkDocs-Material Extension] which adds support for using SVG icons of [FontAwesome], [Material Design] and [Octicons] in the same format.
-
-Note that unlike emojis, the custom ones added by the MkDocs-Material Extension require to be prefixed with the site they should come from.
-
-- `fontawesome-brands` for brand icons
-- `fontawesome-regular` for all regular icons
-- `fontawesome-solid` for all Solid icons
-- `material` for the Material Design icons
-- `octicons` for the Octicons icons
-
-!!! warning "Note about FontAwesome and Octicons"
- === "FontAwesome"
- The MkDocs-Material Extension will only be able to use free FontAwesome icons! Paid ones aren't supported.
-
- === "Octicons"
- Due to Octicons being offered in 16px and 24px format, are you required to suffix the icon name with either `-16` or `-24` depending on which you want to use.
- As an example: Instead of `:octicon-repo:` would you use `:octicon-repo-16:` or `:octicon-repo-24:`
-
-!!! example "Emoji/Icons Examples"
- === "Markdown"
- ```markdown
- Normal Emojis
-
- - :smile:
- - :heart:
-
- FontAwesome Icons (Brands):
-
- - :fontawesome-brands-github:
- - :fontawesome-brands-discord:
-
- FontAwesome Icons (Regular)
-
- - :fontawesome-regular-bell:
- - :fontawesome-regular-bell-slash:
-
- FontAwesome Icons (Solid)
-
- - :fontawesome-solid-bell:
- - :fontawesome-solid-bell-slash:
-
- Material Design:
-
- - :material-sync:
- - :material-alert:
-
- Octicons:
-
- - :octicons-repo-24:
- - :octicons-git-pull-request-24:
- ```
-
- === "Result"
- Normal Emojis
-
- - :smile:
- - :heart:
-
- FontAwesome Icons (Brands):
-
- - :fontawesome-brands-github:
- - :fontawesome-brands-discord:
-
- FontAwesome Icons (Regular)
-
- - :fontawesome-regular-bell:
- - :fontawesome-regular-bell-slash:
-
- FontAwesome Icons (Solid)
-
- - :fontawesome-solid-bell:
- - :fontawesome-solid-bell-slash:
-
- Material Design:
-
- - :material-sync:
- - :material-alert:
-
- Octicons:
-
- - :octicons-repo-24:
- - :octicons-git-pull-request-24:
-
-## Buttons
-Using the List Attribute extension can we turn embedded Links (`[text](link)`) into buttons by appending `{: .md-button }` to it.
-
-!!! example "Button Example"
- === "Markdown"
- ```markdown
- [To the Website](https://purrbot.site){: .md-button }
- ```
-
- === "Result"
- [To the Website](https://purrbot.site){: .md-button }
-
-## Final Words
-Those are all the important parts you need to know about the markdown syntax for the documentation.
-Anything Markdown-related that wasn't mentioned here is assumed to be the normal formatting (e.g. `*italic*`, `**bold**`, etc.).
diff --git a/docs/de/contribute/index.md b/docs/de/contribute/index.md
deleted file mode 100644
index 5becf83c..00000000
--- a/docs/de/contribute/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: Contribute
-description: Help us improving the bot, website or this Documentation!
----
-
-[Discord]: https://purrbot.site/discord
-
-[doc]: https://github.com/purrbot-site/Docs
-[contributing_docs]: https://github.com/purrbot-site/Docs/blob/master/CONTRIBUTING.md
-
-[purr]: https://github.com/purrbot-site/PurrBot
-[contributing_bot]: https://github.com/purrbot-site/PurrBot/blob/master/CONTRIBUTING.md
-
-[imageapi]: https://github.com/purrbot-site/ImageAPI
-[crowdin]: https://lang.purrbot.site
-
-# Contribute towards the Projects
-We're always happy for people who want to help us improve our various projects.
-But before you blindly dive into the stuff, keep the following things in mind.
-
-## Documentation/Wiki
-The documentation (The site you're currently on) is located [here][doc] and we're happy over every improvement made, being it the addition of missing information, fixing style-issues or even just correcting minor typos.
-
-Before you start, make sure you've read the [formatting help](formatting-help.md) page to know everything important about the styling of the docs.
-Also, make sure to read the [CONTRIBUTING.md file][contributing_docs] for important points about the Documentation's styling.
-
-## Bot
-I (Andre_601) are not the best developer, so there are sure some problematic Coding decision made in the code of [\*Purr\*][purr].
-That's why I'm always happy to receive Pull requests to improve and fix things.
-Please make sure to follow the [contributing guidelines][contributing_bot] for the repository.
-
-## API
-Similar to the bot is the API not the best in terms of code.
-Feel free to submit any Pull requests to improve it.
-
-You can find the source codes [here][imageapi].
-
-## Translations
-We welcome every kind of translation. This even includes those that don't really exist (Are a joke-language like Klingon... No hate towards those guys).
-To become a translator, read how to on the [translations](translate/index.md) page and join our [Discord], so that he can add you as a translator to the [Translation page][crowdin].
diff --git a/docs/de/contribute/translate/index.md b/docs/de/contribute/translate/index.md
deleted file mode 100644
index ca62915d..00000000
--- a/docs/de/contribute/translate/index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Translations
-description: Find out how you can translate the bot into another language.
----
-
-[discord]: https://purrbot.site/discord
-[crowdin]: https://crowdin.com
-
-# Translations
-
-!!! info
- This page only covers how to translate the Discord bot.
- If you would like to translate these docs, head over to the [Translate the docs](translate-docs.md) page.
-
-\*Purr* is available in various languages.
-Each of those languages was made with :heart:, effort and some letters by the community.
-
-If you would like to translate the bot into a language that doesn't exist for the bot yet, or want to help improve an existing language, follow this basic guide to find out how you can do that.
-
-## Step 1: Join the Discord Server {: #step-1 }
-You have to join the [~Nya Discord Server][discord] first because it is the main place for getting notified about new Strings that need to be translated.
-Leaving the Discord as a translator will result in you being removed from the Translation Project!
-
-## Step 2: Request being added {: #step-2 }
-Once on the Discord Server should you contact Andre_601#0601 to request getting added as a Translator.
-Just tell him what language you want to translate.
-
-!!! info "New Language"
- If the language you want to translate doesn't exist on the project yet, will it be created by Andre and you can move on to the [next step](#step-3).
-
-## Step 3: Join the Crowdin Project {: #step-3 }
-The translation Project is hosted on [Crowdin] which you can also find under the following URL: https://lang.purrbot.site
-
-Once you got added to the Discord as a Translator can you now send a request to the project to get added.
-You first need to either login to or create your account on Crowdin. Then select the language you want to translate the bot into. You should see a `Join` button with which you can send a request to get added.
-When everything goes well will you be added.
-
-## You're done! {: #done }
-Congratulations! If you followed all of the above steps are you now a translator for the bot and can start translating her messages to your language.
-
-!!! warning "Important notes"
- If your language isn't translated for a longer time and without any reason from you, will it be removed from the Project and you will be removed as a translator.
diff --git a/docs/de/contribute/translate/translate-docs.md b/docs/de/contribute/translate/translate-docs.md
deleted file mode 100644
index 0d0333ce..00000000
--- a/docs/de/contribute/translate/translate-docs.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# Translate the Documentation
-
-Our goal is to provide these docs in as many languages as possible to make them accessible to everyone.
-
-In order to achieve this goal do we require your help! If you know another language not shown here and want to contribute a translation, read on.
-
-## Prerequisites
-
-Before you start translating should you make sure you have the following prepared:
-
-- You have knowledge with git (For pulling and committing changes)
-- You have at least Python 3.11 installed
-- You have MkDocs and all necessary dependencies installed.
- Just use `pip install -U -r requirements.txt` in the root of your local repo to install and upgrade the dependencies.
-
-## Translating
-
-### Docs structure
-
-We use the `mkdocs-static-i18n` plugin with the `folder` configuration to create the different translations. What this means is that every language is within its own folder.
-
-As an example is here the structure of the English (Default) language inside `docs`:
-```txt title="Folder structure"
-docs/
-└── en/
- ├── api/
- │ └── index.md
- ├── bot/
- │ ├── commands.md
- │ ├── index.md
- │ ├── selfhosting.md
- │ ├── welcome-channel.md
- │ └── welcome-images.md
- ├── contribute/
- │ ├── translate/
- │ │ ├── index.md
- │ │ └── translate-docs.md
- │ ├── formatting-help.md
- │ └── index.md
- ├── credits/
- │ └── index.md
- ├── legal/
- │ ├── api.md
- │ ├── bot.md
- │ ├── index.md
- │ └── website.md
- └── index.md
-```
-
-To start translating just copy the `en` folder and paste it in the `docs` folder. Don't forget to rename it to a [supported language identifier][languages]{ target="_blank" rel="nofollow" }.
-
-### Adding your language
-
-In order for the `mkdocs-static-i18n` to recognize your language will you need to add a new entry to the `languages` setting of the `i18n` plugin in the `mkdocs.yml`.
-The most basic structure looks similar to this:
-```yaml title="mkdocs.yml"
-plugins:
- - search
- - neoteroi.mkdocsoad:
- use_pymdownx: true
- - i18n:
- docs_structure: folder
- languages:
- - locale: en
- default: true
- name: English
- build: true
- # ...other languages
- - locale: example # (1)
- name: Example # (2)
- build: true
- nav_translations: # (3)
- # Welcome system
- Welcome-System: Lorem
- # Contributing
- Contributing: Ipsum
- Translations: Dolor
- # Legal
- Legal: Sit
-```
-
- 1. Replace this entry with a [valid language option][languages]{ target="_blank" rel="nofollow" }.
- 2. This will be displayed in the language selector.
- 3. This is used to translate parts of the nav that can't be translated through other means.
-
-This should now load files inside the `example` folder, allowing you to translate them into your language.
-
-### Special notes
-
-#### Page title and description
-
-The page title should be translated wherever possible using the YAML frontmatter.
-
-#### Headers
-
-Headers should be translated. However, to allow cross-language navigation will you need to append `{ #:id }` to the header where `:id` is the id used in the original header.
-
-As an example, `## Some header` would become `## Lorem ipsum { #some-header }`, translating the header but keeping its original ID.
-Should the header in question already have a `{ #:id }` at the end are you not required to add one and only need to translate the header itself.
-
-#### API Page
-
-The API page's content is auto-generated from the `imageapi.json` file and is therefore not translatable by normal means.
-
-Instead of having you translate an entire JSON file should you only translate the page title and description in the YAML frontmatter and add an admonition box informing about the untranslated docs.
-
-Here is an example of how the file would look like:
-```markdown title="api/index.md"
----
-title: API
-description: 'Documentation about the ImageAPI found at https://purrbot.site/api'
-
-hide:
- - navigation
----
-
-!!! note "Note"
- The shown API documentation is auto-generated and therefore only available in English.
-
-
-```
-
-#### Things NOT to translate
-
-The following things should **not** be translated and kept as-is:
-
-- Headers of image names in [Welcome Images](../../bot/welcome-images.md) (i.e. `color_black`).
-- Command names and Aliases in [Commands](../../bot/commands.md) (i.e. `bite`).
-- The name of the bot (`*Purr*`).
-- Project names in [`Credits`](../../credits/index.md).
-- Any brand name (Discord, YouTube, etc.).
-
-[languages]: https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#site-language
\ No newline at end of file
diff --git a/docs/en/api/index.md b/docs/en/api/index.md
index 2fbe8271..d145ecf1 100644
--- a/docs/en/api/index.md
+++ b/docs/en/api/index.md
@@ -4,22 +4,8 @@ description: 'Documentation about the ImageAPI located under https://purrbot.sit
hide:
- navigation
----
-
-
-
-
-
-
-
-
-
-
-
+not_translatable: true
+---
[OAD(./docs/assets/imageapi.json)]
\ No newline at end of file
diff --git a/docs/en/bot/commands.md b/docs/en/bot/commands.md
index 42cfb5f4..928cb963 100644
--- a/docs/en/bot/commands.md
+++ b/docs/en/bot/commands.md
@@ -13,21 +13,22 @@ This page lists all available commands of the bot.
The default prefix is `p.` but can be changed with the [prefix command](#prefix).
In addition can you use a mention of the bot (`@*Purr*#6875`) instead of the prefix.
-!!! warning "Important"
- - `Permission` means Discord permissions which the executor of the command (you) requires.
- - `Bot requires` will mention **addtional** permissions needed on top of the following ones:
- - `Read Messages`
- - `Send Messages`
- - `Embed Links`
- - `Read Message History`
- - `Add Reactions`
- - `Use External Emojis`
- - Every Command has a `help` sub-command that lists necessary permissions and if the bot has it.
- - Arguments:
- - indicate required arguments.
- - indicate optional arguments.
- - Order of the arguments is not important unless mentioned.
- - Arguments ending with `...` mean you can add as many as you like.
+/// warning | Important
+- `Permission` means Discord permissions which the executor of the command (you) requires.
+- `Bot requires` will mention **addtional** permissions needed on top of the following ones:
+ - `Read Messages`
+ - `Send Messages`
+ - `Embed Links`
+ - `Read Message History`
+ - `Add Reactions`
+ - `Use External Emojis`
+ - Every Command has a `help` sub-command that lists necessary permissions and if the bot has it.
+- Arguments:
+ - indicate required arguments.
+ - indicate optional arguments.
+ - Order of the arguments is not important unless mentioned.
+ - Arguments ending with `...` mean you can add as many as you like.
+///
### [Fun](#category-fun)
- [Angry](#angry)
@@ -91,187 +92,196 @@ In addition can you use a mention of the bot (`@*Purr*#6875`) instead of the pre
### Angry
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Angy`
- - `Rage`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.angry`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Angy`
+- `Rage`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.angry`
+///
Lets you be angry.
----
### Bite
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Nibble`
- - `Nom`
-
- **Arguments:**
-
- -
- The User(s) to bite. Needs to be a mention.
-
- **Examples:**
-
- - `p.bite @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Nibble`
+- `Nom`
+
+**Arguments:**
+
+-
+ The User(s) to bite. Needs to be a mention.
+
+**Examples:**
+
+- `p.bite @user`
+///
Bites the mentioned users.
----
### Blush
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Blushing`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.blush`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Blushing`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.blush`
+///
Lets you blush.
----
### Comfy
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.comfy`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.comfy`
+///
Lets you show others that you're feeling comfy right now.
----
### Cry
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Sad`
- - `Sob`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.cry`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Sad`
+- `Sob`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.cry`
+///
Lets you cry. :cry:
----
### Cuddle
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Cuddles`
- - `Snuggle`
- - `Snuggles`
- - `Squeeze`
-
- **Arguments:**
-
- -
- The User(s) to cuddle. Needs to be a mention.
-
- **Examples:**
-
- - `p.cuddle @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Cuddles`
+- `Snuggle`
+- `Snuggles`
+- `Squeeze`
+
+**Arguments:**
+
+-
+ The User(s) to cuddle. Needs to be a mention.
+
+**Examples:**
+
+- `p.cuddle @user`
+///
Cuddles the mentioned users.
----
### Dance
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Dancing`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.dance`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Dancing`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.dance`
+///
Lets you show to others that you're dancing. ~(^-^)~
----
### Eevee
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- Receive a gif instead of an image.
-
- **Examples:**
-
- - `p.eevee`
- - `p.eevee --gif`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ Receive a gif instead of an image.
+
+**Examples:**
+
+- `p.eevee`
+- `p.eevee --gif`
+///
Gives you a random image/gif of the Pokémon Eevee. ([Example (Image)](https://purrbot.site/img/sfw/eevee/img/eevee_001.jpg))
----
### Feed
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Food`
- - `Eat`
-
- **Arguments:**
-
- -
- The User to feed. Needs to be a mention.
-
- **Examples:**
-
- - `p.feed @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Food`
+- `Eat`
+
+**Arguments:**
+
+-
+ The User to feed. Needs to be a mention.
+
+**Examples:**
+
+- `p.feed @user`
+///
Lets you feed someone.
The asked user can either accept or deny the request.
@@ -279,22 +289,23 @@ The asked user can either accept or deny the request.
----
### Fluff
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Fluffing`
-
- **Arguments:**
-
- -
- The User to fluff. Needs to be a mention.
-
- **Examples:**
-
- - `p.fluff @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Fluffing`
+
+**Arguments:**
+
+-
+ The User to fluff. Needs to be a mention.
+
+**Examples:**
+
+- `p.fluff @user`
+///
Lets you ask someone if you can fluff their tail.
The asked user can either accept or deny the request.
@@ -302,145 +313,152 @@ The asked user can either accept or deny the request.
----
### Holo
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Spiceandwolf`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.holo`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Spiceandwolf`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.holo`
+///
Gives an image of Holo from the manga and anime "Spice & Wolf". ([Example](https://purrbot.site/img/sfw/holo/img/holo_001.jpg))
----
### Hug
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Hugging`
-
- **Arguments:**
-
- -
- The User(s) to hug. Needs to be a mention.
-
- **Examples:**
-
- - `p.hug @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Hugging`
+
+**Arguments:**
+
+-
+ The User(s) to hug. Needs to be a mention.
+
+**Examples:**
+
+- `p.hug @user`
+///
Hugs the mentioned users.
----
### Kiss
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Kissu`
- - `Love`
-
- **Arguments:**
-
- -
- The User(s) to kiss. Needs to be a mention.
-
- **Examples:**
-
- - `p.kiss @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Kissu`
+- `Love`
+
+**Arguments:**
+
+-
+ The User(s) to kiss. Needs to be a mention.
+
+**Examples:**
+
+- `p.kiss @user`
+///
Kisses the mentioned users
----
### Kitsune
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Foxgirl`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.kitsune`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Foxgirl`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.kitsune`
+///
Gives a random image of a kitsune (fox girl). ([Example](https://purrbot.site/img/sfw/kitsune/img/kitsune_001.jpg))
----
### Lay
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Laying`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.lay`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Laying`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.lay`
+///
Lets you lay down.
----
### Lick
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- The User(s) to lick. Needs to be a mention.
-
- **Examples:**
-
- - `p.lick @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ The User(s) to lick. Needs to be a mention.
+
+**Examples:**
+
+- `p.lick @user`
+///
Licks the mentioned users.
----
### Neko
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Catgirl`
-
- **Arguments:**
-
- -
- Receive a gif instead of an image.
-
- **Examples:**
-
- - `p.neko`
- - `p.neko --gif`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Catgirl`
+
+**Arguments:**
+
+-
+ Receive a gif instead of an image.
+
+**Examples:**
+
+- `p.neko`
+- `p.neko --gif`
+///
Gives an image of a Neko (cat girl). ([Example (Image)](https://purrbot.site/img/sfw/neko/img/neko_001.jpg))
@@ -449,111 +467,116 @@ For the NSFW version see [here](#neko-nsfw).
----
### Pat
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Patting`
- - `Pet`
-
- **Arguments:**
-
- -
- The User(s) to pat. Needs to be a mention.
-
- **Examples:**
-
- - `p.pat @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Patting`
+- `Pet`
+
+**Arguments:**
+
+-
+ The User(s) to pat. Needs to be a mention.
+
+**Examples:**
+
+- `p.pat @user`
+///
Pats the mentioned users.
----
### Poke
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Boop`
- - `Poking`
-
- **Arguments:**
-
- -
- The User(s) to poke. Needs to be a mention.
-
- **Examples:**
-
- - `p.poke @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Boop`
+- `Poking`
+
+**Arguments:**
+
+-
+ The User(s) to poke. Needs to be a mention.
+
+**Examples:**
+
+- `p.poke @user`
+///
Pokes the mentioned users.
----
### Pout
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Hmph`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.pout`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Hmph`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.pout`
+///
Lets you go "hmph".
----
### Senko
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Senko-san`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.senko`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Senko-san`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.senko`
+///
Gives a random image of Senko-San from the anime and manga "Sewayaki Kitsune no Senko-San". ([Example](https://purrbot.site/img/sfw/senko/img/senko_001.jpg))
----
### Ship
-!!! summary " "
- **Permission:** `None`
- **Bot requires:**
-
- - `Attach Files` - Required to also display an image. Command works without it.
-
- **Aliases:**
-
- - `Shipping`
-
- **Arguments:**
-
- -
- The User to ship with. Needs to be a mention.
- -
- A second user to ship the first one with. Needs to be a mention and defaults to you if not provided.
-
- **Examples:**
-
- - `p.ship @user`
- - `p.ship @user @user2`
+/// note | Data
+**Permission:** `None`
+**Bot requires:**
+
+- `Attach Files` - Required to also display an image. Command works without it.
+
+**Aliases:**
+
+- `Shipping`
+
+**Arguments:**
+
+-
+ The User to ship with. Needs to be a mention.
+-
+ A second user to ship the first one with. Needs to be a mention and defaults to you if not provided.
+
+**Examples:**
+
+- `p.ship @user`
+- `p.ship @user @user2`
+///
Ships you (or the second user if provided) with the mentioned user.
Returns an image (if permissions is given) showing a percentage between 0 and 100 percent.
@@ -561,97 +584,102 @@ Returns an image (if permissions is given) showing a percentage between 0 and 10
----
### Shiro
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.shiro`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.shiro`
+///
Gives a random image of Shiro from the anime and manga "Sewayaki Kitsune no Senko-san". ([Example](https://purrbot.site/img/sfw/shiro/img/shiro_001.jpg))
----
### Slap
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- The User(s) to slap. Needs to be a mention.
-
- **Examples:**
-
- - `p.slap @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ The User(s) to slap. Needs to be a mention.
+
+**Examples:**
+
+- `p.slap @user`
+///
Slaps the mentioned users.
----
### Smile
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Grin`
- - `Grinning`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.smile`
-
-Lets you Smile. :)
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Grin`
+- `Grinning`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.smile`
+///
+
+Lets you Smile. :smile:
----
### Tail
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Wag`
- - `Wagging`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.tail`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Wag`
+- `Wagging`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.tail`
+///
Lets you wag your tail (in excitement hopefully).
----
### Tickle
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- The User(s) to tickle. Needs to be a mention.
-
- **Examples:**
-
- - `p.tickle @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ The User(s) to tickle. Needs to be a mention.
+
+**Examples:**
+
+- `p.tickle @user`
+///
Tickles the mentioned users.
@@ -660,26 +688,27 @@ Tickles the mentioned users.
### Language
-!!! summary " "
- **Permission:** `Manage Server`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Lang`
-
- **Arguments:**
-
- -
- Sets the new language to use. `{language}` needs to be a supported language.
- -
- Resets the language back to `en` (English).
-
- **Examples:**
-
- - `p.language`
- - `p.language set en-owo`
- - `p.language reset`
+/// note | Data
+**Permission:** `Manage Server`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Lang`
+
+**Arguments:**
+
+-
+ Sets the new language to use. `{language}` needs to be a supported language.
+-
+ Resets the language back to `en` (English).
+
+**Examples:**
+
+- `p.language`
+- `p.language set en-owo`
+- `p.language reset`
+///
Allows to set a different language to use in a specific server.
If no arguments are provided will all available languages be listed.
@@ -689,23 +718,24 @@ A list of currently worked on (and perhaps completed) translations can be found
----
### Prefix
-!!! summary " "
- **Permission:** `Manage Server`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- Sets the new prefix to use. `{prefix}` needs to be the new prefix to use.
- -
- Resets the prefix back to the default one (`p.`).
-
- **Examples:**
-
- - `p.prefix set !`
- - `p.prefix reset`
+/// note | Data
+**Permission:** `Manage Server`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ Sets the new prefix to use. `{prefix}` needs to be the new prefix to use.
+-
+ Resets the prefix back to the default one (`p.`).
+
+**Examples:**
+
+- `p.prefix set !`
+- `p.prefix reset`
+///
Allows to change the prefix used for commands in your server.
By default is `p.` used.
@@ -713,54 +743,55 @@ By default is `p.` used.
----
### Welcome
-!!! summary " "
- **Permission:** `Manage Server`
- **Bot requires:**
-
- - `Attach Files` - Required to display the welcome image for joining users.
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- Sets the background to the specified one. Needs to be the [name of an existing background](welcome-images.md#backgrounds).
- [Patreons of Tier 2/3][patreon] can set an image URL to use.
- -
- Resets the background back to [`color_white`](welcome-images.md#color_white)
- -
- Sets the channel to send welcome messages in. `{#channel}` needs to be a mention of a channel the bot can write in.
- -
- Resets the channel back to `none`.
- -
- Sets the color to use for the text in the welcome image. `{color}` can be either `hex:` with a hexadecimal color value, `rgb:` with RGB values separated by commas or `random` for randomized colour selection.
- -
- Resets the color back to `hex:000000`.
- -
- Sets the icon to the specified one. Needs to be the [name of an existing icon](welcome-images.md#icons).
- [Patreons of Tier 2/3][patreon] can set an image URL to use.
- -
- Resets the icon back to [`purr`](welcome-images.md#purr).
- -
- Sets the message to greet a joining user with. `{message}` can be any string you like and contain [supported placeholders](#placeholders).
- -
- Resets the message back to `Welcome {mention}!`
- -
- Creates a test welcome message using the currently saved values.
-
- **Examples:**
-
- - `p.welcome bg set color_black`
- - `p.welcome bg reset`
- - `p.welcome channel set #welcome`
- - `p.welcome channel reset`
- - `p.welcome color set hex:ffffff`
- - `p.welcome color reset`
- - `p.welcome icon set neko_hug`
- - `p.welcome icon reset`
- - `p.welcome msg set Welcome to our server {name}! You're member {count_formatted}`
- - `p.welcome msg reset`
- - `p.welcome test`
+/// note | Data
+**Permission:** `Manage Server`
+**Bot requires:**
+
+- `Attach Files` - Required to display the welcome image for joining users.
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ Sets the background to the specified one. Needs to be the [name of an existing background](welcome-images.md#backgrounds).
+ [Patreons of Tier 2/3][patreon] can set an image URL to use.
+-
+ Resets the background back to [`color_white`](welcome-images.md#color_white)
+-
+ Sets the channel to send welcome messages in. `{#channel}` needs to be a mention of a channel the bot can write in.
+-
+ Resets the channel back to `none`.
+-
+ Sets the color to use for the text in the welcome image. `{color}` can be either `hex:` with a hexadecimal color value, `rgb:` with RGB values separated by commas or `random` for randomized colouselection.
+-
+ Resets the color back to `hex:000000`.
+-
+ Sets the icon to the specified one. Needs to be the [name of an existing icon](welcome-images.md#icons).
+ [Patreons of Tier 2/3][patreon] can set an image URL to use.
+-
+ Resets the icon back to [`purr`](welcome-images.md#purr).
+-
+ Sets the message to greet a joining user with. `{message}` can be any string you like and contain [supported placeholders](#placeholders).
+-
+ Resets the message back to `Welcome {mention}!`
+-
+ Creates a test welcome message using the currently saved values.
+
+**Examples:**
+
+- `p.welcome bg set color_black`
+- `p.welcome bg reset`
+- `p.welcome channel set #welcome`
+- `p.welcome channel reset`
+- `p.welcome color set hex:ffffff`
+- `p.welcome color reset`
+- `p.welcome icon set neko_hug`
+- `p.welcome icon reset`
+- `p.welcome msg set Welcome to our server {name}! You're member {count_formatted}`
+- `p.welcome msg reset`
+- `p.welcome test`
+///
Allows you to setup the welcome system of the bot.
Note that if your server is using Member verification, will the bot only send a welcome message when the user passed said verification.
@@ -769,7 +800,7 @@ Note that if your server is using Member verification, will the bot only send a
The following placeholders can be used freely in the message sub-command and will be replaced with their respecitve values.
-| Placeholder | Description | Example |
+| Placeholder | Description | Example |
| ------------------------------------------- | ---------------------------------------------------------------------------- | ---------------- |
| `{count}` / `{members}` | Displays the number of members in a server. | `1000` |
| `{count_formatted}` / `{members_formatted}` | Displays the number of members in a server, with the number being formatted. | `1,000` |
@@ -787,46 +818,48 @@ The following placeholders can be used freely in the message sub-command and wil
### Donate
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Donation`
- - `Donations`
- - `Donators`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.donate`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Donation`
+- `Donations`
+- `Donators`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.donate`
+///
Gives you information on how you can donate and what awesome people donated so far :heart:.
----
### Emote
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `E`
-
- **Arguments:**
-
- -
- The emote to get information from. Needs to be a mention of a custom emoji (Unicode emojis won't work).
- -
- Searches the past 100 messages for any custom emojis in them and lists any it finds.
-
- **Examples:**
-
- - `p.emote :coolEmoji:`
- - `p.emote --search`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `E`
+
+**Arguments:**
+
+-
+ The emote to get information from. Needs to be a mention of a custom emoji (Unicode emojis won't work).
+-
+ Searches the past 100 messages for any custom emojis in them and lists any it finds.
+
+**Examples:**
+
+- `p.emote :coolEmoji:`
+- `p.emote --search`
+///
Gives you information about the emoji you provided, or about all the emojis that have been found in the previous 100 messages of a channel.
Some information such as Server may not be available, unless the bot is on the server the emote comes from.
@@ -834,129 +867,135 @@ Some information such as Server may not be available, unless the bot is on the s
----
### Guild
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Guildinfo`
- - `Server`
- - `Serverinfo`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.guild`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Guildinfo`
+- `Server`
+- `Serverinfo`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.guild`
+///
Gives information about the server you used the command in.
----
### Help
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Command`
- - `Commands`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.help`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Command`
+- `Commands`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.help`
+///
Gives you a link to the site you're currently reading.
----
### Info
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Infos`
- - `Information`
-
- **Arguments:**
-
- -
- Sends the bot info to your direct messages.
-
- **Examples:**
-
- - `p.info`
- - `p.info --dm`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Infos`
+- `Information`
+
+**Arguments:**
+
+-
+ Sends the bot info to your direct messages.
+
+**Examples:**
+
+- `p.info`
+- `p.info --dm`
+///
Gives you information about the bot (Version, Library used, bot lists, etc).
----
### Invite
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Links`
-
- **Arguments:**
-
- -
- Sends the invite and other links to your direct messages.
-
- **Examples:**
-
- - `p.invite`
- - `p.invite --dm`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Links`
+
+**Arguments:**
+
+-
+ Sends the invite and other links to your direct messages.
+
+**Examples:**
+
+- `p.invite`
+- `p.invite --dm`
+///
Gives you information on how to invite the bot.
----
### Ping
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.ping`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.ping`
+///
Checks the connection to Discord and how long it takes to edit a message and displays it to you.
----
### Quote
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:** `None`
-
- **Arguments:**
-
- -
- The ID of the message to quote.
- -
- Channel to quote the message from. Needs to me a channel mention.
- Only required if the message is not in the same channel as where you executed this command in.
-
- **Examples:**
-
- - `p.quote 123456789123456789`
- - `p.quote 123456789123456789 #otherchannel`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:** `None`
+
+**Arguments:**
+
+-
+ The ID of the message to quote.
+-
+ Channel to quote the message from. Needs to me a channel mention.
+ Only required if the message is not in the same channel as where you executed this command in.
+
+**Examples:**
+
+- `p.quote 123456789123456789`
+- `p.quote 123456789123456789 #otherchannel`
+///
Gets the message using the provided message ID and quotes it.
The bot won't quote messages, if the channel it is located in is marked as Age-gated (NSFW) while the channel you used the command in is not.
@@ -964,73 +1003,79 @@ The bot won't quote messages, if the channel it is located in is marked as Age-g
----
### Shards
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Shard`
- - `Shardinfo`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.shards`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Shard`
+- `Shardinfo`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.shards`
+///
Lists the shards the bot currently has including their ping, number of servers and connection status.
-??? question "What is a shard?"
- Quote from the [Discord Developer Documentation][shard_info]:
- > As apps grow and are added to an increasing number of guilds, some developers may find it necessary to divide portions of their app's operations across multiple processes. As such, the Gateway implements a method of user-controlled guild sharding which allows apps to split events across a number of Gateway connections. Guild sharding is entirely controlled by an app, and requires no state-sharing between separate connections to operate. While all apps can enable sharding, it's not necessary for apps in a smaller number of guilds.
-
- tl;dr: Shards are - in most simplistic terms - separate gateway connections to Discord, which receive updates and events only for themself and not other shards.
+/// details | What is a shard?
+ type: question
+
+Quote from the [Discord Developer Documentation][shard_info]:
+> As apps grow and are added to an increasing number of guilds, some developers may find it necessary to divide portions of their app's operations across multiple processes. As such, the Gatewayimplements a method of user-controlled guild sharding which allows apps to split events across a number of Gateway connections. Guild sharding is entirely controlled by an app, and requires nostate-sharing between separate connections to operate. While all apps can enable sharding, it's not necessary for apps in a smaller number of guilds.
+
+tl;dr: Shards are - in most simplistic terms - separate gateway connections to Discord, which receive updates and events only for themself and not other shards.
+///
----
### Stats
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Stat`
- - `Statistic`
- - `Statistics`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.stats`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Stat`
+- `Statistic`
+- `Statistics`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.stats`
+///
Gives some statistics about the bot such as total number of servers, shards, RAM usage and how long it has been running since last restart.
----
### User
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Member`
- - `Userinfo`
- - `Userstats`
-
- **Arguments:**
-
- -
- Optional user to get information from.
- Defaults to you if not specified.
-
- **Examples:**
-
- - `p.user`
- - `p.user @user`
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Member`
+- `Userinfo`
+- `Userstats`
+
+**Arguments:**
+
+-
+ Optional user to get information from.
+ Defaults to you if not specified.
+
+**Examples:**
+
+- `p.user`
+- `p.user @user`
+///
Shows information about yourself or another user, if provided.
@@ -1039,26 +1084,27 @@ Shows information about yourself or another user, if provided.
### Blowjob
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Bj`
- - `Bjob`
- - `Succ`
-
- **Arguments:**
-
- -
- The User to give a blojob. Needs to be a mention.
-
- **Examples:**
-
- - `p.blowjob @user`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Bj`
+- `Bjob`
+- `Succ`
+
+**Arguments:**
+
+-
+ The User to give a blojob. Needs to be a mention.
+
+**Examples:**
+
+- `p.blowjob @user`
+///
Askes the mentioned user, if you can give them a blowjob.
The user can accept or deny the request.
@@ -1066,57 +1112,59 @@ The user can accept or deny the request.
----
### Cum
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Cumming`
-
- **Arguments:** `None`
-
- **Examples:**
-
- - `p.cum`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Cumming`
+
+**Arguments:** `None`
+
+**Examples:**
+
+- `p.cum`
+///
Returns a random gif of someone cumming.
----
### Fuck
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Sex`
-
- **Arguments:**
-
- -
- The user to have sex with. Needs to be a mention
- -
- Pre-selects anal as sex option.
- -
- Pre-selects hetero sex as sex option.
- -
- Pre-selects yaoi (Gay) sex as sex option.
- -
- Pre-selects yuri (Lesbian) sex as sex option.
-
- **Examples:**
-
- - `p.fuck @user`
- - `p.fuck @user --anal`
- - `p.fuck @user --normal`
- - `p.fuck @user --yaoi`
- - `p.fuck @user --yuri`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Sex`
+
+**Arguments:**
+
+-
+ The user to have sex with. Needs to be a mention
+-
+ Pre-selects anal as sex option.
+-
+ Pre-selects hetero sex as sex option.
+-
+ Pre-selects yaoi (Gay) sex as sex option.
+-
+ Pre-selects yuri (Lesbian) sex as sex option.
+
+**Examples:**
+
+- `p.fuck @user`
+- `p.fuck @user --anal`
+- `p.fuck @user --normal`
+- `p.fuck @user --yaoi`
+- `p.fuck @user --yuri`
+///
Asks the mentioned user if they want to have sex with you.
@@ -1126,52 +1174,54 @@ When one of the options has been provided can the asked user only accept or deny
----
### Neko { #neko-nsfw }
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Catgirl`
-
- **Arguments:**
-
- -
- Gives a NSFW neko image or gif.
- -
- Receive a gif instead of an image.
-
- **Examples:**
-
- - `p.neko --nsfw`
- - `p.neko --nsfw --gif`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Catgirl`
+
+**Arguments:**
+
+-
+ Gives a NSFW neko image or gif.
+-
+ Receive a gif instead of an image.
+
+**Examples:**
+
+- `p.neko --nsfw`
+- `p.neko --nsfw --gif`
+///
Gives a random image or gif of a NSFW Neko (Cat girl)
----
### Pussylick
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Plick`
- - `Cunni`
-
- **Arguments:**
-
- -
- The User to give cunnylingus. Needs to be a mention.
-
- **Examples:**
-
- - `p.pussylick @user`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Plick`
+- `Cunni`
+
+**Arguments:**
+
+-
+ The User to give cunnylingus. Needs to be a mention.
+
+**Examples:**
+
+- `p.pussylick @user`
+///
Asks the mentioned user if you can lick their pussy.
The user can accept or deny the request.
@@ -1179,25 +1229,26 @@ The user can accept or deny the request.
----
### Solo
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `Girl`
-
- **Arguments:**
-
- -
- Gives a male masturbating instead of a female.
-
- **Examples:**
-
- - `p.solo`
- - `p.solo --male`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `Girl`
+
+**Arguments:**
+
+-
+ Gives a male masturbating instead of a female.
+
+**Examples:**
+
+- `p.solo`
+- `p.solo --male`
+///
Gives a random gif of a girl masturbating.
When `--male` is provided, returns a gif of a male masturbating instead.
@@ -1205,32 +1256,33 @@ When `--male` is provided, returns a gif of a male masturbating instead.
----
### Threesome
---8<-- "nsfw-only.md"
-
-!!! summary " "
- **Permission:** `None`
- **Bot requires:** `None`
-
- **Aliases:**
-
- - `3some`
-
- **Arguments:**
-
- -
- The first User to ask to have a threesome with. Needs to be a mention.
- -
- The second user to ask to have a threesome with. Needs to be a mention.
- -
- Will return a gif with only females in it.
- -
- Will return a gif with 2 males and 1 female in it.
-
- **Examples:**
-
- - `p.threesome @user1 @user2`
- - `p.threesome @user1 @user2 --fff`
- - `p.threesome @user1 @user2 --mmf`
+--8<-- "nsfw-only__en.md"
+
+/// note | Data
+**Permission:** `None`
+**Bot requires:** `None`
+
+**Aliases:**
+
+- `3some`
+
+**Arguments:**
+
+-
+ The first User to ask to have a threesome with. Needs to be a mention.
+-
+ The second user to ask to have a threesome with. Needs to be a mention.
+-
+ Will return a gif with only females in it.
+-
+ Will return a gif with 2 males and 1 female in it.
+
+**Examples:**
+
+- `p.threesome @user1 @user2`
+- `p.threesome @user1 @user2 --fff`
+- `p.threesome @user1 @user2 --mmf`
+///
Askes two users if they want to have sex with you.
If no additional argument is provided, will the returned gif show 1 male and 2 females. This can be changed to only females with `--fff` or 2 males and 1 female with `--mmf`.
diff --git a/docs/en/bot/faq.md b/docs/en/bot/faq.md
new file mode 100644
index 00000000..0d4060a8
--- /dev/null
+++ b/docs/en/bot/faq.md
@@ -0,0 +1,12 @@
+---
+template: redirect.html
+
+location: 'https://discord.gg/NB7AFqn'
+
+title: FAQ
+
+icon: octicons/link-external-24
+not_translatable: true
+---
+
+
\ No newline at end of file
diff --git a/docs/en/bot/selfhosting.md b/docs/en/bot/selfhosting.md
index d1fd5a06..76bca0c7 100644
--- a/docs/en/bot/selfhosting.md
+++ b/docs/en/bot/selfhosting.md
@@ -21,12 +21,13 @@ description: Want to selfhost the Bot? This page explains the details.
Some of you may want to selfhost the bot on your own VPS/server.
This page explains how you can selfhost the bot for yourself.
-!!! warning "Important!"
- By selfhosting the bot will you agree to the following terms:
-
- - You follow the [MIT-License] of the bot.
- - This means that you give credit to the original author (Andre_601) and won't claim this code as your own.
- - You aknowledge and agree that you won't receive any support for your selfhosted bot.
+/// warning | Important!
+By selfhosting the bot will you agree to the following terms:
+
+- You follow the [MIT-License] of the bot.
+ - This means that you give credit to the original author (Andre_601) and won't claim this code as your own.
+- You aknowledge and agree that you won't receive any support for your selfhosted bot.
+///
## Requirements
Before you can run the bot will you need to make sure that the following requirements are met.
@@ -116,35 +117,38 @@ When you're done with your changes, make sure to execute `gradlew clean shadowJa
The `config.json` is the core file of the bot in which you set various different information that will be used by the bot.
On first startup will it generate with the below default values.
-??? note "Default Config.json"
- ```json
- {
- "bot-token": "TOKEN",
-
- "beta": false,
- "debug": false,
-
- "webhooks": {
- "guild": "guild-webhook-url",
- "log": "log-webhook-url"
- },
-
- "tokens": {
- "fluxpoint-dev": "fluxpoint-dev-token",
-
- "discord-bots-gg": "dbgg-token",
- "botlist-space": "botlist-token",
- "discordextremelist-xyz": "debl-token",
- "discordservices-net": "discordservices-net-token"
- },
-
- "database": {
- "ip": "127.0.0.1",
- "name": "DatabaseName",
- "guildTable": "GuildTable"
- }
- }
- ```
+/// details | Default Config.json
+ type: note
+
+```json
+{
+ "bot-token": "TOKEN",
+
+ "beta": false,
+ "debug": false,
+
+ "webhooks": {
+ "guild": "guild-webhook-url",
+ "log": "log-webhook-url"
+ },
+
+ "tokens": {
+ "fluxpoint-dev": "fluxpoint-dev-token",
+
+ "discord-bots-gg": "dbgg-token",
+ "botlist-space": "botlist-token",
+ "discordextremelist-xyz": "debl-token",
+ "discordservices-net": "discordservices-net-token"
+ },
+
+ "database": {
+ "ip": "127.0.0.1",
+ "name": "DatabaseName",
+ "guildTable": "GuildTable"
+ }
+}
+```
+///
Note that you don't have to set values for every option in the config.json.
If you followed the previous step on preparing the bot will you only need to set the following options:
diff --git a/docs/en/bot/welcome-channel.md b/docs/en/bot/welcome-channel.md
index 03500dda..b6af5506 100644
--- a/docs/en/bot/welcome-channel.md
+++ b/docs/en/bot/welcome-channel.md
@@ -5,23 +5,25 @@ description: How to setup the Welcome System.
The welcome channel allows you to greet people with a message and image when they join your Discord.
-!!! info "Notes"
- Before you set up the channel, make sure you have made the following checks first:
-
- - You have `Manage Server` permission or are the owner of the Discord server.
- - The bot has `Send Messages` and `Attach Files` permission for the channel where it should send the welcome messsages.
-
- For simplicity reasons will the shown commands here use the default prefix (`p.`).
- If you have set a different prefix, use that instead.
-
-??? youtube "Video Tutorial"
- Here is a video explaining the steps below.
-
-
+/// info | Notes
+Before you set up the channel, make sure you have made the following checks first:
+
+- You have `Manage Server` permission or are the owner of the Discord server.
+- The bot has `Send Messages` and `Attach Files` permission for the channel where it should send the welcome messsages.
+
+For simplicity reasons will the shown commands here use the default prefix (`p.`).
+If you have set a different prefix, use that instead.
+///
+
+/// details | Video Tutorial
+ type: youtube
+
+Here is a video explaining the steps below.
+
+
+///
## Step 1: Set a channel {: #step-1 }
-
-
You first have to set a channel, before you can greet people.
To do that, run `p.welcome channel set #channel` where `#channel` is the channel you want to use for greeting people.
@@ -29,8 +31,6 @@ To do that, run `p.welcome channel set #channel` where `#channel` is the channel
Reset this using `p.welcome channel reset`
## Step 2: Set a background {: #step-2 }
-
-[](welcome-images.md#color_white)
Set a background that will be used on the image.
The syntax is `p.welcome bg set ` where `` is one of the [available backgrounds](welcome-images.md#backgrounds).
@@ -38,8 +38,6 @@ The syntax is `p.welcome bg set ` where `` is one of the
Reset this using `p.welcome bg reset`
## Step 3: Set an icon {: #step-3 }
-
-[](welcome-images.md#purr)
You can set an icon, which is shown on the right side of the image.
Use `p.welcome icon set ` where `` is one of the [available icons](welcome-images.md#icons).
@@ -47,8 +45,6 @@ Use `p.welcome icon set ` where `` is one of the [available icons](w
Reset this using `p.welcome icon reset`
## Step 4: Set a text color {: #step-4 }
-
-
The default font color isn't visible on all backgrounds. For that can you change it with `.welcome color set `.
`` has to be either `hex:rrggbb`, `rgb:r,g,b` or `random`.
@@ -56,8 +52,6 @@ The default font color isn't visible on all backgrounds. For that can you change
Reset this using `p.welcome color reset`
## Step 5: Set a message {: #step-5 }
-
-
You can set your very own welcome message that is shown next to the image.
To do that run `p.welcome msg set ` where `` can be anything you want.
@@ -80,8 +74,6 @@ To do that run `p.welcome msg set ` where `` can be anything y
Reset this using `p.welcome msg reset`
## Final Step: Testing {: #final-step }
-
-
You can see the current message and image set by running `p.welcome test`
This will generate a message similar to the one which would be shown for joining members.
diff --git a/docs/en/bot/welcome-images.md b/docs/en/bot/welcome-images.md
index 73959cd9..94496bbc 100644
--- a/docs/en/bot/welcome-images.md
+++ b/docs/en/bot/welcome-images.md
@@ -10,14 +10,14 @@ description: All available Welcome images.
[waifu]: https://fluxpoint.dev/waifu
[hangman]: https://fluxpoint.dev/hangman
-\*Purr* allows you to set a welcome-channel where she greets joining users with a message and an image.
+\*Purr\* allows you to set a welcome-channel where she greets joining users with a message and an image.
A tutorial on how to set this up can be found [here](welcome-channel.md).
This page here lists all available icons and backgrounds that can be used.
If you have suggestions for new backgrounds or icons, feel free to join our [Discord] and suggest it there.
## Credit
-\*Purr* uses the API from [Fluxpoint Development][fluxpoint] which is owned by Builderb, the creator of popular bots like [Waifu] and [Hangman].
+\*Purr\* uses the API from [Fluxpoint Development][fluxpoint] which is owned by Builderb, the creator of popular bots like [Waifu] and [Hangman].
----
## Backgrounds
@@ -29,7 +29,7 @@ These backrgounds are only available as a reward for boosting the [Discord Serve
#### booster
Background with Booster colour and icons.
-![image](https://purrbot.site/images/boost/booster_background.png)
+![image](https://purrbot.site/images/boost/booster_background.png){ loading="lazy" }
----
### Colors
@@ -38,37 +38,37 @@ Simple one color-backgrounds.
#### color_black
The color black. (`#000000`)
-![image](https://purrbot.site/img/sfw/background/img/color_black.png)
+![image](https://purrbot.site/img/sfw/background/img/color_black.png){ loading="lazy" }
#### color_blue
The color blue. (`#2980B9`)
-![image](https://purrbot.site/img/sfw/background/img/color_blue.png)
+![image](https://purrbot.site/img/sfw/background/img/color_blue.png){ loading="lazy" }
#### color_blurple
The **original** Blurple from before the Discord rebranding (`#7289DA`)
-![image](https://purrbot.site/img/sfw/background/img/color_blurple.png)
+![image](https://purrbot.site/img/sfw/background/img/color_blurple.png){ loading="lazy" }
#### color_green
The color green. (`#27AE60`)
-![image](https://purrbot.site/img/sfw/background/img/color_green.png)
+![image](https://purrbot.site/img/sfw/background/img/color_green.png){ loading="lazy" }
#### color_grey
The color grey. (`#959595`)
-![image](https://purrbot.site/img/sfw/background/img/color_grey.png)
+![image](https://purrbot.site/img/sfw/background/img/color_grey.png){ loading="lazy" }
#### color_red
The color red. (`#C0392B`)
-![image](https://purrbot.site/img/sfw/background/img/color_red.png)
+![image](https://purrbot.site/img/sfw/background/img/color_red.png){ loading="lazy" }
#### color_white
The color white. (`#FFFFFF`)
-![image](https://purrbot.site/img/sfw/background/img/color_white.png)
+![image](https://purrbot.site/img/sfw/background/img/color_white.png){ loading="lazy" }
----
### Gradients
@@ -77,32 +77,32 @@ Some nice gradients
#### gradient
A slightly blue-ish gradient.
-![image](https://purrbot.site/img/sfw/background/img/gradient.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient.png){ loading="lazy" }
#### gradient_blue
A dark-blue gradient.
-![image](https://purrbot.site/img/sfw/background/img/gradient_blue.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient_blue.png){ loading="lazy" }
#### gradient_dark_red
A dark-red gradient.
-![image](https://purrbot.site/img/sfw/background/img/gradient_dark_red.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient_dark_red.png){ loading="lazy" }
#### gradient_green
A dark_green gradient.
-![image](https://purrbot.site/img/sfw/background/img/gradient_green.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient_green.png){ loading="lazy" }
#### gradient_orange
A orange gradient.
-![image](https://purrbot.site/img/sfw/background/img/gradient_orange.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient_orange.png){ loading="lazy" }
#### gradient_red
A red gradient (bright red).
-![image](https://purrbot.site/img/sfw/background/img/gradient_red.png)
+![image](https://purrbot.site/img/sfw/background/img/gradient_red.png){ loading="lazy" }
----
### Other {: #other-backgrounds }
@@ -118,7 +118,7 @@ The only requirements are, that the image has the right dimensions (`2000x350`)
#### rainbow
A rainbow gradient.
-![image](https://purrbot.site/img/sfw/background/img/rainbow.png)
+![image](https://purrbot.site/img/sfw/background/img/rainbow.png){ loading="lazy" }
#### random
The option `random` picks one of the above backgrounds randomly for each new image.
@@ -133,7 +133,7 @@ These icons are only available as a reward for boosting the [Discord Server][dis
#### booster
Icon Wumpus on it.
-![image](https://purrbot.site/images/boost/booster_icon.png)
+![image](https://purrbot.site/images/boost/booster_icon.png){ loading="lazy" }
### Nekos
Neko related icons.
@@ -141,34 +141,34 @@ Neko related icons.
#### neko_hug
Shows a neko hugging a human UwU
-![image](https://purrbot.site/img/sfw/icon/img/neko_hug.png)
+![image](https://purrbot.site/img/sfw/icon/img/neko_hug.png){ loading="lazy" }
#### neko_smile
A smiling neko :3
-![image](https://purrbot.site/img/sfw/icon/img/neko_smile.png)
+![image](https://purrbot.site/img/sfw/icon/img/neko_smile.png){ loading="lazy" }
#### purr
\*Purr\* herself. >w<
Created by `Makay#0270`
-![image](https://purrbot.site/img/sfw/icon/img/purr.png){: width="320" }
+![image](https://purrbot.site/img/sfw/icon/img/purr.png){ width="320" loading="lazy" }
#### purr_old
\*Purr\*'s old avatar. -w-
-![image](https://purrbot.site/img/sfw/icon/img/purr_old.png)
+![image](https://purrbot.site/img/sfw/icon/img/purr_old.png){ loading="lazy" }
#### snuggle
\*Purr\*'s younger sister \*Snuggle\*. OwO
-![image](https://purrbot.site/img/sfw/icon/img/snuggle.png)
+![image](https://purrbot.site/img/sfw/icon/img/snuggle.png){ loading="lazy" }
#### snuggle_lurk
\*Snuggle\* lurking at you...
Created by `Makay#0270`
-![image](https://purrbot.site/img/sfw/icon/img/snuggle_lurk.png)
+![image](https://purrbot.site/img/sfw/icon/img/snuggle_lurk.png){ loading="lazy" }
----
### Sewayaki Kitsune no Senko-san {: #senko-san }
@@ -177,12 +177,12 @@ Characters from the anime "Sewayaki Kitsune no Senko-san"
#### Senko
The main female character of the anime.
-![image](https://purrbot.site/img/sfw/icon/img/senko.png)
+![image](https://purrbot.site/img/sfw/icon/img/senko.png){ loading="lazy" }
#### Shiro
The second female character of the anime.
-![image](https://purrbot.site/img/sfw/icon/img/shiro.png)
+![image](https://purrbot.site/img/sfw/icon/img/shiro.png){ loading="lazy" }
----
### Spice & Wolf {: #spice-and-wolf }
@@ -191,7 +191,7 @@ Characters from the anime "Spice & Wolf".
#### holo
The main character holo.
-![image](https://purrbot.site/img/sfw/icon/img/holo.png)
+![image](https://purrbot.site/img/sfw/icon/img/holo.png){ loading="lazy" }
----
### Other {: #other-icons }
diff --git a/docs/en/contribute/formatting-help.md b/docs/en/contribute/formatting-help.md
index 53f90940..adeb2474 100644
--- a/docs/en/contribute/formatting-help.md
+++ b/docs/en/contribute/formatting-help.md
@@ -3,15 +3,15 @@ title: Formatting Help
description: Page explaining the details about formatting those docs.
---
-[PyMdown]: https://facelessuser.github.io/pymdown-extensions/
+[pymdownx]: https://facelessuser.github.io/pymdown-extensions/
[MkDocs]: https://www.mkdocs.org
[MkDocs-Material extension]: https://github.com/facelessuser/mkdocs-material-extensions
[FontAwesome]: https://fontawesome.com/icons?d=gallery&m=free
[Material Design]: https://materialdesignicons.com/
[Octicons]: https://octicons.github.com
+[Simple-Icons]: https://simpleicons.org
-# Formatting Help
This page lists all the different Markdown formatting syntaxes, which are used across the documentation.
Please not that not all Styles are available for the default Markdown shipped with MkDocs and require extensions to be installed.
Any extension required will be mentioned.
@@ -20,228 +20,284 @@ Any extension required will be mentioned.
Unordered and ordered lists have a slightly different formatting than the one you're probably used to.
In order for the list to work will they require an empty line between the list, and any displayed text above them.
-!!! example "List example"
- === "Markdown"
- ```markdown
- This list below will work.
-
- - Entry 1
- - Entry 2
- - Entry 3
-
- ----
- This list, however, won't work.
- - Entry 1
- - Entry 2
- - Entry 3
- ```
-
- === "Result"
- This list below will work.
-
- - Entry 1
- - Entry 2
- - Entry 3
-
- ----
- This list, however, won't work.
- - Entry 1
- - Entry 2
- - Entry 3
+//// example | List example
+/// tab | Markdown
+```markdown
+This list below will work.
+
+- Entry 1
+- Entry 2
+- Entry 3
+
+----
+This list, however, won't work.
+- Entry 1
+- Entry 2
+- Entry 3
+```
+///
+
+/// tab | Result
+This list below will work.
+
+- Entry 1
+- Entry 2
+- Entry 3
+
+----
+This list, however, won't work.
+- Entry 1
+- Entry 2
+- Entry 3
+///
+////
In addition to the above requirement will you also need to use 4 spaces compared to the usual 2, when you want to indent the list.
-!!! example "Indent example"
- === "Markdown"
- ```markdown
- Working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
-
- ----
- Not working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
- ```
-
- === "Result"
- Working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
-
- ----
- Not working indents:
-
- - Entry 1
- - Entry 1.1
- - Entry 2
+//// example | Indent example
+/// tab | Markdown
+```markdown
+Working indents:
+
+- Entry 1
+ - Entry 1.1
+- Entry 2
+
+----
+Not working indents:
+
+- Entry 1
+ - Entry 1.1
+- Entry 2
+```
+///
+
+/// tab | Result
+Working indents:
+
+- Entry 1
+ - Entry 1.1
+- Entry 2
+
+----
+Not working indents:
+
+- Entry 1
+ - Entry 1.1
+- Entry 2
+///
+////
## Info boxes
You sure have noticed those neat looking boxes that contain various information of stuff.
-Those are provided through [MkDocs] and use a specific syntax, that you need to follow.
-
-!!! example "Box examples"
- === "Markdown"
- ```markdown
- !!! info "Title"
- Rules about Markdown still apply.
-
- - F.e. Lists
- - Still need an empty line
-
- ----
-
- !!! info
- The title can be omited.
- The box will then use the name of its type.
- ```
-
- === "Result"
- !!! info "Title"
- Rules about Markdown still apply.
-
- - F.e. Lists
- - Still need an empty line
-
- ----
-
- !!! info
- The title can be omited.
- The box will then use the name of its type.
-
-!!! warning "Special rules"
- - You don't need to add two spaces after the `!!! ""`. MkDocs can handle this just fine.
- - You need to add at least one empty line before and after the info box to not have unwanted formatting issues.
+These are known as "callouts" or "admonitions" and are provided through the [Pymdown extension `blocks.admonition`][pymdownx].
+
+///// example | Box examples
+//// tab | Markdown
+```markdown
+/// info | Title
+Rules about Markdown still apply.
+
+- F.e. Lists
+- Still need an empty line
+///
+
+----
+
+/// info
+The title can be omited.
+The box will then use the name of its type.
+///
+```
+////
+
+//// tab | Result
+/// info | Title
+Rules about Markdown still apply.
+
+- F.e. Lists
+- Still need an empty line
+///
+
+----
+
+/// info
+The title can be omited.
+The box will then use the name of its type.
+///
+////
+/////
### Types
-The info boxes have various types available which you can choose from:
+Admonition boxes have different types available that you can choose from:
+
+/// note
+///
-!!! note
+/// abstract
+///
-!!! summary
+/// info
+///
-!!! info
+/// tip
+///
-!!! tip
+/// success
+///
-!!! success
+/// question
+///
-!!! question
+/// warning
+///
-!!! warning
+/// failure
+///
-!!! failure
+/// danger
+///
-!!! danger
+/// bug
+///
-!!! bug
+/// example
+///
-!!! example
+/// quote
+///
-!!! quote
+## Collapsable info boxes (Details) { #details }
+This feature requires the `blocks.details` extension from [Pymdown extensions][pymdownx].
-## Collapsable info boxes (Details)
-This feature requires the `Details` extension from [PyMdown].
+Details have the same design as admonition boxes, but are different in that they can be opened and closed.
+The syntax is the same as with [Admonition boxes](#info-boxes) with the difference that they use `details` as identifier and that you have to define the `type` as an option inside it.
-Those boxes are similar to the normal info boxes, but can be collapsed (closed) or expanded (opened).
-They follow the same syntax as the info boxes, but use question marks (`?`) instead of exclamation marks (`!`).
-You can use the exact same [types](#types) as with the info boxes.
+///// example | Collapsable Box example
+//// tab | Markdown
+```markdown
+/// details | Title
+ type: info
+This box is closed by default
+///
-!!! example "Collapsable Box example"
- === "Markdown"
- ```markdown
- ??? info "Title"
- This box is closed by default
-
- ----
-
- ???+ info "Title"
- Adding a + after the question mark makes this box open by default.
- ```
+----
+
+/// details | Title
+ type: info
+ open: true
+
+Adding `open: true` opens it by default
+///
+```
+////
- === "Result"
- ??? info "Title"
- This box is closed by default
-
- ----
-
- ???+ info "Title"
- Adding a + after the question mark makes this box open by default.
+//// tab | Result
+/// details | Title
+ type: info
+
+This box is closed by default
+///
+
+----
+
+/// details | Title
+ type: info
+ open: true
+
+Adding `open: true` opens it by default
+///
+////
+/////
## Tabs
-This feature requires the `Tabbed` extension from [PyMdown].
-
-Adds tabbed Markdown to list content after each other. This was used here for the various Markdown examples and their results.
-The syntax is the same as with the info box, with the difference that it uses equal signs (`=`) instead of exclamation marks (`!`).
-Additionally does it also not have a type parameter, meaning you can only set the tile itself.
-
-!!! example "Tabs example"
- === "Markdown"
- ```markdown
- === "Tab 1"
- You can add more tabs...
-
- === "Tab 2"
- ...by adding extra `===`.
-
- ===! "Tab A"
- Using a ! after the equal signs...
-
- === "Tab B"
- ...indicates a new set of tabs.
- ```
-
- === "Result"
- === "Tab 1"
- You can add more tabs...
-
- === "Tab 2"
- ...by adding extra `===`.
-
- ===! "Tab A"
- Using a ! after the equal signs...
-
- === "Tab B"
- ...indicates a new set of tabs.
+This feature requires the `blocks.tab` extension from [Pymdown extensions][pymdownx].
+
+It allows to create tabs to switch in-between to display content. On this page is it used for the `Markdown` and `Result` tabs.
+The syntax is the same as with [Admonition boxes](#info-boxes) with the difference that they use `tab` as identifier and that you cannot define any type for it.
+
+///// example | Tabs example
+//// tab | Markdown
+```markdown
+/// tab | Tab 1
+You can add more tabs...
+///
+
+/// tab | Tab 2
+...by just adding additional `/// tab | title ... ///` content.
+///
+
+/// tab | Tab A
+ new: true
+
+Adding `new: true`...
+///
+
+/// tab | Tab B
+...creates a new set of tabs.
+///
+```
+////
+
+//// tab | Result
+/// tab | Tab 1
+You can add more tabs...
+///
+
+/// tab | Tab 2
+...by just adding additional `/// tab | title ... ///` content.
+///
+
+/// tab | Tab A
+ new: true
+
+Adding `new: true`...
+///
+
+/// tab | Tab B
+...creates a new set of tabs.
+///
+////
+/////
## Links
-We use the [PyMdown] extension `MagicLink` which allows us to automatically transform links into clickable links. This doesn't happen by default.
+We use `MagicLink` from [Pymdown extensions][pymdownx] to automatically make links clickable. This unfortunately is not a default behaviour in Markdown.
-!!! example "Link example"
- === "Markdown"
- ```markdown
- https://purrbot.site
- ```
-
- === "Result"
- https://purrbot.site
+//// example | Link example
+/// tab | Markdown
+```markdown
+https://purrbot.site
+```
+///
+
+/// tab | Result
+https://purrbot.site
+///
+////
Additionally can we link to a repository or GitHub user by just using the format `@user/repo` and `@user` respectively.
This also works with Twitter-users by prefixing the name with `twitter:` (`@twitter:username`)
-!!! example "Mention examples"
- === "Markdown"
- ```markdown
- @purrbot-site
- @purrbot-site/Docs
- @twitter:TruePurrBot
- ```
-
- === "Result"
- @purrbot-site
- @purrbot-site/Docs
- @twitter:TruePurrBot
+//// example | Mention examples
+/// tab | Markdown
+```markdown
+@purrbot-site
+@purrbot-site/Docs
+@twitter:TruePurrBot
+```
+///
+
+/// tab | Result
+@purrbot-site
+@purrbot-site/Docs
+@twitter:TruePurrBot
+///
+////
## Emojis
-We use the `Emojis` extension from [PyMdown] to allow the usage of emojis through the common `:emoji:` pattern.
-We also use the [MkDocs-Material Extension] which adds support for using SVG icons of [FontAwesome], [Material Design] and [Octicons] in the same format.
+We use the `Emojis` extension from [Pymdown extensions][pymdownx] to allow the usage of emojis through the common `:emoji:` pattern.
+We also use the [MkDocs-Material Extension] which adds support for using SVG icons of [FontAwesome], [Material Design], [Octicons] and [Simple-Icons] using the same format.
Note that unlike emojis, the custom ones added by the MkDocs-Material Extension require to be prefixed with the site they should come from.
@@ -250,91 +306,111 @@ Note that unlike emojis, the custom ones added by the MkDocs-Material Extension
- `fontawesome-solid` for all Solid icons
- `material` for the Material Design icons
- `octicons` for the Octicons icons
+- `simple` for the Simple-Icons icons
-!!! warning "Note about FontAwesome and Octicons"
- === "FontAwesome"
- The MkDocs-Material Extension will only be able to use free FontAwesome icons! Paid ones aren't supported.
-
- === "Octicons"
- Due to Octicons being offered in 16px and 24px format, are you required to suffix the icon name with either `-16` or `-24` depending on which you want to use.
- As an example: Instead of `:octicon-repo:` would you use `:octicon-repo-16:` or `:octicon-repo-24:`
-
-!!! example "Emoji/Icons Examples"
- === "Markdown"
- ```markdown
- Normal Emojis
-
- - :smile:
- - :heart:
-
- FontAwesome Icons (Brands):
-
- - :fontawesome-brands-github:
- - :fontawesome-brands-discord:
-
- FontAwesome Icons (Regular)
-
- - :fontawesome-regular-bell:
- - :fontawesome-regular-bell-slash:
-
- FontAwesome Icons (Solid)
-
- - :fontawesome-solid-bell:
- - :fontawesome-solid-bell-slash:
-
- Material Design:
-
- - :material-sync:
- - :material-alert:
-
- Octicons:
-
- - :octicons-repo-24:
- - :octicons-git-pull-request-24:
- ```
+//// warning | Note about FontAwesome and Octicons
+/// tab | FontAwesome
+The MkDocs-Material Extension will only be able to use free FontAwesome icons! Paid ones aren't supported.
+///
+
+/// tab | Octicons
+Due to Octicons being offered in 16px and 24px format, are you required to suffix the icon name with either `-16` or `-24` depending on which you want to use.
+As an example: Instead of `:octicon-repo:` would you use `:octicon-repo-16:` or `:octicon-repo-24:`
+///
+////
+
+//// example | Emoji/Icons Examples
+/// tab | Markdown
+```markdown
+Normal Emojis:
+
+- :smile:
+- :heart:
+
+FontAwesome Icons (Brands):
+
+- :fontawesome-brands-github:
+- :fontawesome-brands-discord:
+
+FontAwesome Icons (Regular):
+
+- :fontawesome-regular-bell:
+- :fontawesome-regular-bell-slash:
+
+FontAwesome Icons (Solid):
+
+- :fontawesome-solid-bell:
+- :fontawesome-solid-bell-slash:
+
+Material Design:
+
+- :material-sync:
+- :material-alert:
+
+Octicons:
+
+- :octicons-repo-24:
+- :octicons-git-pull-request-24:
+
+Simple-Icons:
+
+- :simple-mastodon:
+- :simple-simpleicons:
+```
+///
- === "Result"
- Normal Emojis
-
- - :smile:
- - :heart:
-
- FontAwesome Icons (Brands):
-
- - :fontawesome-brands-github:
- - :fontawesome-brands-discord:
-
- FontAwesome Icons (Regular)
-
- - :fontawesome-regular-bell:
- - :fontawesome-regular-bell-slash:
-
- FontAwesome Icons (Solid)
-
- - :fontawesome-solid-bell:
- - :fontawesome-solid-bell-slash:
-
- Material Design:
-
- - :material-sync:
- - :material-alert:
-
- Octicons:
-
- - :octicons-repo-24:
- - :octicons-git-pull-request-24:
+/// tab | Result
+Normal Emojis:
-## Buttons
-Using the List Attribute extension can we turn embedded Links (`[text](link)`) into buttons by appending `{: .md-button }` to it.
+- :smile:
+- :heart:
+
+FontAwesome Icons (Brands):
+
+- :fontawesome-brands-github:
+- :fontawesome-brands-discord:
+
+FontAwesome Icons (Regular):
+
+- :fontawesome-regular-bell:
+- :fontawesome-regular-bell-slash:
+
+FontAwesome Icons (Solid):
+
+- :fontawesome-solid-bell:
+- :fontawesome-solid-bell-slash:
-!!! example "Button Example"
- === "Markdown"
- ```markdown
- [To the Website](https://purrbot.site){: .md-button }
- ```
+Material Design:
+
+- :material-sync:
+- :material-alert:
+
+Octicons:
+
+- :octicons-repo-24:
+- :octicons-git-pull-request-24:
+
+Simple-Icons:
+
+- :simple-mastodon:
+- :simple-simpleicons:
+///
+////
+
+## Buttons
+Using the List Attribute extension we can turn embedded Links (`[text](link)`) into buttons by appending `{ .md-button }` to it.
+
+//// example | Button Example
+/// tab | Markdown
+```markdown
+[To the Website](https://purrbot.site){ .md-button }
+```
+///
- === "Result"
- [To the Website](https://purrbot.site){: .md-button }
+/// tab | Result
+[To the Website](https://purrbot.site){ .md-button }
+///
+////
## Final Words
Those are all the important parts you need to know about the markdown syntax for the documentation.
diff --git a/docs/en/contribute/index.md b/docs/en/contribute/index.md
index 5becf83c..017b1f84 100644
--- a/docs/en/contribute/index.md
+++ b/docs/en/contribute/index.md
@@ -14,11 +14,10 @@ description: Help us improving the bot, website or this Documentation!
[imageapi]: https://github.com/purrbot-site/ImageAPI
[crowdin]: https://lang.purrbot.site
-# Contribute towards the Projects
We're always happy for people who want to help us improve our various projects.
But before you blindly dive into the stuff, keep the following things in mind.
-## Documentation/Wiki
+## Documentation/Wiki { #documentation-wiki }
The documentation (The site you're currently on) is located [here][doc] and we're happy over every improvement made, being it the addition of missing information, fixing style-issues or even just correcting minor typos.
Before you start, make sure you've read the [formatting help](formatting-help.md) page to know everything important about the styling of the docs.
diff --git a/docs/en/contribute/translate/index.md b/docs/en/contribute/translate/index.md
index ca62915d..d38217a8 100644
--- a/docs/en/contribute/translate/index.md
+++ b/docs/en/contribute/translate/index.md
@@ -6,37 +6,38 @@ description: Find out how you can translate the bot into another language.
[discord]: https://purrbot.site/discord
[crowdin]: https://crowdin.com
-# Translations
-
-!!! info
- This page only covers how to translate the Discord bot.
- If you would like to translate these docs, head over to the [Translate the docs](translate-docs.md) page.
+/// warning | Important
+This page only covers how to translate the Discord bot.
+If you would like to translate these docs, head over to the [Translate the docs](translate-docs.md) page.
+///
\*Purr* is available in various languages.
Each of those languages was made with :heart:, effort and some letters by the community.
If you would like to translate the bot into a language that doesn't exist for the bot yet, or want to help improve an existing language, follow this basic guide to find out how you can do that.
-## Step 1: Join the Discord Server {: #step-1 }
+## Step 1: Join the Discord Server { #step-1 }
You have to join the [~Nya Discord Server][discord] first because it is the main place for getting notified about new Strings that need to be translated.
Leaving the Discord as a translator will result in you being removed from the Translation Project!
-## Step 2: Request being added {: #step-2 }
-Once on the Discord Server should you contact Andre_601#0601 to request getting added as a Translator.
+## Step 2: Request being added { #step-2 }
+Once on the Discord Server should you contact `andre601` to request getting added as a Translator.
Just tell him what language you want to translate.
-!!! info "New Language"
- If the language you want to translate doesn't exist on the project yet, will it be created by Andre and you can move on to the [next step](#step-3).
+/// info | New Language
+If the language you want to translate doesn't exist on the project yet, will it be created by Andre and you can move on to the [next step](#step-3).
+///
-## Step 3: Join the Crowdin Project {: #step-3 }
+## Step 3: Join the Crowdin Project { #step-3 }
The translation Project is hosted on [Crowdin] which you can also find under the following URL: https://lang.purrbot.site
Once you got added to the Discord as a Translator can you now send a request to the project to get added.
You first need to either login to or create your account on Crowdin. Then select the language you want to translate the bot into. You should see a `Join` button with which you can send a request to get added.
When everything goes well will you be added.
-## You're done! {: #done }
+## You're done! { #done }
Congratulations! If you followed all of the above steps are you now a translator for the bot and can start translating her messages to your language.
-!!! warning "Important notes"
- If your language isn't translated for a longer time and without any reason from you, will it be removed from the Project and you will be removed as a translator.
+/// warning | Important notes
+If your language isn't translated for a longer time and without any reason from you, will it be removed from the Project and you will be removed as a translator.
+///
\ No newline at end of file
diff --git a/docs/en/contribute/translate/translate-docs.md b/docs/en/contribute/translate/translate-docs.md
index b8b61d0a..e6e6b24a 100644
--- a/docs/en/contribute/translate/translate-docs.md
+++ b/docs/en/contribute/translate/translate-docs.md
@@ -1,4 +1,7 @@
-# Translate the Documentation
+---
+title: Translate the Documentation
+description: How you can translate the documentation into your language.
+---
Our goal is to provide these docs in as many languages as possible to make them accessible to everyone.
@@ -47,14 +50,34 @@ docs/
└── index.md
```
-To start translating just copy the `en` folder and paste it in the `docs` folder. Don't forget to rename it to a [supported language identifier][languages]{ target="_blank" rel="nofollow" }.
+To start with translating the docs, copy the following files and folders from the `en` folder into your own sub-folder. Make sure the sub-folder matches an [existing language identifier][languages]{ target="_blank" rel="nofollow" }:
+```txt title="Files to copy over"
+docs/
+└── en/
+ ├── bot/
+ │ ├── commands.md
+ │ ├── index.md
+ │ ├── selfhosting.md
+ │ ├── welcome-channel.md
+ │ └── welcome-images.md
+ ├── contribute/
+ │ ├── translate/
+ │ │ ├── index.md
+ │ │ └── translate-docs.md
+ │ ├── formatting-help.md
+ │ └── index.md
+ ├── credits/
+ │ └── index.md
+ ├── legal/
+ │ └── index.md
+ └── index.md
+```
### Adding your language
In order for the `mkdocs-static-i18n` to recognize your language will you need to add a new entry to the `languages` setting of the `i18n` plugin in the `mkdocs.yml`.
-The most basic structure looks similar to this:
+The most basic structure looks similar to this (Using `de-CH` (Swiss german) as example):
```yaml title="mkdocs.yml"
-plugins:
- search
- neoteroi.mkdocsoad:
use_pymdownx: true
@@ -66,24 +89,45 @@ plugins:
name: English
build: true
# ...other languages
- - locale: example # (1)
- name: Example # (2)
+ - locale: de-CH # (1)
+ name: Deutsch (Schweiz) # (2)
build: true
- nav_translations: # (3)
+ site_name: PurrBot Dokumentation
+ site_description: 'API-Dokumentation und Wiki von *Purr*'
+ copyright: | # (3)
+ Dokumentation mit
+
+ gemacht und unter der
+ MIT-Lizenz geteilt.
+ extra: # (4)
+ translate:
+ missing_translation: 'Diese Seite wurde noch nicht übersetzt.'
+ not_translatable: 'Diese Seite kann nicht übersetzt werden und ist darum nur auf Englisch verfügbar.'
+ footer: |
+ Erstellt mit MkDocs,
+ Material for MkDocs und
+ Pymdown Extensions.
+ nav_translations: # (5)
# Welcome system
- Welcome-System: Lorem
+ Welcome-System: Willkommenssystem
# Contributing
- Contributing: Ipsum
- Translations: Dolor
+ Contributing: Mitmachen
+ Translations: Übersetzungen
# Legal
- Legal: Sit
+ Legal: Rechtliches
```
1. Replace this entry with a [valid language option][languages]{ target="_blank" rel="nofollow" }.
2. This will be displayed in the language selector.
- 3. This is used to translate parts of the nav that can't be translated through other means.
+ 3. This will be used to change the text in the copyright footer. The `` tag should - with exception of the `title` attribute - not be modified.
+ 4. This is used to translate Strings in the "extra" section of the config.
+
+ - `missing_translation` will be displayed on pages that don't have a page in their language yet.
+ - `not_translatable` will be displayed on pages that cannot be translated (That have `not_translatable: true` in their frontmatter).
+ - `footer` changes the `Build using ...` text in the footer of the page.
+ 5. This is used to translate parts of the nav that can't be translated through other means.
-This should now load files inside the `example` folder, allowing you to translate them into your language.
+This example would now look for and load files inside the `de-CH` folder. You obviously would need to use your language identifier here as folder name.
### Special notes
@@ -98,42 +142,31 @@ Headers should be translated. However, to allow cross-language navigation will y
As an example, `## Some header` would become `## Lorem ipsum { #some-header }`, translating the header but keeping its original ID.
Should the header in question already have a `{ #:id }` at the end are you not required to add one and only need to translate the header itself.
-#### API Page
-
-The API page's content is auto-generated from the `imageapi.json` file and is therefore not translatable by normal means.
+#### Untranslatable pages
-Instead of having you translate an entire JSON file should you only translate the page title and description in the YAML frontmatter and add an admonition box informing about the untranslated docs.
+There are a few pages that cannot be translated for various reasons.
+To avoid any issues, do not include these pages in your translations folder (Delete them if they exist in your language folder).
-Here is an example of how the file would look like:
-```markdown title="api/index.md"
----
-title: API
-description: 'Documentation about the ImageAPI found at https://purrbot.site/api'
+The following pages are not to be included in your translation folder (Path relative to `docs/en/`):
-hide:
- - navigation
----
-
-/// note | Note
-The shown API documentation is auto-generated and therefore only available in English.
-///
-
-
-```
+- `api/index.md`
+- `legal/api.md`
+- `legal/bot.md`
+- `legal/website.md`
#### Snippets
Snippets are files located in `theme/.snippets/` and should be translated too.
To do this, copy the snippet in question, change the `__en` to your language code (i.e. `__de`) and translate the content inside it. Make sure to keep things such as Admonition formatting consistent.
-#### Things NOT to translate
+#### Untranslatable content
-The following things should **not** be translated and kept as-is:
+The following content should **not** be translated and kept as-is:
- Headers of image names in [Welcome Images](../../bot/welcome-images.md) (i.e. `color_black`).
- Command names and Aliases in [Commands](../../bot/commands.md) (i.e. `bite`).
- The name of the bot (`*Purr*`).
-- Project names in [`Credits`](../../credits/index.md).
-- Any brand name (Discord, YouTube, etc.).
+- Project and user names in [`Credits`](../../credits/index.md).
+- Any brand name (Discord, YouTube, etc.) unless they have a brand name specific to your language.
[languages]: https://squidfunk.github.io/mkdocs-material/setup/changing-the-language/#site-language
\ No newline at end of file
diff --git a/docs/en/credits/index.md b/docs/en/credits/index.md
index f323e48c..484a05b1 100644
--- a/docs/en/credits/index.md
+++ b/docs/en/credits/index.md
@@ -1,40 +1,31 @@
---
-name: Credits
-description: Find out what awesome Open-Source Software makes *Purr* and the API work.
+title: Credits
+description: Find out what awesome open-source software is used to power *Purr* and the API.
---
-This page lists different credits for all the different things used by either \*Purr* or for other things on the purrbot.site GitHub organisation.
+This page shows various credits for all the different things used by either \*Purr\* or another project on the purrbot.site Organization.
-## Used Libraries and utilities
-
-[Caffeine]: https://github.com/ben-manes/caffeine
-[Discord-Webhooks]: https://github.com/MinnDevelopment/discord-webhooks
-[Gson]: https://github.com/google/gson
-[JDA]: https://github.com/DV8FromTheWorld/JDA
-[jda-command]: https://github.com/rainestormee/jda-command
-[RethinkDB]: https://github.com/rethinkdb/rethinkdb
-
-[MkDocs]: https://github.com/mkdocs/mkdocs
-[MkDocs-Material]: https://github.com/squidfunk/mkdocs-material
-[PyMdown-extensions]: https://github.com/facelessuser/pymdown-extension
+## Used libraries and utilities
### Bot
-Thanks to the following people, who provide their libraries used by \*Purr*
+Thanks to the following people, who provide their library for \*Purr\* to use:
-| Library | Author | License | Used for |
-| ------------------ | ---------------- | ---------- | ------------------------------------------------------------- |
-| [Caffeine] | @ben-manes | Apache 2.0 | Caching various different information. |
-| [Discord-Webhooks] | @MinnDevelopment | Apache 2.0 | Sending Webhook messages in Discord. |
-| [Gson] | @google | Apache 2.0 | Parsing and (de)serialization of JSON. |
-| [JDA] | @DV8FromTheWorld | Apache 2.0 | Logging into Discord and using their API. |
-| [jda-command] | @rainestormee | Apache 2.0 | Adding and managing commands in Discord. |
-| [RethinkDB] | @RethinkDB | Apache 2.0 | Database management. |
+| Library | License | Used for |
+|-----------------------------------|------------|---------------------------------------------|
+| @ben-manes/Caffeine | Apache 2.0 | Caching of various data. |
+| @MinnDevelopment/Discord-Webhooks | Apache 2.0 | Sending of Webhook messages in Discord. |
+| @google/Gson | Apache 2.0 | Parsing from and to JSON. |
+| @discord-jda/JDA | Apache 2.0 | Logging into and using the Discord API. |
+| @rainestormee/jda-command | Apache 2.0 | Adding and managing of commands in Discord. |
+| @rethinkdb/rethinkdb | Apache 2.0 | Database management. |
### Wiki
-Thanks to the following people, providing software to make this documentation possible!
-
-| Software | Author | Licesne | Used for |
-| ---------------------------- | --------------- | ------------ | -------------------------------- |
-| [MkDocs] | @MkDocs | BSD-2-Clause | Building this documentation. |
-| [MkDocs-Material] | @squidfunk | MIT | Theme of this documentation. |
-| [PyMdown-extensions] | @facelessuser | MIT | Extensions for the documentation |
+Thanks to the following people, who provide software making this documentation possible!
+
+| Software | License | Used for |
+|---------------------------------|--------------|------------------------------------------------|
+| @mkdocs/mkdocs | BSD-2-Clause | Creating this documentation. |
+| @squidfunk/mkdocs-material | MIT | Theme of this documentation. |
+| @facelessuser/pymdown-extension | MIT | Various extensions used by this documentation. |
+| @neoteroi/mkdocs-plugins | MIT | REST-API documentation. |
+| @ultrabug/mkdocs-static-i18n | MIT | Translations of the documentation. |
diff --git a/docs/en/legal/api.md b/docs/en/legal/api.md
index 0ef632e2..0812a146 100644
--- a/docs/en/legal/api.md
+++ b/docs/en/legal/api.md
@@ -1,23 +1,9 @@
---
title: API ToS and Privacy Policy
description: The Terms of Service and Privacy Policy for the ImageAPI.
----
-
-
-
-
-
-
-
-
-
-
-
+not_translatable: true
+---
# API
diff --git a/docs/en/legal/bot.md b/docs/en/legal/bot.md
index 08f721bb..bad54550 100644
--- a/docs/en/legal/bot.md
+++ b/docs/en/legal/bot.md
@@ -1,6 +1,8 @@
---
title: Bot ToS and Privacy Policy
description: The Terms of Service and Privacy Policy of the Discord Bot.
+
+not_translatable: true
---
[Terms of Service]: https://discord.com/terms
@@ -10,22 +12,6 @@ description: The Terms of Service and Privacy Policy of the Discord Bot.
[support]: https://purrbot.site/discord
[language]: https://discord.com/developers/docs/dispatch/field-values#predefined-field-values-accepted-locales
-
-
-
-
-
-
-
-
-
-
-
-
# Bot
## Terms of Service
diff --git a/docs/en/legal/website.md b/docs/en/legal/website.md
index a2661952..a8647708 100644
--- a/docs/en/legal/website.md
+++ b/docs/en/legal/website.md
@@ -1,6 +1,8 @@
---
title: Website Legal info
description: Legal information about the website.
+
+not_translatable: true
---
[Maxee]: https://notmaxee.github.io/
@@ -8,22 +10,6 @@ description: Legal information about the website.
[CloudFlare]: https://cloudflare.com
[WidgetBot]: https://widgetbot.io
-
-
-
-
-
-
-
-
-
-
-
-
# Website
## Affiliations
diff --git a/mkdocs.yml b/mkdocs.yml
index 056c4231..0fbc9287 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -7,8 +7,8 @@ site_url: 'https://docs.purrbot.site'
copyright: |
Docs made with
- and provided under the
- MIT-License.
+ and available under the
+ MIT-License.
docs_dir: docs/
@@ -23,7 +23,7 @@ nav:
- Bot:
- bot/index.md
- bot/commands.md
- - FAQ: 'https://purrbot.site/discord'
+ - bot/faq.md
- bot/selfhosting.md
- Welcome-System:
- bot/welcome-channel.md
@@ -34,8 +34,7 @@ nav:
- Translations:
- contribute/translate/index.md
- contribute/translate/translate-docs.md
- - Credits:
- - credits/index.md
+ - credits/index.md
- Legal:
- legal/index.md
- legal/bot.md
@@ -101,6 +100,13 @@ extra:
link: 'https://twitter.com/TruePurrBot'
- icon: 'simple/mastodon'
link: 'https://botsin.space/@purrbot'
+ translate:
+ missing_translation: 'This page has not yet been translated.'
+ not_translatable: 'This page cannot be translated and is therefore only available in English.'
+ footer: |
+ Build using MkDocs,
+ Material for MkDocs and
+ Pymdown Extensions.
plugins:
- search
@@ -113,9 +119,24 @@ plugins:
default: true
name: English
build: true
- - locale: de
- name: Deutsch
+ - locale: de-CH
+ name: Deutsch (Schweiz)
build: true
+ site_name: PurrBot Dokumentation
+ site_description: 'API-Dokumentation und Wiki von *Purr*'
+ copyright: |
+ Dokumentation mit
+
+ gemacht und unter der
+ MIT-Lizenz verfügbar.
+ extra:
+ translate:
+ missing_translation: 'Diese Seite wurde noch nicht übersetzt.'
+ not_translatable: 'Diese Seite kann nicht übersetzt werden und ist darum nur auf Englisch verfügbar.'
+ footer: |
+ Erstellt mit MkDocs,
+ Material for MkDocs und
+ Pymdown Extensions.
nav_translations:
# Welcome system
Welcome-System: Willkommenssystem
@@ -136,7 +157,6 @@ markdown_extensions:
- pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
- - pymdownx.details
- pymdownx.magiclink:
repo_url_shortener: true
repo_url_shorthand: true
@@ -162,3 +182,6 @@ markdown_extensions:
- bug
- example
- quote
+ - pymdownx.blocks.details:
+ - pymdownx.blocks.tab:
+ alternate_style: true
diff --git a/requirements.txt b/requirements.txt
index f5367b17..1e1099b2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,3 @@
mkdocs-material==9.4.7
neoteroi-mkdocs==1.0.4
-mkdocs-static-i18n==1.1.0
+mkdocs-static-i18n==1.2.0
diff --git a/theme/main.html b/theme/main.html
index 2b9ef80d..cd41ddbf 100644
--- a/theme/main.html
+++ b/theme/main.html
@@ -42,8 +42,25 @@
{% endif %}
{% endblock %}
-{% block config %}
- {{ super() }}
-
-
+{% block announce %}
+ {% if page.meta and i18n_page_locale != "en" and i18n_file_locale != i18n_page_locale %}
+ {% set announcement_classes = "announcement-translation" %}
+ {% if page.meta.not_translatable %}
+ {% set announcement_classes = announcement_classes ~ " announcement-translation__not-translatable" %}
+ {% endif %}
+
+
+ {% if page.meta.not_translatable %}
+
+ {% include ".icons/material/translate-off.svg" %}
+
+ {{ config.extra.translate.not_translatable | d('This page cannot be translated and is therefore only available in English.') }}
+ {% else %}
+
+ {% include ".icons/material/translate.svg" %}
+
+ {{ config.extra.translate.missing_translation | d('This page has not yet been translated.') }}
+ {% endif%}
+
+ {% endif %}
{% endblock %}
diff --git a/theme/partials/copyright.html b/theme/partials/copyright.html
index 6f6cd0e7..0b42ae1c 100644
--- a/theme/partials/copyright.html
+++ b/theme/partials/copyright.html
@@ -5,8 +5,6 @@
{% endif %}
-
- Built using MkDocs,
- Material for MkDocs
- and PyMdown Extensions.
+
+ {{ config.extra.translate.footer }}
\ No newline at end of file
diff --git a/theme/partials/footer.html b/theme/partials/footer.html
index af7d4c01..d62eb4b1 100644
--- a/theme/partials/footer.html
+++ b/theme/partials/footer.html
@@ -9,5 +9,5 @@
{% include "partials/social.html" %}
{% endif %}
-
\ No newline at end of file
diff --git a/theme/partials/languages/de-CH.html b/theme/partials/languages/de-CH.html
new file mode 100644
index 00000000..b75deb21
--- /dev/null
+++ b/theme/partials/languages/de-CH.html
@@ -0,0 +1,60 @@
+{% import "partials/languages/de.html" as language %}
+{% import "partials/languages/en.html" as fallback %}
+
+{% macro override(key) %}{{ {
+ "language": "de-ch",
+ "direction": "ltr",
+ "action.edit": "Seite bearbeiten",
+ "action.skip": "Zu Inhalt springen",
+ "action.view": "Quellcode der Seite anzeigen",
+ "announce.dismiss": "Nicht erneut anzeigen",
+ "blog.archive": "Archiv",
+ "blog.categories": "Kategorien",
+ "blog.categories.in": "in",
+ "blog.continue": "Weiterlesen",
+ "blog.draft": "Entwurf",
+ "blog.index": "Zur Übersicht",
+ "blog.meta": "Metadaten",
+ "blog.references": "Weiterführende Links",
+ "clipboard.copy": "In Zwischenablage kopieren",
+ "clipboard.copied": "In Zwischenablage kopiert",
+ "consent.accept": "Akzeptieren",
+ "consent.manage": "Einstellungen verwalten",
+ "consent.reject": "Ablehnen",
+ "footer": "Fusszeile",
+ "footer.next": "Nächste",
+ "footer.previous": "Vorherige",
+ "header": "Kopfzeile",
+ "meta.comments": "Kommentare",
+ "meta.source": "Quellcode",
+ "nav": "Navigation",
+ "readtime.one": "1 Min. Lesezeit",
+ "readtime.other": "# Min. Lesezeit",
+ "rss.created": "RSS Feed",
+ "rss.updated": "RSS Feed von aktualisierten Inhalten",
+ "search": "Suche",
+ "search.placeholder": "Suche",
+ "search.share": "Teilen",
+ "search.reset": "Zurücksetzen",
+ "search.result.initializer": "Inizialisiere Suche",
+ "search.result.placeholder": "Suchbegriff eingeben",
+ "search.result.none": "Keine passenden Dokumente",
+ "search.result.one": "1 passendes Dokument",
+ "search.result.other": "# passende Dokumente",
+ "search.result.more.one": "1 weitere auf dieser Seite",
+ "search.result.more.other": "# weitere auf dieser Seite",
+ "search.result.term.missing": "Es fehlt",
+ "select.language": "Sprache wählen",
+ "select.version": "Version wählen",
+ "source": "Zum Repository",
+ "source.file.contributors": "Mitwirkende",
+ "source.file.date.created": "Erstellt",
+ "source.file.date.updated": "Letztes Update",
+ "tabs": "Haubtnavigation",
+ "toc": "Inhaltsverzeichnis",
+ "top": "Zurück zum Anfang"
+}[key] }}{% endmacro %}
+
+{% macro t(key) %}{{
+ override(key) or language.t(key) or fallback.t(key)
+}}{% endmacro %}
\ No newline at end of file