diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
deleted file mode 100644
index 6aace741..00000000
--- a/.github/workflows/check.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Check for markdown issues
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
- workflow_dispatch:
-jobs:
- sync:
- name: 'Check for MDX Markdown issues'
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repository
- uses: actions/checkout@master
- - name: Install dependencies
- run: yarn add docusaurus-mdx-checker markdown-table-formatter
- - name: Check MDX markdown
- run: npx docusaurus-mdx-checker
- - name: Check markdown tables format
- run: npx markdown-table-formatter "docs/**/*.{md,mdx}" --check
diff --git a/blog/13-04-2025-newsletter.md b/blog/13-04-2025-newsletter.md
index 4e1940a2..b514cd9f 100644
--- a/blog/13-04-2025-newsletter.md
+++ b/blog/13-04-2025-newsletter.md
@@ -16,6 +16,8 @@ Hey there,
The holidays are just around the corner! Easter is coming up, so it's time to prepare an event for your Discord – and it's super easy with SCNX!
+
+
## Easter is Just Around the Corner
Easter is just around the corner, and what could be better than going on an Easter egg hunt together – even if it's digital this year.
diff --git a/docs/assets/linked-roles/add-role.png b/docs/assets/linked-roles/add-role.png
new file mode 100644
index 00000000..b0f84670
Binary files /dev/null and b/docs/assets/linked-roles/add-role.png differ
diff --git a/docs/assets/linked-roles/authentification-page.jpg b/docs/assets/linked-roles/authentification-page.jpg
new file mode 100644
index 00000000..51dc2cda
Binary files /dev/null and b/docs/assets/linked-roles/authentification-page.jpg differ
diff --git a/docs/assets/linked-roles/claim/1.png b/docs/assets/linked-roles/claim/1.png
new file mode 100644
index 00000000..81016182
Binary files /dev/null and b/docs/assets/linked-roles/claim/1.png differ
diff --git a/docs/assets/linked-roles/claim/2.png b/docs/assets/linked-roles/claim/2.png
new file mode 100644
index 00000000..5fcf7326
Binary files /dev/null and b/docs/assets/linked-roles/claim/2.png differ
diff --git a/docs/assets/linked-roles/claim/3.png b/docs/assets/linked-roles/claim/3.png
new file mode 100644
index 00000000..53c0e133
Binary files /dev/null and b/docs/assets/linked-roles/claim/3.png differ
diff --git a/docs/assets/linked-roles/claim/remove-role.png b/docs/assets/linked-roles/claim/remove-role.png
new file mode 100644
index 00000000..4ded2147
Binary files /dev/null and b/docs/assets/linked-roles/claim/remove-role.png differ
diff --git a/docs/assets/linked-roles/reset.png b/docs/assets/linked-roles/reset.png
new file mode 100644
index 00000000..88e55750
Binary files /dev/null and b/docs/assets/linked-roles/reset.png differ
diff --git a/docs/assets/linked-roles/role-managment/add-new-role.png b/docs/assets/linked-roles/role-managment/add-new-role.png
new file mode 100644
index 00000000..85e82e65
Binary files /dev/null and b/docs/assets/linked-roles/role-managment/add-new-role.png differ
diff --git a/docs/assets/linked-roles/role-managment/display-role-in-chat.png b/docs/assets/linked-roles/role-managment/display-role-in-chat.png
new file mode 100644
index 00000000..e7d4223a
Binary files /dev/null and b/docs/assets/linked-roles/role-managment/display-role-in-chat.png differ
diff --git a/docs/assets/linked-roles/role-managment/public-role.png b/docs/assets/linked-roles/role-managment/public-role.png
new file mode 100644
index 00000000..e4291033
Binary files /dev/null and b/docs/assets/linked-roles/role-managment/public-role.png differ
diff --git a/docs/assets/linked-roles/role-managment/role-discord-settings.png b/docs/assets/linked-roles/role-managment/role-discord-settings.png
new file mode 100644
index 00000000..35b2da10
Binary files /dev/null and b/docs/assets/linked-roles/role-managment/role-discord-settings.png differ
diff --git a/docs/assets/linked-roles/setup/click-on-oauth2-page.png b/docs/assets/linked-roles/setup/click-on-oauth2-page.png
new file mode 100644
index 00000000..8bf04704
Binary files /dev/null and b/docs/assets/linked-roles/setup/click-on-oauth2-page.png differ
diff --git a/docs/assets/linked-roles/setup/copy-client-secret.png b/docs/assets/linked-roles/setup/copy-client-secret.png
new file mode 100644
index 00000000..e7c4e878
Binary files /dev/null and b/docs/assets/linked-roles/setup/copy-client-secret.png differ
diff --git a/docs/assets/linked-roles/setup/copy-redirect-url.png b/docs/assets/linked-roles/setup/copy-redirect-url.png
new file mode 100644
index 00000000..5fcab7f5
Binary files /dev/null and b/docs/assets/linked-roles/setup/copy-redirect-url.png differ
diff --git a/docs/assets/linked-roles/setup/enter-redirect-url.webp b/docs/assets/linked-roles/setup/enter-redirect-url.webp
new file mode 100644
index 00000000..c8583937
Binary files /dev/null and b/docs/assets/linked-roles/setup/enter-redirect-url.webp differ
diff --git a/docs/assets/linked-roles/setup/select-credentials.png b/docs/assets/linked-roles/setup/select-credentials.png
new file mode 100644
index 00000000..98559304
Binary files /dev/null and b/docs/assets/linked-roles/setup/select-credentials.png differ
diff --git a/docs/assets/linked-roles/setup/success-party-time.png b/docs/assets/linked-roles/setup/success-party-time.png
new file mode 100644
index 00000000..3c55dd18
Binary files /dev/null and b/docs/assets/linked-roles/setup/success-party-time.png differ
diff --git a/docs/linked-roles.md b/docs/linked-roles.md
new file mode 100644
index 00000000..a3e4d21b
--- /dev/null
+++ b/docs/linked-roles.md
@@ -0,0 +1,149 @@
+---
+description: Setting up Linked Roles might take a few minutes, but by following this guide, you can get started easily.
+---
+
+# Setup Linked Roles on your Discord
+
+Get started with Linked Roles on your Discord to improve your user experience by displaying important roles of users
+next to their names.
+
+:::success What is this?
+Unsure what Linked Roles are? Linked Roles allow you to display the role of a user next to their username, like this:
+
+
+
+If you want to learn more about Linked Roles, you can do so in our [About Linked Roles](./linked-roles/intro) section.
+
+:::
+
+:::warning This feature is Early Access
+Linked roles are Early Access. This means that in addition to a paid plan,
+a [membership](https://membership.scootkit.com) with Early Access is also required. Early Access helps us invest money &
+time in developing new features and products. We plan to make this feature available to everyone with Unlimited /
+Professional plan without memberships in late Q2 2025.
+:::
+
+
+
+## Video (German) {#video}
+
+Our developer Simon is happy to guide you through this setup process in
+our [tutorial video on YouTube](https://www.youtube.com/watch?v=HR3yvTVpkOI). This video is in German right now, but
+we're working on an English translation.
+
+
+
+## 0. Pre-Flight-Checklist 🛫 {#step-0}
+
+Before you can enable Linked Roles on your server, please ensure that
+
+* you have [added your Server to SCNX](./setup).
+* your server has the paid [Unlimited](./scnx/guilds/plans) ()
+ or [Professional](./scnx/guilds/plans) () plan, or consider using a
+ free trial, if
+ available for you.
+* you are the owner of the server you want to enable this feature
+ on ([why?](./scnx/guilds/trusted-admins#troubleshooting)) - if you are not the owner, please ask them to enable this
+ feature for you and grant you access as a [Trusted Admin](./scnx/guilds/trusted-admins).
+* you (or one of your trusted admins) have Early Access (purchasable with
+ a [ScootKit Membership Level 2 or higher](https://membership.scootkit.com)) during the beta trial. After the beta
+ trial ends (likely in Q2 2025), this requirement will be removed.
+* you've got 5-10 minutes of time (our estimate is that this takes around six minutes to finish on a computer, on mobile
+ it may take
+ a bit longer) to finish this guide - don't stop in the middle; your progress won't be saved.
+
+## 1. Time to get started {#step-1}
+
+To get started with the setup, please open the [Linked Roles page](https://scnx.app/glink?page=linked-roles/enable) of
+your server in the SCNX dashboard. There, click on "Start setup" to get started. You might be shown a video or a link to
+this guide, but you can also click "Continue" there, since you are already here :wink:
+
+## 2. Select credentials {#step-2}
+
+Next, SCNX will prompt you to select which Discord credentials you want to use for Linked Roles. If you are using other
+SCNX products, like [Modmail](./modmail/intro) or the [Custom Bot](./custom-bot/custom-commands), you can select them
+from this list and [skip to step 3](#step-3). If you are not using any other product, please
+follow [these instructions](#step-2-app).
+
+
+
+### Creating a Discord bot application {#step-2-app}
+
+If you are not using the credentials of another product, you'll need to create a new app in your Discord Developer
+Dashboard.
+
+To do so, visit the [Discord Developer Portal](https://discord.com/developers/applications). There, create a new
+application by clicking on "New Application" on the upper-right side of your Developer Portal. A modal will open. Enter
+the name of the application (you can change this later), read & accept
+the [Discord Developer Terms of Service](https://discord.com/developers/docs/policies-and-agreements/terms-of-service)
+and the [Discord Developer Policy](https://discord.com/developers/docs/policies-and-agreements/developer-policy) (these
+policies also apply to your use of the Discord API as part of SCNX) and create your bot by confirming with "Create".
+
+
+
+Next, open the "Bot"-Settings in the navigation bar on the left-hand side.
+There, you can configure the avatar and username.
+
+The final step in the Developer Dashboard is to generate a token and copy it. To do so, open the "Bot" page of your
+application
+and click on "Reset token" (still on the Bot page) and confirm your request in the modal. You might get asked
+to enter a 2FA-Code for your Discord-Account.
+
+Once done, please **copy the token of your bot and enter it on SCNX**.
+
+
+
+Once done, SCNX will check your token and synchronize data with Discord. Once done, you can continue
+with [the next step](#step-3).
+
+## 3. Save redirect URL {#step-3}
+
+Once your credentials are checked and SCNX has synchronized some Linked-Role data with Discord, you'll need to open the
+Oauth2 page of your Discord Developer Portal. The easiest way to do so is to click on the link that is visible on SCNX.
+Alternatively, you can click on "Oauth2" tab in your developer dashboard.
+
+
+
+Once you've opened the Oauth2 page, you'll need to copy and paste the redirect URL from your SCNX Dashboard. Doing this
+is easy: Simply click on the URL shown in SCNX (this will copy the URL to your clipboard). If you are wondering, the
+redirect URL should look something like this:
+`https://linked-roles.scnx.app/api/b4e5e89a-1c92-11f0-b688-03c2706e348f/callback` (the middle part might change based on
+your server).
+
+
+
+Go back to the "Oauth2"-Page
+in your Discord Developer Portal. There, scroll to "Redirects", click on "Add another" and paste the URL you just copied
+in the text field. Remember to save your changes!
+
+
+
+## 4. Enter Client Secret {#step-4}
+
+:::warning Confusion avoidance warning
+There's a big difference between your **Bot Token** and **Client Secret**. Please double-check which value you are
+entering to avoid issues later. For this step, you'll need the **Client Secret**, not the Bot Token.
+:::
+
+Once you've entered and saved the Redirect URL, please stay on the "Oauth2 page". Below "Client Information", generate
+the Client secret, by clicking on "Reset Secret" below the "Client Secret" field. Discord might ask you to verify your
+account by entering a 2FA code. Once this is done, you'll be able to copy the Client secret. Enter the copied value in your
+SCNX Dashboard and click on "Create Linked-Roles" to finish setup.
+
+
+
+## 5. Time to party 🎉 {#step-5}
+
+:::info Don't worry
+Your new Linked Role Bot won't stay online unless you use another SCNX product with the same credentials.
+:::
+
+Finally, finish setup by inviting the Linked Roles Bot to your server. Do so by clicking "Invite Linked-Roles-Bot" in
+the dashboard. Once done, you can continue by creating your first Linked Role. To learn more about that, continue in
+our [Role management documentation](./linked-roles/role-management#create-linked-scnx-role), where we explain how to
+create your Linked Roles on SCNX and on Discord. You can also jump
+to [the Linked Roles index page](/docs/linked-roles/overview) if you are looking for something else to continue with.
+
+
diff --git a/docs/linked-roles/claim-roles.md b/docs/linked-roles/claim-roles.md
new file mode 100644
index 00000000..6f565a94
--- /dev/null
+++ b/docs/linked-roles/claim-roles.md
@@ -0,0 +1,76 @@
+---
+sidebar_position: 3
+description: Follow this guide to claim a Linked Role that has been assigned to you.
+---
+
+# How to claim a Linked Role
+
+Once you've been assigned a role, claiming it in Discord is easy! Follow this guide to claim your Linked Role.
+
+:::success Share me!
+You can share this guide with your members so they know how to get their roles!\
+Here's the URL to share: [`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+:::
+
+## Requirements {#requirements}
+
+Before you can claim your Linked Role, an administrator needs to
+have [created the Linked Role on SCNX](./role-management#create-linked-scnx-role), [configure it on Discord](./role-management#linked-role-on-discord)
+and then [assign the role](./user-management#add-role) to you. If these steps aren't finished, you won't be able to claim
+your role.
+
+If you run into issues when following this guide, please contact your server administrator and link them to
+our [troubleshooting page](./troubleshooting), where we go into detail on how to fix issues.
+
+## Claim your role on Discord {#claim-role}
+
+:::info This also works on your phone!
+While this guide shows the steps on a desktop device, you can follow the same instructions on your phone to claim your
+Linked Role.
+:::
+
+To get started, please click on the name of the server in Discord. There you'll be able to select the option "Linked
+Roles". A modal showing all available roles will now appear. Select the role you want to claim. Next, you will be shown
+the requirements you need to pass to claim the role. If you already pass the requirement, you can click on "Finish",
+otherwise click on the requirement field to claim your role.
+
+
+
+Now, the [authorization page](./settings#authorization-page) of the server will open. There, click on "Authorize with
+Discord". You will be redirected to Discord to authorize your account. Please make sure you are logging in with the
+right account, then click on "Authorise" to finish the request. After that, you will be shown a success message
+confirming that the roles have been applied successfully. You can close this window now.
+
+
+
+Once done, go back to Discord. There, you will be prompted to confirm the connection by clicking on "Done". After that,
+you can finally claim the Linked Role by clicking "Finish". Discord will grant you the Linked Role now, which will also
+appear in your member profile.
+
+
+
+If you want to claim other roles as well, you can do so easily by going following the same instructions - but you won't
+need to authenticate again, you can simply claim the role in Discord.
+
+## Issues when claiming roles? {#issues}
+
+If you are running into any issues when you are trying to claim a role, please check
+our [troubleshooting guide](./troubleshooting), in particular, the following issues might occur:
+
+* [Error message: "Invalid OAuth2 redirect_url"](./troubleshooting#oauth2-redirect-url).
+* [Error message: "No roles were assigned to you"](./troubleshooting#roles-missing)
+* [Error message: "Seems like the configuration by the server owner is wrong."](./troubleshooting#generic-api-error).
+
+If you run into other issues or have questions, check or [troubleshooting guide](./troubleshooting) or contact us
+on [scnx.app/help](https://scnx.app/help) - we're always happy to help!
+
+## Remove a claimed role {#remove-claimed-role}
+
+Annoyed by your Linked Role? You can either ask an administrator
+to [remove the Linked Role](./user-management#remove-role) or you can remove the role yourself.
+
+To do so, open Discord and open your profile on your server. There, hover over the Linked Role you want to remove. You
+will see an "X" on the left side. Click on it to remove your Linked Role. If you ever change your mind, you can
+always [re-claim your Linked Role](#claim-role) unless an administrator removes it from you.
+
+
\ No newline at end of file
diff --git a/docs/linked-roles/intro.md b/docs/linked-roles/intro.md
new file mode 100644
index 00000000..5d9c6cb7
--- /dev/null
+++ b/docs/linked-roles/intro.md
@@ -0,0 +1,69 @@
+---
+sidebar_position: 1
+description: Linked Roles allow you to easily display the role of a user next to their username in your chat.
+---
+
+# About Linked Roles
+
+:::warning This feature is Early Access
+Linked roles are Early Access. This means that in addition to a paid plan,
+a [membership](https://membership.scootkit.com) with Early Access is also required. Early Access helps us invest money &
+time in developing new features and products. We plan to make this feature available to everyone with Unlimited /
+Professional plan without memberships in late Q2 2025.
+:::
+
+Linked Roles allow you to display the role of a user next to their name on your Discord server. To do this, the user
+needs to authorize with your Discord Bot and claim their role manually. Displaying the role next to the username makes
+your Discord appear professionally and increases the user experience on your Discord server; your users can see at a
+glance that they are talking to a staff member, to a moderator or to an admin.
+
+Here's how Linked-Roles could look on your server:
+
+
+
+## How it works {#how-it-works}
+
+To use Linked Roles, you'll need to first [set up Linked Roles](./../linked-roles) on your server. Once done, you
+can [create and configure Linked Roles](./role-management) on SCNX and Discord which can
+be [assigned to users](./user-management). Once a linked role has been assigned to a user, the user
+can [claim the role](./claim-roles) on Discord.
+
+In contrast to actual roles on Discord, Linked Roles can't be directly assigned to members, instead, members will need
+to manually [claim roles on Discord](./claim-roles). After a user has claimed a role, the
+role [can only be removed via the SCNX Dashboard](./user-management#remove-role).
+
+Linked Roles can be displayed in the chat next to the username
+by [configuring chat permissions](./role-management#display-in-chat). While a user can have multiple Linked Roles, only
+one can be displayed in a chat. Roles with a higher position on your Discord will be displayed with a higher priority.
+Having a Linked Role does not remove the role icon of another role.
+
+To [claim a Linked Role](./claim-roles), users will need to authorize their account with your custom Discord application
+using a
+[customizable authorization page](./settings#authorization-page). Once done, they'll be redirected back to Discord,
+where they can claim their role. Once authorized, future role changes can be claimed without the need of an additional
+authorization.
+
+## Linked Roles at SCNX {#scnx}
+
+SCNX makes it easy to set up and manage Linked Roles on your very own Discord - there's no coding required and setup can
+be done in a few easy steps in our easy-to-use dashboard.
+
+To use Linked Roles, you need to [add your server to SCNX](./../setup) and have a [paid plan](../scnx/guilds/plans) that
+includes access to this feature - you can also try a paid plan for free if you are eligible.
+
+### Features of Linked Roles on SCNX {#scnx-features}
+
+Linked Roles on SCNX makes using Linked Roles on your server easy. While [initial setup](./../linked-roles) takes a few
+minutes, later management of [roles](./role-management) and [member roles](./user-management) is straightforward.
+Additionally, SCNX
+offers multiple features and customizability options.
+
+The following features are available on SCNX:
+
+* Easy management of [Linked Roles](./role-management) in the SCNX Dashboard.
+* [Assign and remove](./user-management) roles from users.
+* Multiple themes available for the [authorization page](./settings#authorization-page).
+* Off-Brand options available with the [Professional Plan](./../scnx/guilds/plans).
+* Authorization with your custom Discord App.
+* You can set up [public linked roles](./role-management#public-roles) that can be claimed by any user.
+* Excellent customer support on [our Discord](https://scootk.it/dc-en) in English and German.
\ No newline at end of file
diff --git a/docs/linked-roles/role-management.md b/docs/linked-roles/role-management.md
new file mode 100644
index 00000000..a5987279
--- /dev/null
+++ b/docs/linked-roles/role-management.md
@@ -0,0 +1,80 @@
+---
+sidebar_position: 2
+description: Learn how to create, delete and configure Linked Roles.
+---
+
+# Manage Linked Roles
+
+In contrast to traditional roles on Discord, Linked Roles require more steps to be correctly set up and configured.
+
+## Create Linked Role on SCNX {#create-linked-scnx-role}
+
+:::info Discord Limit
+Discord enforces a strict limit of five Linked Roles for each bot. This means that you can't have more than five Linked
+Roles on SCNX.
+:::
+
+Open your the [roles page of your Linked roles dashboard](https://scnx.app/glink?page=linked-roles/roles) and click on
+"Add new Linked Role". If this is your first Linked Role, the site will automatically take you to the role creation
+flow, no need to click anything.
+
+There, enter a name for your role and choose a description. Once done, click on "Create Linked Role". After clicking,
+SCNX will prompt you to [configure the new linked role on Discord](#linked-role-on-discord).
+
+
+
+## Set up Linked Role on Discord {#linked-role-on-discord}
+
+To set up a Linked Role on Discord, please follow these steps:
+
+1. Create a new role on your Discord server. You can configure its role, role icon, permissions, and color. Do not
+ assign this role to any user.
+2. In your role settings, go to the "Links" tab.
+3. There, click on "Add requirement".
+4. Select your bot in the "Apps" section.
+5. Select the desired Linked Role. The role you select needs to
+ be [assigned to users on SCNX](./user-management#add-role) to claim the newly created Discord role.
+
+Once you've finished these steps your members can [can claim the role](./claim-roles.md), if they have
+been [assigned the Linked Role](./user-management#add-role).
+To actually display the role next to the username of a user, you'll need
+to [setup permissions correctly](#display-in-chat).
+
+
+
+## Display Linked Role in chat {#display-in-chat}
+
+By default, Linked Roles won't show up next to usernames in the chat. To display the Linked Role, you'll need to create
+a channel overwrite on **every channel**. This can be done by going into the channel settings of any channel, going to
+permissions, selecting (or adding) your Linked Role and giving it the "View Channel" permission. This overwrite is
+required for every channel you want the role to be displayed in.
+
+
+
+## Public roles {#public-roles}
+
+:::info
+After making a role public, you can't undo this decision. If you want to make a public role private again, you'll need
+to [delete the role](#delete-role).
+:::
+
+By default, rules need to manually be [assigned to members](./user-management). Enabling the "Public role" option, allows
+roles to be claimed by any user on your Discord and removes your ability to manually assign or remove the role. This
+might be helpful if you want a "Member"-role to be displayed next to users in chat.
+
+After creating a role, you can manage it
+in your [Linked Roles dashboard](https://scnx.app/glink?page=linked-roles/roles), where you can enable the "Public role"
+option for your role. Once you've enabled the "Public role" option, all users can [claim the role](./claim-roles) on
+your Discord without any
+additional checks. While you can manually [remove users](./user-management#delete-user) in the dashboard, they will be
+able to re-claim the role again since the role is public.
+
+
+
+## Delete Linked Roles {#delete-role}
+
+Deleting a Linked Role will also remove the Linked Role from all users on your Discord, but won't delete the Discord
+role you've created. This action can't be undone.
+
+To delete a role, open your [Linked Roles dashboard](https://scnx.app/glink?page=linked-roles/roles), select your role
+and click on "Delete role". The role will now be deleted.
\ No newline at end of file
diff --git a/docs/linked-roles/settings.md b/docs/linked-roles/settings.md
new file mode 100644
index 00000000..3aa7dd7e
--- /dev/null
+++ b/docs/linked-roles/settings.md
@@ -0,0 +1,64 @@
+---
+sidebar_position: 6
+description: Explore configuration options for your Linked Roles like authorization page themes.
+---
+
+# Linked Roles Configuration
+
+At SCNX, we're always about offering as many configuration options as possible. Naturally, you can adjust the
+[authorization page](#authorization-page) and other Linked Roles configuration.
+
+## Authorization page {#authorization-page}
+
+The authorization page is the page that users need to open when [claiming their role](./claim-roles) before being
+redirected to Discord. The page features a short explainer, your server name and image.
+
+You can configure the following attributes of your authorization page:
+
+* The displayed server name and image on your authorization page.
+* Adjust the theme of your authorization page. You can choose one of over 30 different themes for the authorization
+ page - you can pick and browse using the live preview feature on
+ your [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration).
+* Disable or enable a short advertisement for SCNX on your authorization page. When enabled, the page will include a
+ short message about the features of the SCNX platform. Servers with
+ a [paid plan that has the off-brand functionality](./../scnx/guilds/plans)
+ will have this feature disabled by default. Servers without such a plan won't be able to remove the message.
+
+To adjust these fields and see a live preview of themes and changes,
+open [the Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration) of your dashboard and
+adjust the fields there.
+
+
+
+## Authentification details {#authentification-details}
+
+You can review your authentification details used by your Linked Roles to communicate with Discord on
+your [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration). These values are helpful
+if you missed a step during [setup](./../linked-roles). You won't be able to see entered tokens or secrets for security
+reasons.
+
+You can always [reset the details](#reset-auth-details) if you want to change your token or OAuth2 secret.
+
+### Reset details {#reset-auth-details}
+
+To reset the authentication details of your Linked Roles, visit
+your [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration). There, click on "Reset
+authentification details" to reset the authentification details. While resetting authentification details does not
+delete your Linked Roles and role assignments, you'll need to redo the [setup steps](./../linked-roles). If you use a
+different bot after resetting, you'll need to remove the old bot from your server and instruct your members
+to [claim their roles](./claim-roles) again.
+
+
+
+### Disable Linked Roles {#disable-linked-roles}
+
+:::warning Danger!
+This cannot be undone.
+:::
+
+Unhappy with Linked Roles? You can always choose to disable them and delete all associated data.
+
+To delete all Linked Role data, open
+the [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration) and click on "Disable
+Linked Roles". This will delete all data from SCNX regarding your Linked Roles. Claimed roles from Discord might not be
+removed (as that data isn't stored at SCNX), you'll need to do this manually.
\ No newline at end of file
diff --git a/docs/linked-roles/troubleshooting.md b/docs/linked-roles/troubleshooting.md
new file mode 100644
index 00000000..9b877b1c
--- /dev/null
+++ b/docs/linked-roles/troubleshooting.md
@@ -0,0 +1,123 @@
+---
+description: Using Linked Roles can be complicated and it's easy to run into issues.
+sidebar_position: 5
+---
+
+# Troubleshooting
+
+Using Linked Roles can be complicated, and it's easy to run into issues. In this document, we'll look at common issues
+and ways to fix these issues.
+
+## Overview {#content}
+
+Please select the issue you are running into.
+
+Issues during setup:
+
+* [I can't add the Link requirement to a Discord role](#link-requirement).
+
+Issues when using Linked Roles:
+
+* [The Linked Role is not displayed in the chat](#display-missing).
+* [Users are not being given the Linked Role](#role-not-given).
+* ["Invalid OAuth2 redirect_url" when claiming Linked Roles](#oauth2-redirect-url).
+* ["No roles were assigned to you" when claiming Linked Roles](#roles-missing).
+* ["Seems like the configuration by the server owner is wrong." when claiming Linked Roles](#generic-api-error).
+* ["The SCNX-Plan of this server expired" when claiming Linked Roles](#plan-expired).
+* ["This feature requires Early Access, which this server does not have anymore" when claiming Linked Roles](#early-access-required).
+
+If your issue isn't listed here, [click here](#other).
+
+## Issues during setup & configuration {#setup}
+
+### Can't save Link requirement on Discord role {#link-requirement}
+
+When [setting up a Linked Role on Discord](./role-management#linked-role-on-discord), you might run into an "Invalid
+role" error when adding the Link requirement to a Discord role.
+
+**Solution**: You can't add Link requirements to roles that has members. Consider removing the role from all of your
+members or create a new role.
+
+## Issues when using Linked Roles {#usage}
+
+### The role is not displayed in the chat {#display-missing}
+
+When using Linked Roles, you might run into an issue where the role is not displayed next to the username in the chat.
+
+**Solution**: To display the Linked Role next to the username, you'll need to create a permission overwrite with the
+"View channel" permission for the Linked Role in every channel. You
+can [learn more in our guide about this](./role-management#display-in-chat).
+
+### "Seems like the configuration by the server owner is wrong" when claiming Linked Roles {#generic-api-error}
+
+If a step during setup has been missed or a wrong value has been entered, Linked Roles are unable to sync correctly.
+
+**Solution**:
+
+To fix this issue, you'll need to redo some steps of the [setup procedure](../linked-roles) which may take some time.
+Follow these steps to fix this issue:
+
+1. First, reset the Authentification details on
+ your [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration). To do this, click
+ on "Reset authentification details" or follow [this guide](./settings#reset-auth-details).
+2. Once done, your dashboard will prompt you to re-do all setup steps.
+3. Please follow our [setup guide](./../linked-roles#step-2) starting at Step 2. Make sure to follow all instructions
+ carefully, as any mistakes will result in this error re-appearing.
+4. Once you've finished the setup, please retry [claiming the role](./claim-roles).
+
+### "No roles were assigned to you" when claiming Linked Roles {#roles-missing}
+
+By default, users need to be assigned roles manually in your dashboard. If no roles were assigned, this error will be
+shown.
+
+**Solution**: [Assign roles to the user in question](./user-management#add-role) or make
+the [role public](./role-management#public-roles) so it can be claimed by everyone. If you believe that a role has been
+assigned, please make sure the user is logged in with the correct account when attempting to claim the role.
+
+### "Invalid OAuth2 redirect_url" when claiming Linked Roles {#oauth2-redirect-url}
+
+When setting up Linked-Roles, the redirect URL needs to be saved in the Discord Developer Portal; otherwise this error
+will be shown.
+
+**Solution**:
+
+1. Open your [Linked Roles configuration page](https://scnx.app/glink?page=linked-roles/configuration) and copy the
+ "Redirect URL" in the "Authorization details" card. It should look like this:
+ `https://linked-roles.scnx.app/api/b4e5e89a-1c92-11f0-b688-03c2706e348f/callback` (the middle part might change based
+ on
+ your server).
+2. Open the [Discord Developer Portal](https://discord.com/developers/applications) and select your bot.
+3. Go to the "Oauth2" tab of your bot, and click on "Add another" in the "Redirects" section.
+4. Paste the copied redirect URL and save the changes.
+5. Retry [claiming the role](./claim-roles).
+
+
+
+### Users are not being given the Linked Role {#role-not-given}
+
+When using Linked Roles, users won't receive the role automatically.
+
+**Solution**: Users need to manually [claim the Linked Role](./claim-roles). You can send them a link to our guide:
+[`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+
+### "The SCNX-Plan of this server expired" when claiming Linked Roles {#plan-expired}
+
+To use Linked Roles, a plan that includes Linked Roles is required.
+
+**Solution**: Upgrade your plan to a paid plan that includes Linked Roles. Learn more
+about [plans and its features in our documentation](./../scnx/guilds/plans).
+
+### "This feature requires Early Access, which this server does not have anymore" when claiming Linked Roles {#early-access-required}
+
+To use Linked Roles, Early Access is required. Early Access helps us invest money &
+time in developing new features and products. We plan to make this feature available to everyone with Unlimited /
+Professional plan without memberships in late Q2 2025.
+
+**Solution**: The server needs at least one owner or [trusted admin](./../scnx/guilds/trusted-admins) with Early Access.
+Early access can be purchased with a [ScootKit Membership](https://membership.scootkit.com). You can also consider
+waiting a few months for the feature to be made available for everyone.
+
+## Other issues {#other}
+
+Oh no, that's weird - we're always happy to assist you with your issue on our [Discord](https://scootk.it/dc-en) or
+on [scnx.app/help](https://scnx.app/help).
\ No newline at end of file
diff --git a/docs/linked-roles/user-management.md b/docs/linked-roles/user-management.md
new file mode 100644
index 00000000..e71e0963
--- /dev/null
+++ b/docs/linked-roles/user-management.md
@@ -0,0 +1,62 @@
+---
+sidebar_position: 4
+description: Linked Roles need to be assigned manually to your users.
+---
+
+# Manage member's Linked Roles
+
+In contrast to native roles on Discord, Linked Roles need to be assigned manually using the SCNX Dashboard.
+Additionally, roles need to be [claimed by the users](./claim-roles) before the role is given to the user.
+
+:::success Give your admins access!
+Your admins can also manage Linked Roles of users! Add them as a [Trusted Admin](./../scnx/guilds/trusted-admins) and
+share this guide with them to allow them to edit users!
+:::
+
+## Add Linked Role {#add-role}
+
+Before assigning a role to a user, make sure you've [created the Linked Role](./role-management#create-linked-scnx-role).
+You'll also need the User-ID of the user you want to add. To get this user ID,
+follow [this guide from Discord](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID).
+
+Once you have copied the User-ID, open the [Linked Roles user page](https://scnx.app/glink?page=linked-roles/users).
+Click on
+"Add user" to add another user.
+
+Next, enter the User-ID you previously copied, enter an optional tagline and select which roles the user should receive.
+Please note that [public roles](./role-management#public-roles) can't be assigned or removed, as these roles can be
+claimed by any user.
+
+
+
+Once you have saved the changes, the user will be able to [claim the role](./claim-roles). You can send the user a link
+to our guide, so they know what to do:
+[`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+
+## Manage user roles {#remove-role}
+
+:::info Public roles can't be removed
+Any [public roles](./role-management#public-roles) can't be removed from users, as they can be claimed by any user.
+:::
+
+To manage the Linked Roles of a user, open the [Linked Roles user page](https://scnx.app/glink?page=linked-roles/users)
+of your dashboard. There, you can search for the user you want to edit by their username or ID. Alternatively, you can
+filter by roles to find the desired user.
+
+Once you have located the user, click on their dashboard entry to view the user management interface. There, you can
+edit their roles and tagline.
+
+While removed roles will be removed from the user within a few minutes, new roles need to
+be [claimed manually](./claim-roles). You can send the user a link to our guide, so they know what to do:
+[`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+
+## Remove Linked Role user {#delete-user}
+
+To remove Linked Role user, open the [Linked Roles user page](https://scnx.app/glink?page=-roles/users)
+of your dashboard. There, you can search for the user you want to delete by their username or ID. Alternatively, you can
+filter by roles to find the desired user.
+
+Once you have located the user, click on their dashboard entry to view the user management interface. There, you can
+click on "Delete user" to delete the user data. Deleting the user will result in all of their roles being removed and
+them needing to re-authorize if they plan to claim roles again. Please note that this won't prevent users from
+re-claiming [public roles](./role-management#public-roles) at any time.
\ No newline at end of file
diff --git a/docs/scnx/guilds/plans.md b/docs/scnx/guilds/plans.md
index 54757c14..eca273e0 100644
--- a/docs/scnx/guilds/plans.md
+++ b/docs/scnx/guilds/plans.md
@@ -27,6 +27,7 @@ separate subscription.
| [dcserver.link](./dcserver-link) | Included | Included | Included |
| [Custom Discord-Bot](./../../custom-bot/intro), hosted 24/7 | Included, but needs to be [extended](#starter-plan) every two weeks by watching ads | Included | Included |
| [Custom Modmail-Bot](./../../modmail/intro), hosted 24/7 | *Not available* | Included | Included |
+| [Linked Roles](./../../linked-roles/intro) | *Not available* | Included for users with [Early Access](https://membership.scootkit.com) | Included for users with [Early Access](https://membership.scootkit.com) |
| Remove mention of SCNX from your all your bots (e.g. Embed-Footer) | *Not available* | *Not available* | Included |
| Amount of [AI Credits](https://faq.scnx.app/ai-on-scnx/) awarded on the 25. of each month | 20 | 300 | 600 |
| [Commercial usage](./faq#commercial-usage) | Not allowed | Not allowed | Included |
diff --git a/docusaurus.config.js b/docusaurus.config.js
index e4ae802d..a537c031 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -35,6 +35,7 @@ const config = {
showLastUpdateAuthor: true,
showLastUpdateTime: true,
editLocalizedFiles: true,
+ remarkPlugins: [],
editUrl:
'https://github.com/ScootKit/scnx-docs/tree/main/'
},
@@ -97,7 +98,6 @@ const config = {
position: 'left',
label: 'Getting started'
},
- {to: 'blog', label: 'News', position: 'left'},
{
type: 'docSidebar',
sidebarId: 'scnxSidebar',
@@ -116,6 +116,13 @@ const config = {
position: 'left',
label: 'Modmail'
},
+ {
+ type: 'docSidebar',
+ sidebarId: 'linkedRolesSidebar',
+ position: 'left',
+ label: 'Linked Roles'
+ },
+ {to: 'blog', label: 'News', position: 'right'},
{
href: 'https://scnx.app',
label: 'SCNX Dashboard',
@@ -159,6 +166,10 @@ const config = {
{
label: 'Modmail',
to: '/docs/modmail/intro'
+ },
+ {
+ label: 'Linked Roles',
+ to: '/docs/linked-roles/intro'
}
]
},
diff --git a/i18n/de/code.json b/i18n/de/code.json
index 62f32972..141091b7 100644
--- a/i18n/de/code.json
+++ b/i18n/de/code.json
@@ -579,5 +579,59 @@
"theme.unlistedContent.message": {
"message": "Diese Seite ist nicht gelistet. Suchmaschinen werden sie nicht listen und nur Nutzer mit Direktlink können auf diese Seite zugreifen.",
"description": "The unlisted content banner message"
+ },
+ "plans.included.activeGuildNotIncluded": {
+ "message": "Nicht im Unlimited Plan enthalten"
+ },
+ "plans.included.proNotIncluded": {
+ "message": "Nicht im Professional Plan enthalten"
+ },
+ "youtubeHidden.header": {
+ "message": "Durch das Klicken unten, stimmst du der {link} von YouTube zu."
+ },
+ "youtubeHidden.privacyLink": {
+ "message": "Datenschutzerklärung"
+ },
+ "youtubeHidden.button": {
+ "message": "Akzeptieren und YouTube Video laden"
+ },
+ "main.linked-roles": {
+ "message": "Verknüpfte Rollen"
+ },
+ "theme.docs.DocCard.categoryDescription.plurals": {
+ "message": "1 Eintrag|{count} Einträge",
+ "description": "The default description for a category card in the generated index about how many items this category includes"
+ },
+ "theme.blog.author.pageTitle": {
+ "message": "{authorName} - {nPosts}",
+ "description": "The title of the page for a blog author"
+ },
+ "theme.blog.authorsList.pageTitle": {
+ "message": "Autoren",
+ "description": "The title of the authors page"
+ },
+ "theme.blog.authorsList.viewAll": {
+ "message": "Alle Autoren anzeigen",
+ "description": "The label of the link targeting the blog authors page"
+ },
+ "theme.blog.author.noPosts": {
+ "message": "Dieser Author hat noch keine Posts geschrieben.",
+ "description": "The text for authors with 0 blog post"
+ },
+ "theme.contentVisibility.unlistedBanner.title": {
+ "message": "Geheime Seite",
+ "description": "The unlisted content banner title"
+ },
+ "theme.contentVisibility.unlistedBanner.message": {
+ "message": "Diese Seite ist nicht gelistet. Suchmaschinen werden sie nicht speichern und nur Nutzer mit einem Direkt-Link können zugreifen.",
+ "description": "The unlisted content banner message"
+ },
+ "theme.contentVisibility.draftBanner.title": {
+ "message": "Diese Seite ist ein Entwurf",
+ "description": "The draft content banner title"
+ },
+ "theme.contentVisibility.draftBanner.message": {
+ "message": "Diese Seite ist ein Entwurf. Sie ist nur in der Entwicklungsumgebung sichtbar und wird in production nicht angezeigt.",
+ "description": "The draft content banner message"
}
}
\ No newline at end of file
diff --git a/i18n/de/docusaurus-plugin-content-blog/authors.yml b/i18n/de/docusaurus-plugin-content-blog/authors.yml
index 6d39473e..d8929ad9 100644
--- a/i18n/de/docusaurus-plugin-content-blog/authors.yml
+++ b/i18n/de/docusaurus-plugin-content-blog/authors.yml
@@ -16,6 +16,6 @@ hörnchen:
name: Hörnchen
page: true
image_url: https://scnx-cdn.scootkit.net/1744663922690-kAT5LJZSoVXViyMUOSjsk0SlYgAIoIZPVk5Gx4wwHaUCSkSb.png
- title: SCNX Helfer & ScootKit Discord Moderator
+ title: hoernchen_0 - SCNX Helfer
socials:
github: hoernchen-from-hotel
\ No newline at end of file
diff --git a/i18n/de/docusaurus-plugin-content-docs/current.json b/i18n/de/docusaurus-plugin-content-docs/current.json
index 752b5f77..5e70fcd7 100644
--- a/i18n/de/docusaurus-plugin-content-docs/current.json
+++ b/i18n/de/docusaurus-plugin-content-docs/current.json
@@ -250,5 +250,17 @@
"sidebar.modmailSidebar.doc.Troubleshooting issues": {
"message": "Fehlerbehebung",
"description": "The label for the doc item Troubleshooting issues in sidebar modmailSidebar, linking to the doc modmail/troubleshooting"
+ },
+ "sidebar.startSidebar.doc.Linked Roles": {
+ "message": "Verknüpfte Rollen",
+ "description": "The label for the doc item Linked Roles in sidebar startSidebar, linking to the doc linked-roles/intro"
+ },
+ "sidebar.linkedRolesSidebar.category.SCNX Linked Roles": {
+ "message": "SCNX verknüpfte Rollen",
+ "description": "The label for category SCNX Linked Roles in sidebar linkedRolesSidebar"
+ },
+ "sidebar.linkedRolesSidebar.link.Get started": {
+ "message": "Loslegen",
+ "description": "The label for link Get started in sidebar linkedRolesSidebar, linking to /docs/linked-roles"
}
}
\ No newline at end of file
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/claim-roles.md b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/claim-roles.md
new file mode 100644
index 00000000..2ec992ae
--- /dev/null
+++ b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/claim-roles.md
@@ -0,0 +1,66 @@
+---
+sidebar_position: 3
+description: Folge dieser Anleitung, um eine verknüpfte Rolle zu beanspruchen, die dir zugewiesen wurde.
+---
+
+# So beanspruchst du eine verknüpfte Rolle
+
+Sobald dir eine Rolle zugewiesen wurde, ist das Beanspruchen in Discord einfach! Folge dieser Anleitung, um deine verknüpfte Rolle zu beanspruchen.
+
+:::success Teile mich!
+Du kannst diese Anleitung mit deinen Mitgliedern teilen, damit sie wissen, wie sie ihre Rollen erhalten!\
+Hier ist die URL zum Teilen: [`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+:::
+
+## Voraussetzungen {#requirements}
+
+Bevor du deine verknüpfte Rolle beanspruchen kannst, muss ein Administrator die
+[verknüpfte Rolle auf SCNX erstellt](./role-managment#create-linked-scnx-role), [sie auf Discord konfiguriert](./role-managment#linked-role-on-discord)
+und dir dann die [Rolle zugewiesen](./user-managment#add-role) haben. Wenn diese Schritte nicht abgeschlossen sind, kannst du deine Rolle nicht beanspruchen.
+
+Wenn du beim Befolgen dieser Anleitung auf Probleme stößt, wende dich bitte an deinen Serveradministrator und verlinke ihn mit
+unserer [Seite zur Fehlerbehebung](./troubleshooting), wo wir detailliert auf die Behebung von Problemen eingehen.
+
+## Beanspruche deine Rolle auf Discord {#claim-role}
+
+:::info Das funktioniert auch auf deinem Handy!
+Obwohl diese Anleitung die Schritte auf einem Desktop-Gerät zeigt, kannst du die gleichen Anweisungen auf deinem Handy befolgen, um deine
+verknüpfte Rolle zu beanspruchen.
+:::
+
+Klicke zunächst auf den Namen des Servers in Discord. Dort kannst du die Option „Verknüpfte Rollen“ auswählen. Ein Fenster mit allen verfügbaren Rollen wird nun angezeigt. Wähle die Rolle aus, die du beanspruchen möchtest. Als Nächstes werden dir die Voraussetzungen angezeigt, die du erfüllen musst, um die Rolle zu beanspruchen. Wenn du die Voraussetzung bereits erfüllst, kannst du auf „Abschließen“ klicken, andernfalls klicke auf das Anforderungsfeld, um deine Rolle zu beanspruchen.
+
+
+
+Nun öffnet sich die [Autorisierungsseite](./settings#authorization-page) des Servers. Klicke dort auf „Mit Discord anmelden“. Du wirst zu Discord weitergeleitet, um dein Konto zu autorisieren. Stelle sicher, dass du dich mit dem richtigen Konto angemeldet bist, und klicke dann auf „Autorisieren“, um die Anfrage abzuschließen. Danach wird dir eine Erfolgsmeldung angezeigt, die bestätigt, dass die Rollen erfolgreich angewendet wurden. Du kannst dieses Fenster nun schließen.
+
+
+
+Sobald dies erledigt ist, gehe zurück zu Discord. Dort wirst du aufgefordert, die Verbindung zu bestätigen, indem du auf „Fertig“ klickst. Danach kannst du die verknüpfte Rolle endgültig beanspruchen, indem du auf „Abschließen“ klickst. Discord wird dir nun die verknüpfte Rolle zuweisen, die auch in deinem Mitgliederprofil angezeigt wird.
+
+
+
+Wenn du auch andere Rollen beanspruchen möchtest, kannst du dies einfach tun, indem du die gleichen Anweisungen befolgst – du musst dich jedoch nicht erneut authentifizieren, sondern kannst die Rolle einfach in Discord beanspruchen.
+
+## Probleme beim Beanspruchen von Rollen? {#issues}
+
+Wenn du Probleme beim Beanspruchen einer Rolle hast, überprüfe bitte
+unsere [Anleitung zur Fehlerbehebung](./troubleshooting). Insbesondere die folgenden Probleme könnten auftreten:
+
+* [Fehlermeldung: „Ungültige OAuth2 redirect_url“](./troubleshooting#oauth2-redirect-url).
+* [Fehlermeldung: „Dir wurden keine Rollen zugewiesen“](./troubleshooting#roles-missing)
+* [Fehlermeldung: „Sieht so aus, als wäre die Konfiguration durch den Serverbesitzer falsch.“](./troubleshooting#generic-api-error).
+
+Wenn du auf andere Probleme stößt oder Fragen hast, lies unsere [Anleitung zur Fehlerbehebung](./troubleshooting) oder kontaktiere uns
+unter [scnx.app/help](https://scnx.app/help) – wir helfen dir gerne weiter!
+
+## Eine beanspruchte Rolle entfernen {#remove-claimed-role}
+
+Genervt von deiner verknüpften Rolle? Du kannst entweder einen Administrator bitten, die
+[verknüpfte Rolle zu entfernen](./user-managment#remove-role) oder du kannst die Rolle selbst entfernen.
+
+Öffne dazu Discord und öffne dein Profil auf deinem Server. Bewege dort den Mauszeiger über die verknüpfte Rolle, die du entfernen möchtest. Du
+siehst ein „X“ auf der linken Seite. Klicke darauf, um deine verknüpfte Rolle zu entfernen. Wenn du es dir jemals anders überlegst, kannst du
+deine [verknüpfte Rolle jederzeit erneut beanspruchen](#claim-role), es sei denn, ein Administrator entfernt sie von dir.
+
+
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/intro.md b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/intro.md
new file mode 100644
index 00000000..89c68152
--- /dev/null
+++ b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/intro.md
@@ -0,0 +1,46 @@
+---
+sidebar_position: 1
+description: Verknüpfte Rollen ermöglichen es dir, die Rolle eines Nutzers direkt neben seinem Benutzernamen im Chat anzuzeigen.
+---
+
+# Über verknüpfte Rollen
+
+:::warning Diese Funktion befindet sich in Early Access
+Verknüpfte Rollen befinden sich in Early Access. Das bedeutet, dass du neben einem kostenpflichtigen Plan auch eine [Mitgliedschaft](https://membership.scootkit.com) mit Early Access benötigst. Early Access hilft uns dabei, Zeit und Geld in die Entwicklung neuer Funktionen und Produkte zu investieren. Wir planen, diese Funktion im Laufe von Q2 2025 für alle Nutzer mit Unlimited-/Professional-Plan ohne Mitgliedschaft bereitzustellen.
+:::
+
+Verknüpfte Rollen ermöglichen es dir, die Rolle eines Nutzers neben seinem Namen auf deinem Discord-Server anzuzeigen. Dafür muss sich der Nutzer mit deinem Discord-Bot autorisieren und seine Rolle manuell beanspruchen. Die Anzeige der Rolle neben dem Benutzernamen sorgt für ein professionelleres Erscheinungsbild deines Discord-Servers und verbessert die Nutzererfahrung – deine Mitglieder erkennen auf einen Blick, ob sie mit einem Teammitglied, Moderator oder Administrator sprechen.
+
+So könnten verknüpfte Rollen auf deinem Server aussehen:
+
+
+
+## So funktioniert es {#how-it-works}
+
+Um verknüpfte Rollen nutzen zu können, musst du zunächst auf deinem Server [verknüpfte Rollen einrichten](./../linked-roles). Danach kannst du auf SCNX und Discord [verknüpfte Rollen erstellen und konfigurieren](./role-management), die dann [Nutzern zugewiesen werden können](./user-management). Sobald eine verknüpfte Rolle einem Nutzer zugewiesen wurde, kann dieser sie [auf Discord beanspruchen](./claim-roles).
+
+Im Gegensatz zu regulären Discord-Rollen können verknüpfte Rollen nicht direkt zugewiesen werden – die Mitglieder müssen sie manuell [auf Discord beanspruchen](./claim-roles). Nachdem ein Nutzer eine Rolle beansprucht hat, kann diese [über das SCNX-Dashboard entfernt werden](./user-management#remove-role).
+
+Verknüpfte Rollen können im Chat neben dem Benutzernamen angezeigt werden, indem du die [Chat-Berechtigungen konfigurierst](./role-management#display-in-chat). Ein Nutzer kann zwar mehrere verknüpfte Rollen besitzen, aber es kann jeweils nur eine im Chat angezeigt werden. Rollen mit höherer Position im Discord werden mit höherer Priorität angezeigt. Eine verknüpfte Rolle ersetzt nicht das Rollensymbol einer anderen Rolle.
+
+Um [eine verknüpfte Rolle zu beanspruchen](./claim-roles), müssen sich Nutzer mit deiner benutzerdefinierten Discord-Anwendung über eine [anpassbare Autorisierungsseite](./settings#authorization-page) autorisieren. Anschließend werden sie zurück zu Discord geleitet, wo sie ihre Rolle beanspruchen können. Nach der Autorisierung können zukünftige Rollenänderungen beansprucht werden, ohne dass eine erneute Autorisierung erforderlich ist.
+
+## Verknüpfte Rollen bei SCNX {#scnx}
+
+SCNX macht das Einrichten und Verwalten verknüpfter Rollen auf deinem eigenen Discord ganz einfach – es ist kein Programmieren erforderlich und die Einrichtung erfolgt in wenigen einfachen Schritten über unser benutzerfreundliches Dashboard.
+
+Um verknüpfte Rollen nutzen zu können, musst du [deinen Server zu SCNX hinzufügen](./../setup) und über einen [kostenpflichtigen Plan](../scnx/guilds/plans) verfügen, der Zugriff auf diese Funktion beinhaltet – wenn du berechtigt bist, kannst du den kostenpflichtigen Plan auch kostenlos testen.
+
+### Funktionen verknüpfter Rollen auf SCNX {#scnx-features}
+
+Verknüpfte Rollen auf SCNX machen die Nutzung auf deinem Server besonders einfach. Während die [Ersteinrichtung](./../linked-roles) nur wenige Minuten dauert, ist auch die spätere Verwaltung von [Rollen](./role-management) und [Mitgliedsrollen](./user-management) unkompliziert. Darüber hinaus bietet SCNX zahlreiche Funktionen und Anpassungsmöglichkeiten.
+
+Folgende Funktionen sind auf SCNX verfügbar:
+
+* Einfache Verwaltung von [verknüpften Rollen](./role-management) im SCNX-Dashboard.
+* [Rollen zuweisen und entfernen](./user-management) bei Nutzern.
+* Verschiedene Farbschemata für die [Autorisierungsseite](./settings#authorization-page) verfügbar.
+* Off-Brand-Optionen mit dem [Professional-Plan](./../scnx/guilds/plans).
+* Autorisierung mit deiner eigenen Discord-App.
+* Du kannst [öffentliche verknüpfte Rollen](./role-management#public-roles) erstellen, die von jedem Nutzer beansprucht werden können.
+* Exzellenter Kundensupport auf [unserem Discord](https://scootk.it/dc-de) auf Deutsch und Englisch.
\ No newline at end of file
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/role-management.md b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/role-management.md
new file mode 100644
index 00000000..c4d0e5a8
--- /dev/null
+++ b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/role-management.md
@@ -0,0 +1,77 @@
+---
+sidebar_position: 2
+description: Erfahre, wie du verknüpfte Rollen erstellen, löschen und konfigurieren kannst.
+---
+
+# Verknüpfte Rollen verwalten
+
+Im Gegensatz zu traditionellen Rollen auf Discord erfordern verknüpfte Rollen mehr Schritte, um korrekt eingerichtet und konfiguriert zu werden.
+
+## Verknüpfte Rolle auf SCNX erstellen {#create-linked-scnx-role}
+
+:::info Discord-Limit
+Discord erzwingt ein striktes Limit von fünf verknüpften Rollen pro Bot. Das bedeutet, dass du nicht mehr als fünf verknüpfte
+Rollen auf SCNX haben kannst.
+:::
+
+Öffne die [Rollenseite deines Dashboards für verknüpfte Rollen](https://scnx.app/de/glink?page=linked-roles/roles) und klicke auf
+„Neue verknüpfte Rolle hinzufügen“. Wenn dies deine erste verknüpfte Rolle ist, leitet dich die Seite automatisch zum
+Erstellungsprozess weiter, ohne dass du etwas anklicken musst.
+
+Gib dort einen Namen für deine Rolle ein und wähle eine Beschreibung. Klicke anschließend auf „Verknüpfte Rolle erstellen“. Nach dem Klick
+fordert dich SCNX auf, die [neue verknüpfte Rolle auf Discord zu konfigurieren](#linked-role-on-discord).
+
+
+
+## Verknüpfte Rolle auf Discord einrichten {#linked-role-on-discord}
+
+Um eine verknüpfte Rolle auf Discord einzurichten, befolge bitte diese Schritte:
+
+1. Erstelle eine neue Rolle auf deinem Discord-Server. Du kannst ihre Rolleneinstellungen, das Rollensymbol, die Berechtigungen und die Farbe konfigurieren. Weise diese Rolle keinem Benutzer zu.
+2. Gehe in deinen Rolleneinstellungen zum Tab „Verknüpfungen“.
+3. Klicke dort auf „Anforderung hinzufügen“.
+4. Wähle deinen Bot im Abschnitt „Apps“ aus.
+5. Wähle die gewünschte verknüpfte Rolle aus. Die Rolle, die du auswählst, muss
+ [Benutzern auf SCNX zugewiesen werden](./user-managment#add-role), damit diese die neu erstellte Discord-Rolle beanspruchen können.
+
+Sobald du diese Schritte abgeschlossen hast, können deine Mitglieder die Rolle [beanspruchen](./claim-roles.md), wenn sie
+die [verknüpfte Rolle zugewiesen bekommen haben](./user-managment#add-role).
+Um die Rolle tatsächlich neben dem Benutzernamen eines Benutzers anzuzeigen, musst du
+die [Berechtigungen korrekt einrichten](#display-in-chat).
+
+
+
+## Verknüpfte Rolle im Chat anzeigen {#display-in-chat}
+
+Standardmäßig werden verknüpfte Rollen nicht neben Benutzernamen im Chat angezeigt. Um die verknüpfte Rolle anzuzeigen, musst du
+eine Kanalüberschreibung auf **jedem Kanal** erstellen. Dies kannst du tun, indem du in die Kanaleinstellungen eines beliebigen Kanals gehst,
+zu den Berechtigungen navigierst, deine verknüpfte Rolle auswählst (oder hinzufügst) und ihr die Berechtigung „Kanal anzeigen“ gibst. Diese Überschreibung
+ist für jeden Kanal erforderlich, in dem die Rolle angezeigt werden soll.
+
+
+
+## Öffentliche Rollen {#public-roles}
+
+:::info
+Nachdem du eine Rolle öffentlich gemacht hast, kannst du diese Entscheidung nicht rückgängig machen. Wenn du eine öffentliche Rolle wieder privat machen möchtest, musst du
+die [Rolle löschen](#delete-role).
+:::
+
+Standardmäßig müssen Rollen manuell [Mitgliedern zugewiesen werden](./user-managment). Das Aktivieren der Option „Öffentliche Rolle“ ermöglicht es
+jedem Benutzer auf deinem Discord, die Rolle zu beanspruchen, und entfernt deine Möglichkeit, die Rolle manuell zuzuweisen oder zu entfernen. Dies
+kann hilfreich sein, wenn du möchtest, dass eine „Mitglied“-Rolle neben Benutzern im Chat angezeigt wird.
+
+Nachdem du eine Rolle erstellt hast, kannst du sie
+in deinem [Dashboard für verknüpfte Rollen](https://scnx.app/glink?page=linked-roles/roles) verwalten, wo du die Option „Öffentliche Rolle“
+für deine Rolle aktivieren kannst. Sobald du die Option „Öffentliche Rolle“ aktiviert hast, können alle Benutzer die Rolle
+auf deinem Discord ohne weitere Überprüfungen [beanspruchen](./claim-roles). Obwohl du Benutzer im Dashboard manuell [entfernen](./user-managment#delete-user) kannst,
+werden sie die Rolle erneut beanspruchen können, da die Rolle öffentlich ist.
+
+
+
+## Verknüpfte Rollen löschen {#delete-role}
+
+Das Löschen einer verknüpften Rolle entfernt die verknüpfte Rolle auch von allen Benutzern auf deinem Discord, löscht aber nicht die von dir erstellte Discord-Rolle. Diese Aktion kann nicht rückgängig gemacht werden.
+
+Um eine Rolle zu löschen, öffne dein [Dashboard für verknüpfte Rollen](https://scnx.app/glink?page=linked-roles/roles), wähle deine Rolle aus
+und klicke auf „Rolle löschen“. Die Rolle wird nun gelöscht.
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/user-management.md b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/user-management.md
new file mode 100644
index 00000000..eeb02b99
--- /dev/null
+++ b/i18n/de/docusaurus-plugin-content-docs/current/linked-roles/user-management.md
@@ -0,0 +1,62 @@
+---
+sidebar_position: 4
+description: Verknüpfte Rollen müssen deinen Nutzern manuell zugewiesen werden.
+---
+
+# Verknüpfte Rollen von Mitgliedern verwalten
+
+Im Gegensatz zu nativen Rollen auf Discord müssen verknüpfte Rollen manuell über das SCNX-Dashboard zugewiesen werden.
+Zusätzlich müssen Rollen von den [Nutzern beansprucht werden](./claim-roles), bevor die Rolle dem Nutzer gegeben wird.
+
+:::success Gib deinen Admins Zugriff!
+Deine Admins können auch die verknüpften Rollen von Nutzern verwalten! Füge sie als [Trusted Admins](./../scnx/guilds/trusted-admins) hinzu und
+gib ihnen diese Anleitung, damit sie Nutzer bearbeiten können!
+:::
+
+## Verknüpfte Rolle hinzufügen {#add-role}
+
+Bevor du einem Nutzer eine Rolle zuweist, stelle sicher, dass du die [verknüpfte Rolle erstellt hast](./role-managment#create-linked-scnx-role).
+Du benötigst außerdem die Nutzer-ID des Nutzers, den du hinzufügen möchtest. Um diese Nutzer-ID zu erhalten,
+folge [dieser Anleitung von Discord](https://support.discord.com/hc/de/articles/206346498-Wo-kann-ich-meine-Benutzer-Server-Nachrichten-ID-finden).
+
+Sobald du die Nutzer-ID kopiert hast, öffne die [Nutzerseite für verknüpfte Rollen](https://scnx.app/de/glink?page=linked-roles/users).
+Klicke auf
+„Nutzer hinzufügen“, um einen weiteren Nutzer hinzuzufügen.
+
+Gib als Nächstes die zuvor kopierte Nutzer-ID ein, gib optional eine Tagline ein und wähle aus, welche Rollen der Nutzer erhalten soll.
+Bitte beachte, dass [öffentliche Rollen](./role-managment#public-roles) nicht zugewiesen oder entfernt werden können, da diese Rollen von
+jedem Nutzer beansprucht werden können.
+
+
+
+Sobald du die Änderungen gespeichert hast, kann der Nutzer die [Rolle beanspruchen](./claim-roles). Du kannst dem Nutzer einen Link
+zu unserer Anleitung senden, damit er weiß, was zu tun ist:
+[`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+
+## Nutzerrollen verwalten {#remove-role}
+
+:::info Öffentliche Rollen können nicht entfernt werden
+Alle [öffentlichen Rollen](./role-managment#public-roles) können nicht von Nutzern entfernt werden, da sie von jedem Nutzer beansprucht werden können.
+:::
+
+Um die verknüpften Rollen eines Nutzers zu verwalten, öffne die [Nutzerseite für verknüpfte Rollen](https://scnx.app/de/glink?page=linked-roles/users)
+deines Dashboards. Dort kannst du nach dem Nutzer suchen, den du bearbeiten möchtest, indem du seinen Nutzernamen oder seine ID eingibst. Alternativ kannst du
+nach Rollen filtern, um den gewünschten Nutzer zu finden.
+
+Sobald du den Nutzer gefunden hast, klicke auf seinen Dashboard-Eintrag, um die Nutzeroberfläche für die Nutzerverwaltung anzuzeigen. Dort kannst du
+seine Rollen und seine Tagline bearbeiten.
+
+Während entfernte Rollen innerhalb weniger Minuten vom Nutzer entfernt werden, müssen neue Rollen
+[manuell beansprucht werden](./claim-roles). Du kannst dem Nutzer einen Link zu unserer Anleitung senden, damit er weiß, was zu tun ist:
+[`https://scootk.it/claim-linked-roles`](https://scootk.it/claim-linked-roles).
+
+## Nutzer verknüpfter Rollen entfernen {#delete-user}
+
+Um einen Nutzer verknüpfter Rollen zu entfernen, öffne die [Nutzerseite für verknüpfte Rollen](https://scnx.app/de/glink?page=-roles/users)
+deines Dashboards. Dort kannst du nach dem Nutzer suchen, den du entfernen möchtest, indem du seinen Nutzernamen oder seine ID eingibst. Alternativ kannst du
+nach Rollen filtern, um den gewünschten Nutzer zu finden.
+
+Sobald du den Nutzer gefunden hast, klicke auf seinen Dashboard-Eintrag, um die Nutzeroberfläche für die Nutzerverwaltung anzuzeigen. Dort kannst du
+auf „Nutzer entfernen“ klicken, um die Nutzerdaten zu löschen. Das Entfernen des Nutzers führt dazu, dass alle seine Rollen entfernt werden und
+er sich erneut autorisieren muss, wenn er plant, Rollen erneut zu beanspruchen. Bitte beachte, dass dies Nutzer nicht daran hindert,
+[öffentliche Rollen](./role-managment#public-roles) jederzeit erneut zu beanspruchen.
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/scnx/guilds/plans.md b/i18n/de/docusaurus-plugin-content-docs/current/scnx/guilds/plans.md
index e24e7e24..76f7fdfc 100644
--- a/i18n/de/docusaurus-plugin-content-docs/current/scnx/guilds/plans.md
+++ b/i18n/de/docusaurus-plugin-content-docs/current/scnx/guilds/plans.md
@@ -25,7 +25,9 @@ benötigen ein separates Abonnement.
| Vollständiger Zugriff auf das SCNX Dashboard | Enthalten | Enthalten | Enthalten |
| [dcserver.link](./dcserver-link) | Enthalten | Enthalten | Enthalten |
| [Eigener Discord-Bot](./../../custom-bot/intro), 24/7 gehostet | Enthalten, but needs to be [extended](#starter-plan) every two weeks by watching ads | Enthalten | Enthalten |
-| [Eigener Modmail-Bot](./../../modmail/intro), 24/7 gehostet | *Not available* | Enthalten | Enthalten |
+| [Eigener Modmail-Bot](./../../modmail/intro), 24/7 gehostet | *Not available* | Enthalten | Enthalten |
+| [Custom Discord-Bot](./../../custom-bot/intro), hosted 24/7 | Included, but needs to be [extended](#starter-plan) every two weeks by watching ads | Included | Included |
+| [Verknüpfte Rollen](./../../linked-roles/intro) | *Not available* | Für Nutzer mit [Early Access](https://membership.scootkit.com/de) enthalten | Für Nutzer mit [Early Access](https://membership.scootkit.com) enthalten. |
| Entferne alle Erwähnungen von SCNX aus deinen Bots (z.B. Embed-Fußzeile) | *Not available* | *Nicht verfügbar* | Enthalten |
| Kostenloses [KI-Guthaben](https://faq.scnx.app/ai-on-scnx/), das am 25. jeden Monats vergeben wird | 20 | 300 | 600 |
| [Kommerzielle Nutzung](./faq#commercial-usage) | Untersagt | Untersagt | Enthalten |
diff --git a/i18n/de/docusaurus-theme-classic/footer.json b/i18n/de/docusaurus-theme-classic/footer.json
index d1b1c81f..090cbf91 100644
--- a/i18n/de/docusaurus-theme-classic/footer.json
+++ b/i18n/de/docusaurus-theme-classic/footer.json
@@ -74,5 +74,9 @@
"link.item.label.Open SCNX Dashboard": {
"message": "SCNX Dashboard öffnen",
"description": "The label of footer link with label=Open SCNX Dashboard linking to https://scnx.app/"
+ },
+ "link.item.label.Linked Roles": {
+ "message": "Verknüpfte Rollen",
+ "description": "The label of footer link with label=Linked Roles linking to /docs/linked-roles/intro"
}
-}
+}
\ No newline at end of file
diff --git a/i18n/de/docusaurus-theme-classic/navbar.json b/i18n/de/docusaurus-theme-classic/navbar.json
index 180d80ed..30410bf7 100644
--- a/i18n/de/docusaurus-theme-classic/navbar.json
+++ b/i18n/de/docusaurus-theme-classic/navbar.json
@@ -26,5 +26,13 @@
"item.label.SCNX Dashboard": {
"message": "SCNX Dashboard",
"description": "Navbar item with label SCNX Dashboard"
+ },
+ "item.label.Linked Roles": {
+ "message": "Verknüpfte Rollen",
+ "description": "Navbar item with label Linked Roles"
+ },
+ "item.label.News": {
+ "message": "Neuigkeiten",
+ "description": "Navbar item with label News"
}
-}
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index c6b79192..6d46b2c3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,7 +27,9 @@
"markdown-table-formatter": "1.6.1",
"prism-react-renderer": "2.3.1",
"react": "18.3.1",
- "react-dom": "18.3.1"
+ "react-dom": "18.3.1",
+ "react-player": "^2.16.0",
+ "remark-oembed": "^1.2.2"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.7.0"
@@ -4613,6 +4615,18 @@
"@types/node": "*"
}
},
+ "node_modules/@types/cacheable-request": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
+ "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
+ }
+ },
"node_modules/@types/connect": {
"version": "3.4.38",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
@@ -4776,6 +4790,15 @@
"version": "0.16.7",
"license": "MIT"
},
+ "node_modules/@types/keyv": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
+ "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/mdast": {
"version": "4.0.3",
"license": "MIT",
@@ -4879,6 +4902,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/responselike": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz",
+ "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
@@ -5413,6 +5445,12 @@
"node": ">= 8"
}
},
+ "node_modules/apr-intercept": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/apr-intercept/-/apr-intercept-3.0.4.tgz",
+ "integrity": "sha512-rDtf8HhtJL2OBKqKwZ3ehlTx1ZaiO0h7UQdBzFcntNtSD5ow/8sC4JpbMRVBwBL27m9wQwxEhmaAfHoAPBkVcA==",
+ "license": "MIT"
+ },
"node_modules/arg": {
"version": "5.0.2",
"license": "MIT"
@@ -5638,6 +5676,16 @@
"integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
"license": "MIT"
},
+ "node_modules/bcp-47-match": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-1.0.3.tgz",
+ "integrity": "sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -6189,6 +6237,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/clone-response": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
+ "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/clone-response/node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
@@ -6836,6 +6905,12 @@
"url": "https://github.com/sponsors/fb55"
}
},
+ "node_modules/css-selector-parser": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz",
+ "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==",
+ "license": "MIT"
+ },
"node_modules/css-tree": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
@@ -7269,6 +7344,19 @@
"node": ">=8"
}
},
+ "node_modules/direction": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz",
+ "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==",
+ "license": "MIT",
+ "bin": {
+ "direction": "cli.js"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/dns-packet": {
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
@@ -7554,6 +7642,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/enhanced-resolve": {
"version": "5.18.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
@@ -9054,6 +9151,26 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/hast-util-has-property": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-1.0.4.tgz",
+ "integrity": "sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz",
+ "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-parse-selector": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
@@ -9092,6 +9209,130 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-select": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-4.0.2.tgz",
+ "integrity": "sha512-8EEG2//bN5rrzboPWD2HdS3ugLijNioS1pqOTIolXNf67xxShYw4SQEmVXd3imiBG+U2bC2nVTySr/iRAA7Cjg==",
+ "license": "MIT",
+ "dependencies": {
+ "bcp-47-match": "^1.0.0",
+ "comma-separated-tokens": "^1.0.0",
+ "css-selector-parser": "^1.0.0",
+ "direction": "^1.0.0",
+ "hast-util-has-property": "^1.0.0",
+ "hast-util-is-element": "^1.0.0",
+ "hast-util-to-string": "^1.0.0",
+ "hast-util-whitespace": "^1.0.0",
+ "not": "^0.1.0",
+ "nth-check": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0",
+ "unist-util-visit": "^2.0.0",
+ "zwitch": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
+ "node_modules/hast-util-select/node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/hast-util-whitespace": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
+ "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/unist-util-visit": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
+ "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^4.0.0",
+ "unist-util-visit-parents": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/unist-util-visit-parents": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
+ "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-is": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select/node_modules/zwitch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
+ "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/hast-util-to-estree": {
"version": "3.1.0",
"license": "MIT",
@@ -9118,6 +9359,136 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-html": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz",
+ "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==",
+ "license": "MIT",
+ "dependencies": {
+ "ccount": "^1.0.0",
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-is-element": "^1.0.0",
+ "hast-util-whitespace": "^1.0.0",
+ "html-void-elements": "^1.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0",
+ "stringify-entities": "^3.0.1",
+ "unist-util-is": "^4.0.0",
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/ccount": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
+ "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/character-entities-html4": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
+ "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/hast-util-whitespace": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz",
+ "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/html-void-elements": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
+ "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/stringify-entities": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
+ "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/hast-util-to-html/node_modules/unist-util-is": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
+ "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-jsx-runtime": {
"version": "2.3.0",
"license": "MIT",
@@ -9173,6 +9544,16 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz",
+ "integrity": "sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-whitespace": {
"version": "3.0.0",
"license": "MIT",
@@ -10055,6 +10436,12 @@
"version": "1.0.0",
"license": "MIT"
},
+ "node_modules/is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+ "license": "MIT"
+ },
"node_modules/is-weakref": {
"version": "1.0.2",
"license": "MIT",
@@ -10387,6 +10774,12 @@
"version": "1.2.4",
"license": "MIT"
},
+ "node_modules/load-script": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
+ "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==",
+ "license": "MIT"
+ },
"node_modules/loader-runner": {
"version": "4.3.0",
"license": "MIT",
@@ -10965,6 +11358,12 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/memoize-one": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
+ "license": "MIT"
+ },
"node_modules/merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
@@ -12872,6 +13271,23 @@
"node": ">=0.10.0"
}
},
+ "node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/not": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz",
+ "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA=="
+ },
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -15044,6 +15460,16 @@
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/pupa": {
"version": "3.1.0",
"license": "MIT",
@@ -15387,6 +15813,22 @@
"webpack": ">=4.41.1 || 5.x"
}
},
+ "node_modules/react-player": {
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.16.0.tgz",
+ "integrity": "sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "deepmerge": "^4.0.0",
+ "load-script": "^1.0.0",
+ "memoize-one": "^5.1.1",
+ "prop-types": "^15.7.2",
+ "react-fast-compare": "^3.0.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0"
+ }
+ },
"node_modules/react-router": {
"version": "5.3.4",
"license": "MIT",
@@ -15723,6 +16165,230 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/remark-oembed": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/remark-oembed/-/remark-oembed-1.2.2.tgz",
+ "integrity": "sha512-zTHfSCgBIJV7D2UHanWlUT1sDqulOuAv9eVGl3XhV2o2tGDUgyVjMz5Ctx560IysJ+Qni4p0C3vkR1n3EubNRQ==",
+ "dependencies": {
+ "apr-intercept": "^3.0.4",
+ "got": "^11.8.2",
+ "hast-util-select": "^4.0.2",
+ "hast-util-to-html": "^7.1.2",
+ "hastscript": "^6.0.0",
+ "is-url": "^1.2.4",
+ "mime": "^2.5.2",
+ "param-case": "^3.0.4"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/@szmarczak/http-timer": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
+ "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
+ "license": "MIT",
+ "dependencies": {
+ "defer-to-connect": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/@types/hast": {
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
+ "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
+ "node_modules/remark-oembed/node_modules/cacheable-lookup": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.6.0"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/cacheable-request": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
+ "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
+ "license": "MIT",
+ "dependencies": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/got": {
+ "version": "11.8.6",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
+ "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.2",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/hast-util-parse-selector": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
+ "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/hastscript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
+ "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-parse-selector": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/http2-wrapper": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
+ "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "license": "MIT",
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/p-cancelable": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+ "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/responselike": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
+ "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
+ "license": "MIT",
+ "dependencies": {
+ "lowercase-keys": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remark-oembed/node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/remark-parse": {
"version": "11.0.0",
"license": "MIT",
@@ -18961,6 +19627,15 @@
"xml-js": "bin/cli.js"
}
},
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
diff --git a/package.json b/package.json
index f1976f7f..cfc58cab 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,8 @@
"markdown-table-formatter": "1.6.1",
"prism-react-renderer": "2.3.1",
"react": "18.3.1",
- "react-dom": "18.3.1"
+ "react-dom": "18.3.1",
+ "react-player": "^2.16.0"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.7.0"
diff --git a/sidebars.js b/sidebars.js
index b266cbbb..1cd924a2 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -36,6 +36,10 @@ const sidebars = {
{
type: 'doc',
id: 'modmail'
+ },
+ {
+ type: 'doc',
+ id: 'linked-roles'
}
]
},
@@ -57,6 +61,11 @@ const sidebars = {
type: 'doc',
label: 'Modmail-Bot',
id: 'modmail/intro'
+ },
+ {
+ type: 'doc',
+ label: 'Linked Roles',
+ id: 'linked-roles/intro'
}
]
},
@@ -71,6 +80,32 @@ const sidebars = {
]
}
],
+ linkedRolesSidebar: [
+ {
+ type: 'category',
+ collapsed: false,
+ collapsible: false,
+ label: 'SCNX Linked Roles',
+ link: {
+ type: 'generated-index',
+ title: 'Linked Roles on SCNX',
+ description: 'Use Linked Roles to display the role of a user next to their username in your Discord chats.',
+ slug: '/linked-roles/overview'
+ },
+ items: [
+ {
+ type: 'link',
+ description: 'Setting up Linked Roles might take a few minutes, but by following this guide, you can get started easily.',
+ label: 'Get started',
+ href: '/docs/linked-roles'
+ },
+ {
+ dirName: 'linked-roles',
+ type: 'autogenerated'
+ }
+ ]
+ }
+ ],
customBotSidebar: [
{
type: 'category',
diff --git a/src/components/Video.js b/src/components/Video.js
new file mode 100644
index 00000000..a16772db
--- /dev/null
+++ b/src/components/Video.js
@@ -0,0 +1,49 @@
+import ReactPlayer from 'react-player';
+import React, {useEffect, useState} from 'react';
+import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
+import {faYoutube} from '@fortawesome/free-brands-svg-icons';
+import Translate from '@docusaurus/Translate';
+import {faArrowCircleRight} from '@fortawesome/pro-solid-svg-icons';
+
+export default function Video({url}) {
+ const [allowed, setAllowed] = useState(false);
+ if (url.includes('youtu.be')) url = url.replace('youtu.be', 'youtube.com')
+ const urlData = new URL(url.replaceAll('www.', ''));
+
+ useEffect(() => {
+ if (localStorage.getItem(`scootkit.privacy.consent-${urlData.hostname}`) === '1') setAllowed(true);
+ }, [urlData]);
+
+ if (!allowed && urlData.hostname === 'youtube.com') return
+
+
+
+ There's a YouTube Video here
+
+
+ Privacy Policy
+ }}>{'By clicking below, you agree to YouTube\'s {link}.'}
+