mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2026-11-03 23:20:57 -05:00
docs: the old v5 docs now point to docs.nadeko.bot and nadekloud
This commit is contained in:
+5
-16
@@ -1,19 +1,8 @@
|
||||
# Read the Docs configuration file for MkDocs projects
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Set the version of Python and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "3.12"
|
||||
|
||||
mkdocs:
|
||||
configuration: mkdocs.yml
|
||||
|
||||
# Optionally declare the Python requirements required to build your docs
|
||||
python:
|
||||
install:
|
||||
- requirements: mkdocs-requirements.txt
|
||||
os: ubuntu-24.04
|
||||
commands:
|
||||
- mkdir -p $READTHEDOCS_OUTPUT/html
|
||||
- cp docs/index.html $READTHEDOCS_OUTPUT/html/index.html
|
||||
- cp docs/index.html $READTHEDOCS_OUTPUT/html/404.html
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 104 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
@@ -1,25 +0,0 @@
|
||||
# Readme for Commands List
|
||||
|
||||
## Bot Owner Only
|
||||
|
||||
- *Bot Owner Only* commands refer to the commands only the **owner** of the bot can use.
|
||||
- *Bot Owner Only* commands do **not** refer to the owner of the **server**, just the owner of the **bot**.
|
||||
- *Owner of the bot* is a person who is **hosting** their own bot, and their **ID** is inside of **creds.yml** file.
|
||||
- You are **not** the bot **owner** if you invited the bot using **Carbonitex** or other invitation links.
|
||||
|
||||
## Music on the public Nadeko
|
||||
|
||||
- In case you got Nadeko in your server by the invitation from **Carbonitex**, our **GitLab** invite or **help (.h)**, music is disabled.
|
||||
- Music is **disabled** due to large maintenance expenses
|
||||
- If you want to have music module on your server, you will have to **host** the bot on your PC, or any of the external servers.
|
||||
- How to **host** the bot, check the **guides** on the left side.
|
||||
|
||||
## NadekoFlowers
|
||||
|
||||
- NadekoFlowers is the **currency** of the public Nadeko.
|
||||
- NadekoFlowers can be `.pick`ed after Nadeko plants a flower randomly after `.gc` has been enabled on a channel
|
||||
- You can give NadekoFlowers to other users, using the command `.give X @person`.
|
||||
- You can only give flowers you **own**.
|
||||
- If you want to have **unlimited** number of flowers, you will have to **host** the bot.
|
||||
- Commands `.award X @person` and `.take X @person` can only be used by the *bot owner*.
|
||||
- If you `.plant` the flower, flower will be avaliable for everyone to `.pick` it. In that case you will **lose** the flower.
|
||||
@@ -1,70 +0,0 @@
|
||||
# Config
|
||||
`.config` gives you a fast and easy way to edit most bot settings/values. Use `.h .config` for explanation.
|
||||
|
||||
Use `.config` to see the list of editable config files
|
||||
Use `.config <config-name>` to see the list of settable properties on that config
|
||||
Use `.config <config-name> <setting>` to see the current value and description
|
||||
Use `.config <config-name> <setting> value` to set a new value
|
||||
|
||||
All settings are only available if you edit `data/[config-name].yml` files manually.
|
||||
If you edit the files manually, you can reload configuration with `.configreload <config-name>`
|
||||
|
||||
The list below is not complete. Use commands above to see up-to-date list for your version.
|
||||
|
||||
## XP
|
||||
|
||||
`txt.cooldown` - Sets a timeout value in which a user cannot gain any more xp from sent messages. ( Value is in minutes )
|
||||
`txt.per_msg` - Sets a value for the amount of xp a user will receive from sending a message.
|
||||
`voice.per_minute` - Sets how much xp a user will receive from being active in a voice channel.
|
||||
`voice.max_minutes` - Restricts a users xp gain to a certain amount of time spent in a voice channel.
|
||||
|
||||
*more settings may be available in `data/xp.yml` file*
|
||||
|
||||
## Games
|
||||
|
||||
`trivia.min_win_req` - Restricts a user's ability to make a trivia game with a win requirement less than the set value.
|
||||
`trivia.currency_reward` - Sets the amount of currency a user will win if they place first in a completed trivia game.
|
||||
`hangman.currency_reward` - Sets the amount of currency a user will win if they win a game of hangman.
|
||||
`chatbot` - Sets which chatbot API the bot should use, values: `gpt3`, `cleverbot`.
|
||||
`gpt.model` - Sets which GPT-3 model the bot should use, values: `ada001`, `babbage001`, `curie001`, `davinci003`.
|
||||
`gpt.max_tokens` - Sets the limit of tokens GPT-3 can use per call. Find out more about tokens [here](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them).
|
||||
|
||||
*more settings may be available in `data/games.yml` file*
|
||||
|
||||
## Bot
|
||||
|
||||
`color.ok` - Sets a hex color that will be shown on the side bar of a successful command.
|
||||
`color.error` - Sets a hex color that will be shown on the side bar of an unsuccessful command.
|
||||
`color.pending` - Sets a hex color that will be shown on the side bar of a command that is currently in progress.
|
||||
`help.text` - The text a user is DM'd when they invoke the `.h` command.
|
||||
`help.dmtext` - The text a user will receive when they DM the bot directly.
|
||||
`console.type` - Sets the style in which commands will show up in your console, values: `Simple`, `Normal`, `None`.
|
||||
`locale` - Sets your native bot language, run the `.langli` command in a Discord channel for a full list of language options.
|
||||
`prefix` - Sets default prefix for your bot.
|
||||
|
||||
*more settings may be available in `data/bot.yml` file*
|
||||
|
||||
## Gambling
|
||||
|
||||
`currency.name` - Sets the name for your bot's currency.
|
||||
`currency.sign` - Sets the icon for your currency.
|
||||
`minbet` - Minimum amount users can bet
|
||||
`maxbet` - Maximum amount users can bet. Set 0 for unlimited
|
||||
`gen.min` - Sets the minimum amount that can be spawned with `.gc` active.
|
||||
`gen.max` - Sets the maximum amount that can be spawned with `.gc` active.
|
||||
`gen.cd` - Sets a cooldown on how often a flower can spawn with `.gc` active ( Value is in seconds ).
|
||||
`gen.chance` - Sets the likelihood that flowers will spawn with `.gc`. Value: ( 0.02 = 2% | 1 + 100% ).
|
||||
`gen.has_pw` - Toggles wether the generated flowers will have a password at the top left of the image. Value: `true` or `false`
|
||||
`bf.multi` - Sets the amount fo currency a user will win off of a winning a bet flip.
|
||||
`waifu.min_price` - Sets the minimum price a user must pay to claim a user as their waifu.
|
||||
`waifu.multi.reset` - Sets a multiplier for the `.waifureset` command.
|
||||
`waifu.multi.crush_claim` - Sets a discount for a user that is claiming another user that has their affinity set to them.
|
||||
`waifu.multi.normal_claim` - Amount a user would have to spend to claim a waifu with no affinity set.
|
||||
`waifu.multi.divorce_value` - Sets how much a user would get if they divorce a waifu.
|
||||
`waifu.multi.all_gifts` - Sets how much of a gifts value will be added to the value of the gifted waifu.
|
||||
`waifu.multi.gift_effect` - Sets a bonus amount that a waifu will receive if they have their affinity set to the gifter.
|
||||
`decay.percent` - Sets the percentage to decay all users currency daily.
|
||||
`decay.maxdecay` - Sets the maximum a amount that a user's currency can decay in a day.
|
||||
`decay.threshold` - Sets the minimum amount that a user must have to be eligible to receive a decay.
|
||||
|
||||
*more settings may be available in `data/gambling.yml` file*
|
||||
@@ -1,7 +0,0 @@
|
||||
# How to contribute
|
||||
|
||||
1. Make Merge Requests to the [**v5 branch**](https://gitlab.com/kwoth/nadekobot/tree/v5)
|
||||
2. Keep a single Merge Request to a single feature
|
||||
3. Fill out the MR template
|
||||
|
||||
Thanks for all your help ^\_^
|
||||
@@ -1,67 +0,0 @@
|
||||
## Creds Guide
|
||||
|
||||
This guide will show you how to create your own discord bot, invite it to your server, and copy it's credentials to your `creds.yml` in order to run your bot.
|
||||
|
||||
- Start by opening your creds.yml
|
||||
- If you're on a windows installer version, click on the creds button next to your bot's RUN button.
|
||||
- If you're on linux from source or windows from source version, open `nadekobot/output/creds.yml`. Please use visual studio code, notepad++ or another code editor. Usage of notepad is discouraged.
|
||||
|
||||

|
||||
|
||||
1. Go to [the Discord developer application page][DiscordApp].
|
||||
2. Log in with your Discord account.
|
||||
3. Click **New Application**.
|
||||
3. Fill out the `Name` field however you like, accept the terms, and confirm.
|
||||
1. Go to the **Bot** tab on the left sidebar.
|
||||
1. Click on the `Add a Bot` button and confirm that you do want to add a bot to this app.
|
||||
1. **Optional:** Add bot's avatar and description.
|
||||
1. Copy your Token to `creds.yml` as shown above.
|
||||
1. Scroll down to the **`Privileged Gateway Intents`** section
|
||||
- Enable the following:
|
||||
- **PRESENCE INTENT**
|
||||
- **SERVER MEMBERS INTENT**
|
||||
- **MESSAGE CONTENT INTENT**
|
||||
|
||||
These are required for a number of features to function properly, and all should be on.
|
||||
|
||||
##### Getting Owner ID
|
||||
|
||||
- Go to your Discord server and attempt to mention yourself, but put a backslash at the start
|
||||
*(to make it slightly easier, add the backslash after the mention has been typed)*.
|
||||
- For example, the message `\@fearnlj01#3535` will appear as `<@145521851676884992>` after you send the message.
|
||||
- The message will appear as a mention if done correctly. Copy the numbers from it **`145521851676884992`** and replace the big number on the `OwnerIds` section with your user ID.
|
||||
- Save the `creds.yml` file.
|
||||
- If done correctly, you should now be the bot owner. You can add multiple owners by adding them below the first one. Indentation matters.
|
||||
|
||||
For a single owner, it should look like this:
|
||||
|
||||
```yml
|
||||
OwnerIds:
|
||||
- 105635576866156544
|
||||
```
|
||||
|
||||
For multiple owners, it should look like this:
|
||||
|
||||
```yml
|
||||
OwnerIds:
|
||||
- 105635123466156544
|
||||
- 145521851676884992
|
||||
- 341420590009417729
|
||||
```
|
||||
|
||||
|
||||
#### Inviting your bot to your server
|
||||
|
||||

|
||||
|
||||
- On the **General Information** tab, copy your `Application ID` from your [applications page][DiscordApp].
|
||||
- Replace the `YOUR_CLIENT_ID_HERE` in this link:
|
||||
`https://discordapp.com/oauth2/authorize?client_id=YOUR_CLIENT_ID_HERE&scope=bot&permissions=66186303` with your `Client ID`
|
||||
- The link should now look something like this:
|
||||
`https://discordapp.com/oauth2/authorize?client_id=123123123123&scope=bot&permissions=66186303`
|
||||
- Access that newly created link, pick your Discord server, click `Authorize` and confirm with the captcha at the end
|
||||
- The bot should now be in your server
|
||||
|
||||
That's it! You may now go back to the installation guide you were following before 🎉
|
||||
|
||||
[DiscordApp]: https://discordapp.com/developers/applications/me
|
||||
@@ -1,44 +0,0 @@
|
||||
## Expressions
|
||||
|
||||
### Important
|
||||
|
||||
- For modifying **global** expressions, the ones which will work across all the servers your bot is connected to, you **must** be a Bot Owner.
|
||||
You must also use the commands for adding, deleting and listing these expressions in a direct message with the bot.
|
||||
- For modifying **local** expressions, the ones which will only work on the server that they are added on, it is required to have the **Administrator** permission.
|
||||
You must also use the commands for adding, deleting and listing these expressions in the server you want the expressions to work on.
|
||||
|
||||
### Commands and Their Use
|
||||
|
||||
| Command Name | Description | Example |
|
||||
| :----------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- |
|
||||
| `.exa` | Add an expression with a trigger and a response. Running this command in a server requries the Administrator permission. Running this command in DM is Bot Owner only, and adds a new global expression. | `.exadd "hello" Hi there, %user%!` |
|
||||
| `exl` | Lists a page of global or server expression(15 expressions per page). Running this command in a DM will list the global expression, while running it in a server will list that server's expression. | `.exl 1` |
|
||||
| `.exd` | Deletes an expression based on the provided index. Running this command in a server requires the Administrator permission. Running this command in DM is Bot Owner only, and will delete a global expression. | `.exd 5` |
|
||||
|
||||
#### Now that we know the commands let's take a look at an example of adding a command with `.exa`,
|
||||
|
||||
`.exadd "Nice Weather" It sure is, %user%!`
|
||||
|
||||
This command can be split into two different arguments:
|
||||
|
||||
- The trigger, `"Nice Weather"`
|
||||
- And the response, `It sure is, %user%!`
|
||||
|
||||
An important thing to note about the triger is that, to be more than one word, we had to wrap it with quotation marks, `"Like this"` otherwise, only the first word would have been recognised as the trigger, and the second word would have been recognised as part of the response.
|
||||
|
||||
There's no special requirement for the formatting of the response, so we could just write it in exactly the same way we want it to respond, albeit with a placeholder - which will be explained in this next section.
|
||||
|
||||
Now, if that command was ran in a server, anyone on that server can make the bot mention them, saying `It sure is, @Username` anytime they say "Nice Weather". If the command is ran in a direct message with the bot, then the expression can be used on every server the bot is connected to.
|
||||
|
||||
### Block global Expressions
|
||||
|
||||
If you want to disable a global expression which you do not like, and you do not want to remove it, or you are not the bot owner, you can do so by adding a new expression with the same trigger on your server, and set the response to `-`.
|
||||
|
||||
For example:
|
||||
`.exa /o/ -`
|
||||
|
||||
Now if you try to trigger `/o/`, it won't print anything even if there is a global expression with the same name.
|
||||
|
||||
### Placeholders!
|
||||
|
||||
To learn about placeholders, go [here](placeholders.md)
|
||||
@@ -1,37 +0,0 @@
|
||||
# Donate
|
||||
|
||||
Nadeko is an [open-source project][gitlab], and we rely on your help to develop the bot, pay hosting fees, maintain our website and more.
|
||||
Donations go a long way in helping us keep the project alive, and we appreciate every single one of them.
|
||||
|
||||
## Perks
|
||||
|
||||
Donating to us also gives you the following benefits:
|
||||
|
||||
- A hoisted **Patron** role in [Nadeko Discord server][discord-server]
|
||||
- Access to exclusive **#noticed** text and voice channels
|
||||
- **3000 flowers** on the public bot per dollar donated (after fees)
|
||||
|
||||
## Patreon
|
||||
|
||||
You can set up a monthly pledge on [Patreon][patreon] and support the project's growth, and also get flower rewards for every month you donate!
|
||||
|
||||
!!! Note
|
||||
Connect your Discord account on Patreon to receive your flowers automatically
|
||||
|
||||
[![img][patreon-button]][patreon]
|
||||
|
||||
## PayPal
|
||||
|
||||
You can also donate to us through [PayPal][paypal] for one-time donations using the button below, or by donating to `nadekodiscordbot@gmail.com`.
|
||||
|
||||
!!! Note
|
||||
Mention your Discord username or user id in the payment note to receive flower rewards.
|
||||
|
||||
[![img][paypal-button]][paypal]
|
||||
|
||||
[gitlab]: https://gitlab.com/kwoth/nadekobot
|
||||
[discord-server]: https://discord.nadeko.bot/
|
||||
[patreon]: https://www.patreon.com/nadekobot
|
||||
[patreon-button]: ./assets/patreon.png
|
||||
[paypal]: https://paypal.me/Kwoth
|
||||
[paypal-button]: ./assets/paypal.png
|
||||
@@ -1,76 +0,0 @@
|
||||
# Deploying NadekoBot with Docker: A Comprehensive Guide
|
||||
|
||||
## Getting Started
|
||||
|
||||
Ensure Docker and Docker Compose are installed on your system. If not, follow the official Docker guides for your specific operating system:
|
||||
|
||||
- [Docker Installation Guide](https://docs.docker.com/engine/install/)
|
||||
- [Docker Compose Installation Guide](https://docs.docker.com/compose/install/)
|
||||
|
||||
## Step-by-Step Installation
|
||||
|
||||
1. **Choose Your Workspace:** Select a directory where you'll set up your NadekoBot stack. Use your terminal to navigate to this directory. For the purpose of this guide, we'll use `/opt/stacks/nadekobot/` as an example, but you can choose any directory that suits your needs.
|
||||
|
||||
2. **Create a Docker Compose File:** In this directory, create a Docker Compose file named `docker-compose.yml`. You can use any text editor for this task. For instance, to use the `nano` editor, type `nano docker-compose.yml`.
|
||||
|
||||
3. **Configure Your Docker Compose File:** Populate your Docker Compose file with the following configuration:
|
||||
|
||||
```yml
|
||||
services:
|
||||
nadeko:
|
||||
image: registry.gitlab.com/kwoth/nadekobot:latest
|
||||
container_name: nadeko
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: Europe/Rome
|
||||
volumes:
|
||||
- /opt/stacks/nadekobot/conf/creds.yml:/app/data/creds.yml
|
||||
- /opt/stacks/nadekobot/data:/app/data
|
||||
networks: {}
|
||||
```
|
||||
|
||||
4. **Prepare Your Credentials File:** Before running Docker Compose, ensure the `creds.yml` file exists in the `/opt/stacks/nadekobot/conf/` directory. If it's missing, create it using `touch /opt/stacks/nadekobot/conf/creds.yml`. You may need to use `sudo`. Remember to replace `/opt/stacks/nadekobot/` with your chosen directory.
|
||||
|
||||
5. **Edit Your Credentials File:** Populate the `creds.yml` file in `/opt/stacks/nadekobot/conf/creds.yml` with your bot's credentials. You can use any text editor for this task. For instance, to use the `nano` editor, type `nano /opt/stacks/nadekobot/conf/creds.yml`. You may need to use `sudo`. Again, replace `/opt/stacks/nadekobot/` with your chosen directory.
|
||||
|
||||
6. **Launch Your Bot:** Now, you're ready to run Docker Compose. Use the following command: `docker-compose up -d`.
|
||||
|
||||
## Keeping Your Bot Up-to-Date
|
||||
|
||||
There are two methods to update your NadekoBot:
|
||||
|
||||
### Manual Update
|
||||
|
||||
1. **Navigate to Your Directory:** Use `cd /path/to/your/directory` to go to the directory containing your Docker Compose file.
|
||||
|
||||
2. **Pull the Latest Images:** Use `docker-compose pull` to fetch the latest images.
|
||||
|
||||
3. **Restart Your Containers:** Use `docker-compose up -d` to restart the containers.
|
||||
|
||||
### Automatic Update with Watchtower
|
||||
|
||||
If you prefer an automated update process, consider using Watchtower. Watchtower automatically updates your Docker containers to the latest versions.
|
||||
|
||||
To use Watchtower with NadekoBot, you need to add a specific label to the service in your Docker Compose file. Here's how your Docker Compose file should look:
|
||||
|
||||
```yml
|
||||
services:
|
||||
nadeko:
|
||||
image: registry.gitlab.com/kwoth/nadekobot:latest
|
||||
container_name: nadeko
|
||||
restart: unless-stopped
|
||||
labels:
|
||||
- com.centurylinklabs.watchtower.enable=true
|
||||
environment:
|
||||
TZ: Europe/Rome
|
||||
volumes:
|
||||
- /opt/stacks/nadekobot/conf/creds.yml:/app/data/creds.yml
|
||||
- /opt/stacks/nadekobot/data:/app/data
|
||||
networks: {}
|
||||
```
|
||||
|
||||
Remember to replace `/opt/stacks/nadekobot/` with your chosen directory in the Docker Compose file.
|
||||
|
||||
To install and run Watchtower, follow the guide provided by Containrrr:
|
||||
|
||||
- [Watchtower Installation and Usage Guide](https://containrrr.dev/watchtower/)
|
||||
@@ -1,372 +0,0 @@
|
||||
# Setting up NadekoBot on Linux
|
||||
|
||||
| Table of Contents |
|
||||
| :-------------------------------------------------- |
|
||||
| [Linux From Source] |
|
||||
| [Source Update Instructions] |
|
||||
| [Linux Release] |
|
||||
| [Release Update Instructions] |
|
||||
| [Tmux (Preferred Method)] |
|
||||
| [Systemd] |
|
||||
| [Systemd + Script] |
|
||||
| [Setting up Nadeko on a VPS (Digital Ocean)] |
|
||||
|
||||
#### Operating System Compatibility
|
||||
|
||||
##### Compatible operating systems:
|
||||
|
||||
- Ubuntu: 20.04, 22.04, 24.04
|
||||
- Mint: 19, 20, 21
|
||||
- Debian: 10, 11, 12
|
||||
- RockyLinux: 8, 9
|
||||
- AlmaLinux: 8, 9
|
||||
- openSUSE Leap: 15.5, 15.6 & Tumbleweed
|
||||
- Fedora: 38, 39, 40, 41, 42
|
||||
|
||||
## Linux From Source
|
||||
|
||||
##### Migration from v3 -> v5
|
||||
|
||||
Follow the following few steps only if you're migrating from v3. If not, skip to installation instructions.
|
||||
|
||||
Use the new installer script: `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
> - Install prerequisites (type `1` and press `enter`)
|
||||
> - Download (type `2` and press `enter`)
|
||||
> - Run (type `3` and press `enter`)
|
||||
> - Done
|
||||
|
||||
##### Installation Instructions
|
||||
|
||||
Open Terminal (if you're on an installation with a window manager) and navigate to the location where you want to install the bot (for example `cd ~`)
|
||||
|
||||
1. Download and run the **new** installer script `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
2. Install prerequisites (type `1` and press enter)
|
||||
3. Download the bot (type `2` and press enter)
|
||||
4. Exit the installer (type `6` and press enter)
|
||||
5. Copy the creds.yml template `cp nadekobot/output/creds_example.yml nadekobot/output/creds.yml`
|
||||
6. Open `nadekobot/output/creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
7. [Click here to follow creds guide](../../creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
8. Run the installer script again `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
9. Run the bot (type `3` and press enter)
|
||||
|
||||
##### Source Update Instructions
|
||||
|
||||
1. ⚠ Stop the bot ⚠
|
||||
2. Update and run the **new** installer script `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
3. Update the bot (type `2` and press enter)
|
||||
4. Run the bot (type `3` and press enter)
|
||||
5. 🎉
|
||||
|
||||
## **⚠ IF YOU ARE FOLLOWING THE GUIDE ABOVE, IGNORE THIS SECTION ⚠**
|
||||
|
||||
## Linux Release
|
||||
|
||||
###### Prerequisites
|
||||
|
||||
1. (Optional) Installing Redis
|
||||
- ubuntu installation command: `sudo apt-get install redis-server`
|
||||
2. Playing music requires `ffmpeg`, `libopus`, `libsodium` and `yt-dlp` (which in turn requires python3)
|
||||
- Ubuntu installation command: `sudo apt-get install ffmpeg libopus0 opus-tools libopus-dev libsodium-dev -y`
|
||||
- yt-dlp installation command: `sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp && sudo chmod a+rx /usr/local/bin/yt-dlp`
|
||||
3. Make sure your python is version 3+ with `python --version`
|
||||
- if it's not, you can install python 3 and make it the default with: `sudo apt-get install python3.8 python-is-python3`
|
||||
*You can use nadeko bash script [prerequisites installer](https://gitlab.com/kwoth/nadeko-bash-installer/-/blob/v5/n-prereq.sh) as a reference*
|
||||
|
||||
##### Installation Instructions
|
||||
|
||||
1. Download the latest release from <https://gitlab.com/kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
2. Untar it
|
||||
- ⚠ Make sure that you change X.XX.X to the same series of numbers as in step 1!
|
||||
- `tar xf X.XX.X-linux-x64-build.tar`
|
||||
3. Rename the `nadekobot-linux-x64` to `nadekobot`
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
4. Move into nadekobot directory and make NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
5. Copy the creds.yml template
|
||||
- `cp creds_example.yml creds.yml`
|
||||
6. Open `creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
8. [Click here to follow creds guide](../../creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
9. Run the bot
|
||||
- `./NadekoBot`
|
||||
|
||||
##### Release Update Instructions
|
||||
|
||||
1. Stop the bot
|
||||
2. Download the latest release from <https://gitlab.com/kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "x.x.x-linux-x64-build.tar" (where `X.X.X` is a version, for example 3.0.4) and download it
|
||||
3. Untar it
|
||||
- ⚠ Make sure that you change `X.X.X` to the same series of numbers as in step 2!
|
||||
- `tar xf x.x.x-linux-x64-build.tar`
|
||||
4. Rename the old nadekobot directory to nadekobot-old (remove your old backup first if you have one, or back it up under a different name)
|
||||
- `rm -rf nadekobot-old 2>/dev/null`
|
||||
- `mv nadekobot nadekobot-old`
|
||||
5. Rename the new nadekobot directory to nadekobot
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
6. Remove old strings and aliases to avoid overwriting the updated versions of those files
|
||||
- ⚠ If you've modified said files, back them up instead
|
||||
- `rm nadekobot-old/data/aliases.yml`
|
||||
- `rm -r nadekobot-old/data/strings`
|
||||
7. Copy old data
|
||||
- `cp -RT nadekobot-old/data/ nadekobot/data`
|
||||
8. Copy creds.yml
|
||||
- `cp nadekobot-old/creds.yml nadekobot/`
|
||||
9. Move into nadekobot directory and make the NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
10. Run the bot
|
||||
- `./NadekoBot`
|
||||
|
||||
🎉 Enjoy
|
||||
|
||||
##### Steps 3 - 9 as a single command
|
||||
|
||||
Don't forget to change X.XX.X to match step 2.
|
||||
```sh
|
||||
tar xf X.XX.X-linux-x64-build.tar && \
|
||||
rm -rf nadekobot-old 2>/dev/null && \
|
||||
mv nadekobot nadekobot-old && \
|
||||
mv nadekobot-linux-x64 nadekobot && \
|
||||
rm nadekobot-old/data/aliases.yml && \
|
||||
rm -r nadekobot-old/data/strings && \
|
||||
cp -RT nadekobot-old/data/ nadekobot/data && \
|
||||
cp nadekobot-old/creds.yml nadekobot/ && \
|
||||
cd nadekobot && chmod +x NadekoBot
|
||||
```
|
||||
|
||||
## Running Nadeko
|
||||
|
||||
While there are two run modes built into the installer, these options only run Nadeko within the current session. Below are 3 methods of running Nadeko as a background process.
|
||||
|
||||
### Tmux Method (Preferred)
|
||||
|
||||
Using `tmux` is the simplest method, and is therefore recommended for most users.
|
||||
|
||||
**Before proceeding, make sure your bot is not running by either running `.die` in your Discord server or exiting the process with `Ctrl+C`.**
|
||||
|
||||
If you are presented with the installer main menu, exit it by choosing Option `8`.
|
||||
|
||||
1. Create a new session: `tmux new -s nadeko`
|
||||
|
||||
The above command will create a new session named **nadeko** *(you can replace “nadeko” with anything you prefer, it's your session name)*.
|
||||
|
||||
2. Run the installer: `bash linuxAIO.sh`
|
||||
|
||||
3. There are a few options when it comes to running Nadeko.
|
||||
|
||||
- Run `3` to *Run the bot normally*
|
||||
- Run `4` to *Run the bot with Auto Restart* (This is may or may not work)
|
||||
|
||||
4. If option `4` was selected, you have the following options
|
||||
```
|
||||
1. Run Auto Restart normally without updating NadekoBot.
|
||||
2. Run Auto Restart and update NadekoBot.
|
||||
3. Exit
|
||||
|
||||
Choose:
|
||||
[1] to Run NadekoBot with Auto Restart on "die" command without updating.
|
||||
[2] to Run with Auto Updating on restart after using "die" command.
|
||||
```
|
||||
- Run `1` to restart the bot without updating. (This is done using the `.die` command)
|
||||
- Run `2` to update the bot upon restart. (This is also done using the `.die` command)
|
||||
|
||||
5. That's it! to detatch the tmux session:
|
||||
- Press `Ctrl` + `B`
|
||||
- Then press `D`
|
||||
|
||||
Now check your Discord server, the bot should be online. Nadeko should now be running in the background of your system.
|
||||
|
||||
To re-open the tmux session to either update, restart, or whatever, execute `tmux a -t nadeko`. *(Make sure to replace "nadeko" with your session name. If you didn't change it, leave it as it.)*
|
||||
|
||||
|
||||
### Systemd
|
||||
|
||||
Compared to using tmux, this method requires a little bit more work to set up, but has the benefit of allowing Nadeko to automatically start back up after a system reboot or the execution of the `.die` command.
|
||||
|
||||
1. Navigate to the project's root directory
|
||||
- Project root directory location example: `/home/user/nadekobot/`
|
||||
2. Use the following command to create a service that will be used to start Nadeko:
|
||||
|
||||
```bash
|
||||
echo "[Unit]
|
||||
Description=NadekoBot service
|
||||
After=network.target
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=2
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER
|
||||
WorkingDirectory=$PWD/output
|
||||
# If you want Nadeko to be compiled prior to every startup, uncomment the lines
|
||||
# below. Note that it's not neccessary unless you are personally modifying the
|
||||
# source code.
|
||||
#ExecStartPre=/usr/bin/dotnet build ../src/NadekoBot/NadekoBot.csproj -c Release -o output/
|
||||
ExecStart=/usr/bin/dotnet NadekoBot.dll
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=NadekoBot
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nadeko.service
|
||||
```
|
||||
|
||||
3. Make the new service available:
|
||||
- `sudo systemctl daemon-reload`
|
||||
4. Start Nadeko:
|
||||
- `sudo systemctl start nadeko.service && sudo systemctl enable nadeko.service`
|
||||
|
||||
|
||||
### Systemd + Script
|
||||
|
||||
This method is similar to the one above, but requires one extra step, with the added benefit of better error logging and control over what happens before and after the startup of Nadeko.
|
||||
|
||||
1. Locate the project and move to its parent directory
|
||||
- Project location example: `/home/user/nadekobot/`
|
||||
- Parent directory example: `/home/user/`
|
||||
2. Use the following command to create a service that will be used to execute `NadekoRun.sh`:
|
||||
|
||||
```bash
|
||||
echo "[Unit]
|
||||
Description=NadekoBot service
|
||||
After=network.target
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=2
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER
|
||||
WorkingDirectory=$_WORKING_DIR
|
||||
ExecStart=/bin/bash NadekoRun.sh
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=NadekoBot
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nadeko.service
|
||||
```
|
||||
|
||||
3. Make the new service available:
|
||||
- `sudo systemctl daemon-reload`
|
||||
4. Use the following command to create a script that will be used to start Nadeko:
|
||||
|
||||
```bash
|
||||
{
|
||||
echo '#!/bin/bash'
|
||||
echo ""
|
||||
echo "echo \"Running NadekoBot in the background with auto restart\"
|
||||
yt-dlp -U
|
||||
|
||||
# If you want Nadeko to be compiled prior to every startup, uncomment the lines
|
||||
# below. Note that it's not necessary unless you are personally modifying the
|
||||
# source code.
|
||||
#echo \"Compiling NadekoBot...\"
|
||||
#cd \"$PWD\"/nadekobot
|
||||
#dotnet build src/NadekoBot/NadekoBot.csproj -c Release -o output/
|
||||
|
||||
echo \"Starting NadekoBot...\"
|
||||
|
||||
while true; do
|
||||
if [[ -d $PWD/nadekobot/output ]]; then
|
||||
cd $PWD/nadekobot/output || {
|
||||
echo \"Failed to change working directory to $PWD/nadekobot/output\" >&2
|
||||
echo \"Ensure that the working directory inside of '/etc/systemd/system/nadeko.service' is correct\"
|
||||
echo \"Exiting...\"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
echo \"$PWD/nadekobot/output doesn't exist\"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dotnet NadekoBot.dll || {
|
||||
echo \"An error occurred when trying to start NadekBot\"
|
||||
echo \"Exiting...\"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo \"Waiting for 5 seconds...\"
|
||||
sleep 5
|
||||
yt-dlp -U
|
||||
echo \"Restarting NadekoBot...\"
|
||||
done
|
||||
|
||||
echo \"Stopping NadekoBot...\""
|
||||
} > NadekoRun.sh
|
||||
```
|
||||
|
||||
5. Start Nadeko:
|
||||
- `sudo systemctl start nadeko.service && sudo systemctl enable nadeko.service`
|
||||
|
||||
### Setting up Nadeko on a Linux VPS (Digital Ocean Droplet)
|
||||
|
||||
If you want Nadeko to play music for you 24/7 without having to hosting it on your PC and want to keep it cheap, reliable and convenient as possible, you can try Nadeko on Linux Digital Ocean Droplet using the link [DigitalOcean](http://m.do.co/c/46b4d3d44795/) (by using this link, you will get **$10 credit** and also support Nadeko)
|
||||
|
||||
To set up the VPS, please select the options below
|
||||
```
|
||||
These are the min requirements you must follow:
|
||||
|
||||
OS: Any between Ubuntu, Fedora, and Debian
|
||||
|
||||
Plan: Basic
|
||||
|
||||
CPU options: regular with SSD
|
||||
1 GB / 1 CPU
|
||||
25 GB SSD Disk
|
||||
1000 GB transfer
|
||||
|
||||
Note: You can select the cheapest option with 512 MB /1 CPU but this has been a hit or miss.
|
||||
|
||||
Datacenter region: Choose one depending on where you are located.
|
||||
|
||||
Authentication: Password or SSH
|
||||
(Select SSH if you know what you are doing, otherwise choose password)
|
||||
```
|
||||
**Setting up NadekoBot**
|
||||
Assuming you have followed the link above to setup an account and a Droplet with a 64-bit operational system on Digital Ocean and got the `IP address and root password (in your e-mail)` to login, it's time to get started.
|
||||
|
||||
**This section is only relevant to those who want to host Nadeko on DigitalOcean. Go through this whole section before setting the bot up.**
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
- Download [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
|
||||
- Download [WinSCP](https://winscp.net/eng/download.php) *(optional)*
|
||||
- [Create and invite the bot](../../creds-guide).
|
||||
|
||||
#### Starting up
|
||||
|
||||
- **Open PuTTY** and paste or enter your `IP address` and then click **Open**.
|
||||
If you entered your Droplets IP address correctly, it should show **login as:** in a newly opened window.
|
||||
- Now for **login as:**, type `root` and press enter.
|
||||
- It should then ask for a password. Type the `root password` you have received in your e-mail address, then press Enter.
|
||||
|
||||
If you are running your droplet for the first time, it will most likely ask you to change your root password. To do that, copy the **password you've received by e-mail** and paste it on PuTTY.
|
||||
|
||||
- To paste, just right-click the window (it won't show any changes on the screen), then press Enter.
|
||||
- Type a **new password** somewhere, copy and paste it on PuTTY. Press Enter then paste it again.
|
||||
|
||||
**Save the new password somewhere safe.**
|
||||
|
||||
After that, your droplet should be ready for use. [Follow the guide from the beginning](#linux-from-source) to set Nadeko up on your newly created VPS.
|
||||
|
||||
[Linux From Source]: #linux-from-source
|
||||
[Source Update Instructions]: #source-update-instructions
|
||||
[Linux Release]: #linux-release
|
||||
[Release Update Instructions]: #release-update-instructions
|
||||
[Tmux (Preferred Method)]: #tmux-preferred-method
|
||||
[Systemd]: #systemd
|
||||
[Systemd + Script]: #systemd-script
|
||||
[Setting up Nadeko on a VPS (Digital Ocean)]: #setting-up-nadeko-on-a-linux-vps-digital-ocean-droplet
|
||||
@@ -1,125 +0,0 @@
|
||||
## MacOS From Source
|
||||
|
||||
Open Terminal (if you don't know how to, click on the magnifying glass on the top right corner of your screen and type **Terminal** on the window that pops up) and navigate to the location where you want to install the bot (for example `cd ~`)
|
||||
|
||||
##### Installing Homebrew, wget and dotnet
|
||||
|
||||
###### Homebrew/wget
|
||||
*Skip this step if you already have homebrew installed*
|
||||
- Copy and paste this command, then press Enter:
|
||||
- `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
|
||||
- Install wget
|
||||
- `brew install wget`
|
||||
|
||||
###### Dotnet
|
||||
- Download [.net6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0)
|
||||
- Open the `.pkg` file you've downloaded and install it.
|
||||
- Run this command in Terminal. There might be output. If there is, disregard it. (copy-paste the entire block)
|
||||
```bash
|
||||
sudo mkdir /usr/local/bin
|
||||
|
||||
sudo mkdir /usr/local/lib
|
||||
```
|
||||
- Run this command in Terminal. There won't be any output. (copy-paste the entire block):
|
||||
```bash
|
||||
sudo ln -s /usr/local/share/dotnet/dotnet /usr/local/bin
|
||||
|
||||
sudo ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/
|
||||
|
||||
sudo ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/
|
||||
```
|
||||
|
||||
##### Installation Instructions
|
||||
|
||||
1. Download and run the **new** installer script `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
2. Install prerequisites (type `1` and press enter)
|
||||
3. Download the bot (type `2` and press enter)
|
||||
4. Exit the installer in order to set up your `creds.yml`
|
||||
5. Copy the creds.yml template
|
||||
`cp nadekobot/output/creds_example.yml nadekobot/output/creds.yml`
|
||||
6. Open `nadekobot/output/creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
7. [Enter your bot's token](#creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL`+`X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
8. Run the bot (type `3` and press enter)
|
||||
|
||||
##### Update Instructions
|
||||
|
||||
1. ⚠ Stop the bot
|
||||
2. Update and run the **new** installer script `cd ~ && wget -N https://gitlab.com/kwoth/nadeko-bash-installer/-/raw/v5/linuxAIO.sh && bash linuxAIO.sh`
|
||||
3. Update the bot (type `2` and press enter)
|
||||
4. Run the bot (type `3` and press enter)
|
||||
5. 🎉
|
||||
|
||||
## MacOS Manual Release installation instructions
|
||||
|
||||
⚠ IF YOU ARE FOLLOWING THE GUIDE ABOVE, IGNORE THIS SECTION ⚠
|
||||
|
||||
##### Installation Instructions
|
||||
|
||||
1. Download the latest release from <https://gitlab.com/kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
2. Untar it
|
||||
⚠ Make sure that you change X.XX.X to the same series of numbers as in step 1!
|
||||
- `tar xf X.XX.X-linux-x64-build.tar`
|
||||
3. Rename the `nadekobot-linux-x64` to `nadekobot`
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
4. Move into nadekobot directory and make NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
5. Copy the creds.yml template
|
||||
- `cp creds_example.yml creds.yml`
|
||||
6. Open `creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
8. [Enter your bot's token](#creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL`+`X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
9. Run the bot
|
||||
- `./NadekoBot`
|
||||
|
||||
##### Update Instructions
|
||||
|
||||
1. Stop the bot
|
||||
2. Download the latest release from <https://gitlab.com/kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
3. Untar it
|
||||
⚠ Make sure that you change X.XX.X to the same series of numbers as in step 2!
|
||||
- `tar xf 2.99.8-linux-x64-build.tar`
|
||||
4. Rename the old nadekobot directory to nadekobot-old (remove your old backup first if you have one, or back it up under a different name)
|
||||
- `rm -rf nadekobot-old 2>/dev/null`
|
||||
- `mv nadekobot nadekobot-old`
|
||||
5. Rename the new nadekobot directory to nadekobot
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
6. Remove old strings and aliases to avoid overwriting the updated versions of those files
|
||||
⚠ If you've modified said files, back them up instead
|
||||
- `rm nadekobot-old/data/aliases.yml`
|
||||
- `rm -r nadekobot-old/data/strings`
|
||||
7. Copy old data
|
||||
- `cp -RT nadekobot-old/data/ nadekobot/data/`
|
||||
8. Copy creds.yml
|
||||
- `cp nadekobot-old/creds.yml nadekobot/`
|
||||
9. Move into nadekobot directory and make the NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
10. Run the bot
|
||||
- `./NadekoBot`
|
||||
|
||||
🎉 Enjoy
|
||||
|
||||
##### Steps 3 - 9 as a single command
|
||||
|
||||
Don't forget to change X.XX.X to match step 2.
|
||||
```sh
|
||||
tar xf X.XX.X-linux-x64-build.tar && \
|
||||
rm -rf nadekobot-old 2>/dev/null && \
|
||||
mv nadekobot nadekobot-old && \
|
||||
mv nadekobot-linux-x64 nadekobot && \
|
||||
rm nadekobot-old/data/aliases.yml && \
|
||||
rm -r nadekobot-old/data/strings && \
|
||||
cp -RT nadekobot-old/data/ nadekobot/data/ && \
|
||||
cp nadekobot-old/creds.yml nadekobot/ && \
|
||||
cd nadekobot && chmod +x NadekoBot
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
## Setting Up NadekoBot on Windows With the Updater
|
||||
|
||||
| Table of Contents|
|
||||
| :-|
|
||||
| [Prerequisites](#prerequisites) |
|
||||
| [Setup](#setup) |
|
||||
| [Starting the Bot](#starting-the-bot) |
|
||||
| [Updating Nadeko](#updating-nadeko) |
|
||||
| [Manually Installing the Prerequisites from the Updater](#music-prerequisites) |
|
||||
|
||||
*Note: If you want to make changes to Nadeko's source code, please follow the [From Source](#windows-from-source) guide instead.*
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
- Windows 10 or later (64-bit)
|
||||
|
||||
**Optional**
|
||||
|
||||
- [Visual Studio Code](https://code.visualstudio.com/Download) (Highly suggested if you plan on editing files)
|
||||
- [Visual C++ 2010 (x86)] and [Visual C++ 2017 (x64)] (both are required if you want Nadeko to play music - restart Windows after installation)
|
||||
|
||||
#### Setup
|
||||
|
||||
- Download and run the [NadekoBot v3 Updater][Updater].
|
||||
- Click on the + at the top left to create a new bot.
|
||||

|
||||
- Give your bot a name and then click **`Go to setup`** at the lower right.
|
||||

|
||||
- Click on **`DOWNLOAD`** at the lower right
|
||||

|
||||
- If you want to use the music module, click on **`Install`** next to **`FFMPEG`** and **`Youtube-DLP`**.
|
||||
- If any dependencies fail to install, you can temporarily disable your Windows Defender/AV until you install them. If you don't want to, then read [the last section of this guide](#Manual-Prerequisite-Installation).
|
||||
- When installation is finished, click on **`CREDS`** to the left of **`RUN`** at the lower right.
|
||||
- Follow the guide on how to [Set up the creds.yml](../../creds-guide) file.
|
||||
|
||||
#### Starting the bot
|
||||
|
||||
- Either click on **`RUN`** button in the updater or run the bot via its desktop shortcut.
|
||||
|
||||
#### Updating Nadeko
|
||||
|
||||
- Make sure Nadeko is closed and not running
|
||||
(Run `.die` in a connected server to ensure it's not running).
|
||||
- Open NadekoBot Updater
|
||||
- Click on your bot at the upper left (looks like a spy).
|
||||
- Click on **`Check for updates`**.
|
||||
- If updates are available, you will be able to click on the Update button.
|
||||
- Launch the bot
|
||||
- You've updated and are running again, easy as that!
|
||||
|
||||
|
||||
#### Music prerequisites
|
||||
In order to use music commands, you need ffmpeg and yt-dlp installed.
|
||||
- [ffmpeg-32bit] | [ffmpeg-64bit] - Download the **appropriate version** for your system (32 bit if you're running a 32 bit OS, or 64 if you're running a 64bit OS). Unzip it, and move `ffmpeg.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `ffmpeg.exe` file to `NadekoBot/output`.
|
||||
- [youtube-dlp] - Click to download the `yt-dlp.exe` file, then move `yt-dlp.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `yt-dlp.exe` file to `NadekoBot/system`.
|
||||
|
||||
[Updater]: https://dl.nadeko.bot/v3/
|
||||
[Notepad++]: https://notepad-plus-plus.org/
|
||||
[.net]: https://dotnet.microsoft.com/download/dotnet/5.0
|
||||
[Redis]: https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi
|
||||
[Visual C++ 2010 (x86)]: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
|
||||
[Visual C++ 2017 (x64)]: https://aka.ms/vs/15/release/vc_redist.x64.exe
|
||||
[ffmpeg-32bit]: https://cdn.nadeko.bot/dl/ffmpeg-32.zip
|
||||
[ffmpeg-64bit]: https://cdn.nadeko.bot/dl/ffmpeg-64.zip
|
||||
[youtube-dlp]: https://github.com/yt-dlp/yt-dlp/releases
|
||||
@@ -1,77 +0,0 @@
|
||||
## Setting Up NadekoBot on Windows from source
|
||||
|
||||
1. Prerequisites
|
||||
|
||||
- Windows 10 or later (64-bit)
|
||||
- [.net 8 sdk](https://dotnet.microsoft.com/download/dotnet/8.0)
|
||||
- If you want nadeko to play music: [Visual C++ 2010 (x86)] and [Visual C++ 2017 (x64)] (both are required, you may install them later)
|
||||
- [git](https://git-scm.com/downloads) - needed to clone the repository (you can also download the zip manually and extract it, but this guide assumes you're using git)
|
||||
- **Optional** Any code editor, for example [Visual Studio Code](https://code.visualstudio.com/Download)
|
||||
- You'll need to at least modify creds.yml, notepad is inadequate
|
||||
|
||||
|
||||
##### Installation Instructions
|
||||
|
||||
Open PowerShell (press windows button on your keyboard and type powershell, it should show up; alternatively, right click the start menu and select Windows PowerShell), and
|
||||
|
||||
|
||||
0. Navigate to the location where you want to install the bot
|
||||
- for example, type `cd ~/Desktop/` and press enter
|
||||
1. `git clone https://gitlab.com/kwoth/nadekobot -b v5 --depth 1`
|
||||
2. `cd nadekobot`
|
||||
3. `dotnet publish -c Release -o output/ src/NadekoBot/`
|
||||
4. `cd output`
|
||||
5. `cp creds_example.yml creds.yml`
|
||||
6. "You're done installing, you may now proceed to set up your bot's credentials by following the [#creds-guide]
|
||||
- Once done, come back here and run the last command
|
||||
8. Run the bot `dotnet NadekoBot.dll`
|
||||
9. 🎉 Enjoy
|
||||
|
||||
##### Update Instructions
|
||||
|
||||
Open PowerShell as described above and run the following commands:
|
||||
|
||||
1. Stop the bot
|
||||
- ⚠️ Make sure you don't have your database, credentials or any other nadekobot folder open in some application, this might prevent some of the steps from executing succesfully
|
||||
2. Navigate to your bot's folder, example:
|
||||
- `cd ~/Desktop/nadekobot`
|
||||
3. Pull the new version, and make sure you're on the v5 branch
|
||||
- *⚠️ If you're on v4, you must run these commands, if not, you may skip them.*
|
||||
- `git remote set-branches origin '*'`
|
||||
- `git fetch -v --depth=1`
|
||||
- `git checkout v5`
|
||||
- `git pull`
|
||||
- ⚠️ If this fails, you may want to stash or remove your code changes if you don't know how to resolve merge conflicts
|
||||
4. **Backup** old output in case your data is overwritten
|
||||
- `cp -r -fo output/ output-old`
|
||||
5. Build the bot again
|
||||
- `dotnet publish -c Release -o output/ src/NadekoBot/`
|
||||
6. Remove old strings and aliases to avoid overwriting the updated versions of those files
|
||||
- ⚠ If you've modified said files, back them up instead
|
||||
- `rm output-old/data/aliases.yml`
|
||||
- `rm -r output-old/data/strings`
|
||||
7. Copy old data, and new strings
|
||||
- `cp -Recurse -Force .\output-old\data\ .\output\`
|
||||
- `cp -Recurse -Force src/NadekoBot/data/strings/ output/data/`
|
||||
8. Copy creds.yml
|
||||
- `cp output-old/creds.yml output/`
|
||||
9. Run the bot
|
||||
- `cd output`
|
||||
- `dotnet NadekoBot.dll`
|
||||
|
||||
🎉 Enjoy
|
||||
|
||||
#### Music prerequisites
|
||||
In order to use music commands, you need ffmpeg and yt-dlp installed.
|
||||
- [ffmpeg-32bit] | [ffmpeg-64bit] - Download the **appropriate version** for your system (32 bit if you're running a 32 bit OS, or 64 if you're running a 64bit OS). Unzip it, and move `ffmpeg.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `ffmpeg.exe` file to `NadekoBot/output`.
|
||||
- [youtube-dlp] - Click to download the `yt-dlp.exe` file, then move `yt-dlp.exe` to a path that's in your PATH environment variable. If you don't know what that is, just move the `yt-dlp.exe` file to `NadekoBot/system`.
|
||||
|
||||
[Updater]: https://dl.nadeko.bot/v3/
|
||||
[Notepad++]: https://notepad-plus-plus.org/
|
||||
[.net]: https://dotnet.microsoft.com/download/dotnet/8.0
|
||||
[Redis]: https://github.com/MicrosoftArchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.msi
|
||||
[Visual C++ 2010 (x86)]: https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe
|
||||
[Visual C++ 2017 (x64)]: https://aka.ms/vs/15/release/vc_redist.x64.exe
|
||||
[ffmpeg-32bit]: https://cdn.nadeko.bot/dl/ffmpeg-32.zip
|
||||
[ffmpeg-64bit]: https://cdn.nadeko.bot/dl/ffmpeg-64.zip
|
||||
[youtube-dlp]: https://github.com/yt-dlp/yt-dlp/releases
|
||||
+407
@@ -0,0 +1,407 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<title>The NadekoBot docs have moved</title>
|
||||
<meta name="description" content="The NadekoBot docs are now at docs.nadeko.bot. NadeKloud hosts your own NadekoBot for you.">
|
||||
<link rel="canonical" href="https://docs.nadeko.bot/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="The NadekoBot docs have moved">
|
||||
<meta property="og:description" content="The current NadekoBot docs are at docs.nadeko.bot.">
|
||||
<meta property="og:url" content="https://docs.nadeko.bot/">
|
||||
<meta name="theme-color" content="#edebf0" media="(prefers-color-scheme: light)">
|
||||
<meta name="theme-color" content="#0a0810" media="(prefers-color-scheme: dark)">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='s' x1='5' y1='-3' x2='27' y2='35' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23e0457e'/%3E%3Cstop offset='1' stop-color='%23a8124c'/%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M0 0H32V24.96L24.96 32H0Z' fill='url(%23s)'/%3E%3Cg transform='translate(16 16) scale(1.3) translate(-12 -12)' fill='%23fff' fill-opacity='.55' stroke='%23fff' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z'/%3E%3Cpath transform='rotate(72 12 12)' d='M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z'/%3E%3Cpath transform='rotate(144 12 12)' d='M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z'/%3E%3Cpath transform='rotate(216 12 12)' d='M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z'/%3E%3Cpath transform='rotate(288 12 12)' d='M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z'/%3E%3Ccircle cx='12' cy='12' r='1.4' fill-opacity='1' stroke='none'/%3E%3C/g%3E%3C/svg%3E">
|
||||
<style>
|
||||
/* NadeKloud's two palettes: light "washi" and dark "ink", picked from the OS setting. */
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
--bg: light-dark(#edebf0, #0a0810);
|
||||
--bg-2: light-dark(#e2dfe4, #100c18);
|
||||
--text: light-dark(#1a1420, #f5efe7);
|
||||
--text-2: light-dark(#2f2735, #e6dfea);
|
||||
--text-subtle: light-dark(#5a5064, #d2cadb);
|
||||
--text-quiet: light-dark(#665c71, #c2b9cf);
|
||||
--accent: light-dark(#e0568a, #ff7eab);
|
||||
--accent-strong: light-dark(#a8265f, #ffb0cc);
|
||||
--kicker: light-dark(#c4245f, #e8508a);
|
||||
--ornament: light-dark(#9a7420, #e6c07a);
|
||||
--sakura: #ffb7c5;
|
||||
--seal: #e0457e;
|
||||
--seal-stop: #a8124c;
|
||||
--edge: light-dark(rgba(35, 25, 45, 0.16), rgba(255, 255, 255, 0.13));
|
||||
--edge-strong: light-dark(rgba(35, 25, 45, 0.34), rgba(255, 255, 255, 0.26));
|
||||
--edge-strong-hover: light-dark(rgba(35, 25, 45, 0.5), rgba(255, 255, 255, 0.42));
|
||||
--hairline: light-dark(rgba(35, 25, 45, 0.1), rgba(255, 255, 255, 0.09));
|
||||
--panel-bg: linear-gradient(158deg,
|
||||
light-dark(rgba(255, 255, 255, 0.96), rgba(28, 22, 38, 0.94)),
|
||||
light-dark(rgba(246, 244, 249, 0.96), rgba(15, 12, 21, 0.96)));
|
||||
--surface: light-dark(#ffffff, #16111f);
|
||||
--surface-quiet: light-dark(#f8f6fa, #1d1727);
|
||||
--sweep-a: #a3175a;
|
||||
--sweep-b: #c42a66;
|
||||
--on-fill: #ffffff;
|
||||
--focus-ring: light-dark(#c2306f, #ffb7c5);
|
||||
--glow-1: light-dark(rgba(255, 120, 155, 0.22), rgba(255, 60, 110, 0.2));
|
||||
--glow-2: light-dark(rgba(150, 130, 255, 0.14), rgba(120, 90, 255, 0.14));
|
||||
--shadow-raised:
|
||||
0 1px 2px light-dark(rgba(60, 40, 50, 0.06), rgba(0, 0, 0, 0.4)),
|
||||
0 8px 24px light-dark(rgba(60, 40, 50, 0.08), rgba(0, 0, 0, 0.45));
|
||||
--text-shadow-brand:
|
||||
0 -1px 0 light-dark(rgba(0, 0, 0, 0.16), rgba(0, 0, 0, 0.5)),
|
||||
0 1px 0 light-dark(rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0.06));
|
||||
--notch: 1.125rem;
|
||||
--notch-sm: 0.6875rem;
|
||||
--clip-notch: polygon(0 0, calc(100% - var(--notch)) 0, 100% var(--notch), 100% 100%, var(--notch) 100%, 0 calc(100% - var(--notch)));
|
||||
--clip-notch-inner: polygon(0 0, calc(100% - var(--notch) + 1px) 0, 100% calc(var(--notch) - 1px), 100% 100%, calc(var(--notch) - 1px) 100%, 0 calc(100% - var(--notch) + 1px));
|
||||
--clip-notch-sm: polygon(0 0, calc(100% - var(--notch-sm)) 0, 100% var(--notch-sm), 100% 100%, var(--notch-sm) 100%, 0 calc(100% - var(--notch-sm)));
|
||||
--clip-notch-sm-inner: polygon(0 0, calc(100% - var(--notch-sm) + 1px) 0, 100% calc(var(--notch-sm) - 1px), 100% 100%, calc(var(--notch-sm) - 1px) 100%, 0 calc(100% - var(--notch-sm) + 1px));
|
||||
--ease: cubic-bezier(0.2, 0, 0.38, 0.9);
|
||||
--font-body: 'Zen Kaku Gothic New', 'Hiragino Sans', 'Yu Gothic', 'Noto Sans JP', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
|
||||
--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace;
|
||||
}
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
html { background: var(--bg); }
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
min-height: 100dvh;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
padding: 3rem 1.25rem;
|
||||
color: var(--text);
|
||||
font-family: var(--font-body);
|
||||
font-weight: 500;
|
||||
font-size: 1rem;
|
||||
line-height: 1.5rem;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
h1, h2, p, ul { margin: 0; }
|
||||
::selection { background: #c4245f; color: #fff; }
|
||||
:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
|
||||
|
||||
/* Decoration behind the page: the uroko scale pattern, film grain and a few sakura petals. */
|
||||
.backdrop {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: -1;
|
||||
pointer-events: none;
|
||||
overflow: hidden;
|
||||
background:
|
||||
radial-gradient(1000px 700px at 78% -8%, var(--glow-1), transparent 62%),
|
||||
radial-gradient(900px 800px at 4% 108%, var(--glow-2), transparent 60%),
|
||||
linear-gradient(180deg, var(--bg) 0%, var(--bg-2) 55%, var(--bg) 100%);
|
||||
}
|
||||
.backdrop::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
opacity: 0.5;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='46' height='40' viewBox='0 0 46 40'%3E%3Cpath d='M23 40 L0 8 L46 8 Z' fill='none' stroke='%23808080' stroke-opacity='.10' stroke-width='1'/%3E%3C/svg%3E") 0 0 / 46px 40px;
|
||||
-webkit-mask-image: radial-gradient(120% 90% at 50% 0%, #000 20%, transparent 78%);
|
||||
mask-image: radial-gradient(120% 90% at 50% 0%, #000 20%, transparent 78%);
|
||||
}
|
||||
.backdrop::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
opacity: 0.05;
|
||||
mix-blend-mode: overlay;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
|
||||
}
|
||||
.petal {
|
||||
position: absolute;
|
||||
top: -2rem;
|
||||
left: var(--x);
|
||||
width: var(--s, 12px);
|
||||
height: var(--s, 12px);
|
||||
border-radius: 150% 0 150% 0;
|
||||
background: var(--sakura);
|
||||
opacity: 0.55;
|
||||
animation: fall var(--d, 22s) linear var(--delay, 0s) infinite, sway 5.5s cubic-bezier(0.42, 0, 0.58, 1) infinite alternate;
|
||||
}
|
||||
.petal:nth-child(1) { --x: 8%; --s: 11px; --d: 24s; --delay: -3s; }
|
||||
.petal:nth-child(2) { --x: 22%; --s: 8px; --d: 19s; --delay: -11s; }
|
||||
.petal:nth-child(3) { --x: 37%; --s: 13px; --d: 27s; --delay: -18s; }
|
||||
.petal:nth-child(4) { --x: 55%; --s: 9px; --d: 21s; --delay: -6s; }
|
||||
.petal:nth-child(5) { --x: 68%; --s: 12px; --d: 25s; --delay: -14s; }
|
||||
.petal:nth-child(6) { --x: 81%; --s: 7px; --d: 18s; --delay: -9s; }
|
||||
.petal:nth-child(7) { --x: 93%; --s: 10px; --d: 23s; --delay: -20s; }
|
||||
@keyframes fall { to { top: 105%; rotate: 540deg; } }
|
||||
@keyframes sway { from { translate: -18px 0; } to { translate: 18px 0; } }
|
||||
@media (prefers-reduced-motion: reduce) { .petal { display: none; } }
|
||||
|
||||
main {
|
||||
width: 100%;
|
||||
max-width: 38rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
/* The brand line: the seal and the two-tone wordmark. */
|
||||
.brand { display: flex; align-items: center; gap: 0.75rem; padding-inline: 0.25rem; }
|
||||
.seal { width: 2.25rem; height: 2.25rem; flex: none; filter: drop-shadow(0 4px 10px light-dark(rgba(168, 18, 76, 0.25), rgba(0, 0, 0, 0.5))); }
|
||||
.wordmark { font-size: 1.25rem; line-height: 1.75rem; font-weight: 900; letter-spacing: 0.02em; }
|
||||
.ink { color: var(--text); text-shadow: var(--text-shadow-brand); }
|
||||
.pink { color: var(--accent); text-shadow: var(--text-shadow-brand); }
|
||||
.brand-sep { width: 1px; align-self: stretch; margin-block: 0.25rem; background: var(--edge); }
|
||||
.brand-note {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-quiet);
|
||||
}
|
||||
|
||||
/* Notched glass panels: a 1px frame cut at two corners, filled with the panel gradient. */
|
||||
.card {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.25rem;
|
||||
padding: 2.25rem 2rem 2rem;
|
||||
filter: drop-shadow(0 8px 24px light-dark(rgba(60, 40, 50, 0.08), rgba(0, 0, 0, 0.45)));
|
||||
}
|
||||
.card::before, .card::after { content: ''; position: absolute; z-index: -1; pointer-events: none; }
|
||||
.card::before { inset: 0; background: var(--edge); clip-path: var(--clip-notch); transition: background-color 240ms var(--ease); }
|
||||
.card::after { inset: 1px; background: var(--panel-bg); clip-path: var(--clip-notch-inner); }
|
||||
.card:hover::before { background: var(--edge-strong); }
|
||||
|
||||
.eyebrow {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-quiet);
|
||||
}
|
||||
.eyebrow::after { content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, var(--edge), transparent); }
|
||||
.eyebrow-mark { width: 0.5rem; height: 0.5rem; flex: none; background: var(--ornament); rotate: 45deg; }
|
||||
|
||||
h1 {
|
||||
font-size: clamp(1.75rem, 1.2rem + 2.2vw, 2.625rem);
|
||||
line-height: 1.08;
|
||||
font-weight: 900;
|
||||
letter-spacing: 0.02em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text);
|
||||
text-wrap: balance;
|
||||
}
|
||||
h1 .pink { text-shadow: none; }
|
||||
.lede { font-size: 1.0625rem; line-height: 1.625rem; color: var(--text-subtle); max-width: 34rem; text-wrap: pretty; }
|
||||
|
||||
.actions { display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem 1.25rem; }
|
||||
.address {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8125rem;
|
||||
line-height: 1rem;
|
||||
letter-spacing: 0.04em;
|
||||
color: var(--accent-strong);
|
||||
}
|
||||
|
||||
/* Buttons: a notched frame and a fill; the accent sweep fills from the left on hover. */
|
||||
.btn {
|
||||
--btn-edge: var(--edge-strong);
|
||||
--btn-fill: var(--surface);
|
||||
--btn-text: var(--text-2);
|
||||
--sweep: 0%;
|
||||
--sweep-a-now: rgba(35, 25, 45, 0);
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.625rem;
|
||||
min-height: 3rem;
|
||||
padding: 0 1.5rem;
|
||||
color: var(--btn-text);
|
||||
font-weight: 900;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1rem;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
transition: color 240ms var(--ease), transform 150ms var(--ease), filter 240ms var(--ease);
|
||||
}
|
||||
.btn::before, .btn::after { content: ''; position: absolute; z-index: -1; pointer-events: none; }
|
||||
.btn::before { inset: 0; background: var(--btn-edge); clip-path: var(--clip-notch-sm); transition: background-color 240ms var(--ease); }
|
||||
.btn::after {
|
||||
inset: 1px;
|
||||
clip-path: var(--clip-notch-sm-inner);
|
||||
background: linear-gradient(100deg, var(--sweep-a), var(--sweep-b)) no-repeat 0 0 / var(--sweep) 100%, var(--btn-fill);
|
||||
transition: background-size 420ms cubic-bezier(0.2, 0.9, 0.25, 1);
|
||||
}
|
||||
.btn:is(:hover, :focus-visible) { --sweep: 100%; --btn-edge: var(--sweep-b); color: var(--on-fill); }
|
||||
.btn:hover { transform: translateY(-2px); filter: drop-shadow(0 10px 14px rgba(196, 42, 102, 0.35)); }
|
||||
.btn:active { transform: translateY(0) scale(0.985); filter: none; }
|
||||
.btn-primary { --sweep: 100%; --btn-edge: var(--sweep-b); --btn-text: var(--on-fill); }
|
||||
.btn-primary:hover { --btn-edge: light-dark(#7a0f42, #ff9fc0); }
|
||||
.btn svg { width: 1.125rem; height: 1.125rem; flex: none; transition: translate 240ms var(--ease); }
|
||||
.btn:hover svg { translate: 3px 0; }
|
||||
|
||||
/* The NadeKloud panel. */
|
||||
.card-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
margin: -1.75rem -2rem 0;
|
||||
padding: 1rem 2rem;
|
||||
border-bottom: 1px solid var(--hairline);
|
||||
}
|
||||
.card-kicker { width: 1.5rem; height: 1.5rem; flex: none; color: var(--kicker); }
|
||||
.card-title {
|
||||
font-size: 0.9375rem;
|
||||
line-height: 1.375rem;
|
||||
font-weight: 900;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.card-aside {
|
||||
margin-inline-start: auto;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-quiet);
|
||||
}
|
||||
.hosted { padding-top: 1.75rem; }
|
||||
.hosted p { color: var(--text-subtle); text-wrap: pretty; }
|
||||
.hosted strong { color: var(--text); font-weight: 700; }
|
||||
|
||||
/* Small links: notched mono tags. */
|
||||
nav { display: flex; flex-direction: column; gap: 0.75rem; padding: 0.5rem 0.25rem 0; }
|
||||
nav h2 {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.75rem;
|
||||
line-height: 1rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
text-transform: uppercase;
|
||||
color: var(--text-quiet);
|
||||
}
|
||||
nav ul { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
|
||||
.tag {
|
||||
position: relative;
|
||||
isolation: isolate;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
min-height: 2.25rem;
|
||||
padding: 0 0.875rem;
|
||||
color: var(--text-2);
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.8125rem;
|
||||
line-height: 1rem;
|
||||
letter-spacing: 0.02em;
|
||||
text-decoration: none;
|
||||
transition: color 150ms var(--ease);
|
||||
}
|
||||
.tag::before, .tag::after { content: ''; position: absolute; z-index: -1; pointer-events: none; }
|
||||
.tag::before { inset: 0; background: var(--edge); clip-path: polygon(0 0, calc(100% - 0.4375rem) 0, 100% 0.4375rem, 100% 100%, 0.4375rem 100%, 0 calc(100% - 0.4375rem)); transition: background-color 150ms var(--ease); }
|
||||
.tag::after { inset: 1px; background: var(--surface-quiet); clip-path: polygon(0 0, calc(100% - 0.4375rem + 1px) 0, 100% calc(0.4375rem - 1px), 100% 100%, calc(0.4375rem - 1px) 100%, 0 calc(100% - 0.4375rem + 1px)); }
|
||||
.tag:is(:hover, :focus-visible) { color: var(--accent-strong); }
|
||||
.tag:is(:hover, :focus-visible)::before { background: var(--accent); }
|
||||
.tag svg { width: 0.875rem; height: 0.875rem; flex: none; color: var(--kicker); }
|
||||
|
||||
@media (max-width: 30rem) {
|
||||
body { padding: 1.5rem 0.875rem; place-items: start center; }
|
||||
.card { padding: 1.75rem 1.25rem 1.5rem; }
|
||||
.card-head { margin: -1.25rem -1.25rem 0; padding: 0.875rem 1.25rem; }
|
||||
.hosted { padding-top: 1.25rem; }
|
||||
.card-aside { display: none; }
|
||||
.actions .btn { width: 100%; }
|
||||
.tag { min-height: 2.75rem; }
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.btn, .btn::after, .btn svg, .card::before { transition: none; }
|
||||
.btn:hover { transform: none; }
|
||||
.btn:hover svg { translate: none; }
|
||||
}
|
||||
@media (forced-colors: active) {
|
||||
.card, .btn, .tag { border: 1px solid CanvasText; }
|
||||
.card::before, .card::after, .btn::before, .btn::after, .tag::before, .tag::after { display: none; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="backdrop" aria-hidden="true">
|
||||
<span class="petal"></span><span class="petal"></span><span class="petal"></span><span class="petal"></span><span class="petal"></span><span class="petal"></span><span class="petal"></span>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<div class="brand">
|
||||
<svg class="seal" viewBox="0 0 32 32" aria-hidden="true">
|
||||
<defs>
|
||||
<linearGradient id="seal-fill" x1="5" y1="-3" x2="27" y2="35" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#e0457e"/>
|
||||
<stop offset="1" stop-color="#a8124c"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M0 0H32V24.96L24.96 32H0Z" fill="url(#seal-fill)"/>
|
||||
<g transform="translate(16 16) scale(1.3) translate(-12 -12)" fill="#fff" fill-opacity=".55" stroke="#fff" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z"/>
|
||||
<path transform="rotate(72 12 12)" d="M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z"/>
|
||||
<path transform="rotate(144 12 12)" d="M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z"/>
|
||||
<path transform="rotate(216 12 12)" d="M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z"/>
|
||||
<path transform="rotate(288 12 12)" d="M12 11.6L10 6.4L10.7 5.2L11.4 6L12 4.8L12.6 6L13.3 5.2L14 6.4Z"/>
|
||||
<circle cx="12" cy="12" r="1.4" fill-opacity="1" stroke="none"/>
|
||||
</g>
|
||||
</svg>
|
||||
<span class="wordmark"><span class="ink">Nadeko</span><span class="pink">Bot</span></span>
|
||||
<span class="brand-sep" aria-hidden="true"></span>
|
||||
<span class="brand-note">Docs</span>
|
||||
</div>
|
||||
|
||||
<section class="card" aria-labelledby="title">
|
||||
<p class="eyebrow"><span class="eyebrow-mark" aria-hidden="true"></span>NadekoBot v5 docs</p>
|
||||
<h1 id="title">The docs have <span class="pink">moved</span></h1>
|
||||
<p class="lede">The old NadekoBot v5 docs are no longer online. The current docs have all the guides.</p>
|
||||
<div class="actions">
|
||||
<a class="btn btn-primary" href="https://docs.nadeko.bot/">
|
||||
Open the current docs
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
|
||||
</a>
|
||||
<span class="address">docs.nadeko.bot</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="card hosted" aria-labelledby="hosted-title">
|
||||
<div class="card-head">
|
||||
<svg class="card-kicker" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M7 18.5h10.5a4 4 0 0 0 .6-7.96A6 6 0 0 0 6.6 9.1 4.75 4.75 0 0 0 7 18.5Z" fill="currentColor" fill-opacity=".2"/>
|
||||
</svg>
|
||||
<h2 class="card-title" id="hosted-title"><span class="ink">nade</span><span class="pink">kloud</span></h2>
|
||||
<span class="card-aside">Hosted NadekoBot</span>
|
||||
</div>
|
||||
<p>Want your own bot without the setup? <strong>NadeKloud</strong> runs your NadekoBot for you. You do not install anything or edit config files.</p>
|
||||
<div class="actions">
|
||||
<a class="btn" href="https://cloud.nadeko.bot/">
|
||||
Try NadeKloud
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<nav aria-labelledby="links-title">
|
||||
<h2 id="links-title">Other links</h2>
|
||||
<ul>
|
||||
<li><a class="tag" href="https://nadeko.bot/commands"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 17l6-5-6-5M12 19h8"/></svg>Commands list</a></li>
|
||||
<li><a class="tag" href="https://invite.nadeko.bot/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg>Invite the public bot</a></li>
|
||||
<li><a class="tag" href="https://github.com/nadeko-bot/nadekobot"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M8 7l-5 5 5 5M16 7l5 5-5 5"/></svg>Source code</a></li>
|
||||
<li><a class="tag" href="https://discord.nadeko.bot/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 5h14v10H10l-5 4V5Z"/></svg>Support server</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,43 +0,0 @@
|
||||
# NadekoBot Documentation
|
||||
|
||||
<!-- ![img][header] -->
|
||||
|
||||
## Inviting Nadeko
|
||||
|
||||
There are two versions of Nadeko, a public bot and a self-hostable bot.
|
||||
|
||||
To invite public Nadeko to your server or to view its commands, click on the buttons below:
|
||||
|
||||
[:material-plus: Add Nadeko to your server][invite]{ .md-button .md-button--primary }
|
||||
[:material-format-list-text: View commands][commands]{ .md-button }
|
||||
|
||||
To self-host your own Nadeko, use the guides below:
|
||||
|
||||
- [:material-microsoft-windows: Windows guide][windows-guide]
|
||||
- [:material-linux: Linux guide][linux-guide]
|
||||
- [:material-apple: Mac OS guide][macos-guide]
|
||||
- [:material-microsoft-windows: Windows (from source) guide][windows-source-guide]
|
||||
|
||||
In case you need any help, join our [Discord server][discord-server] where we may provide support.
|
||||
|
||||
---
|
||||
|
||||
## About Nadeko
|
||||
|
||||
NadekoBot is an [open source project][gitlab]. Any issues with the bot may be filed [here][issues].
|
||||
|
||||
If you're unsure whether something is an issue, ask in our support server first.
|
||||
|
||||
[Donations are welcome][donate], and we rely on your contributions to help keep the project alive.
|
||||
|
||||
[invite]: https://invite.nadeko.bot/
|
||||
[commands]: https://nadeko.bot/commands/
|
||||
[windows-guide]: ./guides/windows-guide.md
|
||||
[windows-source-guide]: ./guides/windows-source-guide.md
|
||||
[linux-guide]: ./guides/linux-guide.md
|
||||
[macos-guide]: ./guides/osx-guide.md
|
||||
[from-source-guide]: ./guides/from-source.md
|
||||
[discord-server]: https://discord.nadeko.bot/
|
||||
[gitlab]: https://gitlab.com/kwoth/nadekobot
|
||||
[issues]: https://gitlab.com/kwoth/nadekobot/issues
|
||||
[donate]: ./donate.md
|
||||
@@ -1,235 +0,0 @@
|
||||
## Setting up your API keys
|
||||
|
||||
This part is completely optional, **however it's necessary for music and a few other features to work properly**.
|
||||
|
||||
- **GoogleAPIKey**
|
||||
- Required for Youtube Song Search, Playlist queuing, and a few more things.
|
||||
- Follow these steps on how to setup Google API keys:
|
||||
- Go to [Google Console][Google Console] and log in.
|
||||
- Create a new project (name does not matter).
|
||||
- Once the project is created, go into `Library`
|
||||
- Under the `YouTube APIs` section
|
||||
- Select `YouTube Data API v3`,
|
||||
- Click enable.
|
||||
- Search for `Custom Search API`
|
||||
- Select `Custom Search API`,
|
||||
- Click enable.
|
||||
- Open up the `Navigation menu` on the top right with the three lines.
|
||||
- select `APIs & Services`, then select `Credentials`,
|
||||
- Click `Create Credentials` button,
|
||||
- Click on `API Key`
|
||||
- A new window will appear with your `Google API key`
|
||||
*NOTE: You don't really need to click on `RESTRICT KEY`, just click on `CLOSE` when you are done.*
|
||||
- Copy the key.
|
||||
- Open up `creds.yml` and look for `GoogleAPIKey`, paste your API key after the `:`.
|
||||
- It should look like this:
|
||||
```yml
|
||||
GoogleApiKey: 'AIzaSyDSci1sdlWQOWNVj1vlXxxxxxbk0oWMEzM'
|
||||
```
|
||||
- **MashapeKey**
|
||||
- Required for Hearthstone cards.
|
||||
- Api key obtained on https://rapidapi.com (register -> go to MyApps -> Add New App -> Enter Name -> Application key)
|
||||
- Copy the key and paste it into `creds.yml`
|
||||
- **OsuApiKey**
|
||||
- Required for Osu commands
|
||||
- You can get this key [here](https://osu.ppy.sh/p/api).
|
||||
- **CleverbotApiKey**
|
||||
- Required if you want to use Cleverbot. It's currently a paid service.
|
||||
- You can get this key [here](http://www.cleverbot.com/api/).
|
||||
- **PatreonAccessToken**
|
||||
- For Patreon creators only.
|
||||
- **PatreonCampaignId**
|
||||
- For Patreon creators only. Id of your campaign.
|
||||
- **TwitchClientId and TwitchClientSecret**
|
||||
- Mandatory for following twitch streams with `.twitch` (or `.stadd` with twitch link)
|
||||
- Go to [apps page](https://dev.twitch.tv/console) on twitch and register your application.
|
||||
- You need 2FA enabled on twitch in order to create an application
|
||||
- You can set `http://localhost` as the OAuth Redirect URL (and press Add button)
|
||||
- Select `Chat Bot` from the Category dropdown
|
||||
- Once created, `click Manage`
|
||||
- Click `New Secret` and select `OK` in the popup
|
||||
**Note: You will need to generate a new Client Secret everytime you exit the page**
|
||||
- Copy both to your creds.yml as shown below
|
||||
```yml
|
||||
twitchClientId: 516tr61tr1qweqwe86trg3g
|
||||
twitchClientSecret: 16tr61tr1q86tweqwe
|
||||
```
|
||||
- **LocationIqApiKey**
|
||||
- Optional. Used only for the `.time` command. https://locationiq.com api key (register and you will receive the token in the email).
|
||||
- **TimezoneDbApiKey**
|
||||
- Optional. Used only for the `.time` command. https://timezonedb.com api key (register and you will receive the token in the email **YOU HAVE TO ACTIVEATE IT AFTER YOU GET IT**).
|
||||
- **CoinmarketcapApiKey**
|
||||
- Optional. Used only for the `.crypto` command. You can use crypto command without it, but you might get ratelimited from time to time, as all self-hosters share the default api key. https://pro.coinmarketcap.com/
|
||||
|
||||
##### Additional Settings
|
||||
|
||||
- **TotalShards**
|
||||
- Required if the bot will be connected to more than 2500 servers.
|
||||
- Most likely unnecessary to change until your bot is added to more than 2500 servers.
|
||||
- **RedisOptions**
|
||||
- Required if the Redis instance is not on localhost or on non-default port.
|
||||
- You can find all available options [here](https://stackexchange.github.io/StackExchange.Redis/Configuration.html).
|
||||
- **RestartCommand**
|
||||
- Required if you want to be able to use the `.restart` command
|
||||
- If you're using the CLI installer or Linux/OSX, it's easier and more reliable setup Nadeko with auto-restart and just use `.die`
|
||||
|
||||
For Windows (Updater), add this to your `creds.yml`
|
||||
|
||||
```yml
|
||||
RestartCommand:
|
||||
Cmd: "NadekoBot.exe"
|
||||
args: "{0}"
|
||||
```
|
||||
|
||||
For Windows (Source), Linux or OSX, add this to your `creds.yml`
|
||||
|
||||
```yml
|
||||
RestartCommand:
|
||||
Cmd: dotnet
|
||||
Args: "NadekoBot.dll -- {0}"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### End Result
|
||||
|
||||
**This is an example of how the `creds.yml` looks like with multiple owners, the restart command (optional) and some of the API keys (also optional):**
|
||||
|
||||
```yml
|
||||
# DO NOT CHANGE
|
||||
version: 4
|
||||
# Bot token. Do not share with anyone ever -> https://discordapp.com/developers/applications/
|
||||
token: 'MTE5Nzc3MDIxMzE5NTc3NjEw.VlhNCw.BuqJFyzdIUAK1PRf1eK1Cu89Jew'
|
||||
# List of Ids of the users who have bot owner permissions
|
||||
# **DO NOT ADD PEOPLE YOU DON'T TRUST**
|
||||
ownerIds:
|
||||
- 105635123466156544
|
||||
- 145521851676884992
|
||||
- 341420590009417729
|
||||
# The number of shards that the bot will running on.
|
||||
# Leave at 1 if you don't know what you're doing.
|
||||
totalShards: 1
|
||||
# Login to https://console.cloud.google.com, create a new project, go to APIs & Services -> Library -> YouTube Data API and enable it.
|
||||
# Then, go to APIs and Services -> Credentials and click Create credentials -> API key.
|
||||
# Used only for Youtube Data Api (at the moment).
|
||||
googleApiKey: 'AIzaSyDScfdfdfi1sdlWQOWxxxxxbk0oWMEzM'
|
||||
# Settings for voting system for discordbots. Meant for use on global Nadeko.
|
||||
votes:
|
||||
url: ''
|
||||
key: ''
|
||||
# Patreon auto reward system settings.
|
||||
# go to https://www.patreon.com/portal -> my clients -> create client
|
||||
patreon:
|
||||
# Access token. You have to manually update this 1st of each month by refreshing the token on https://patreon.com/portal
|
||||
accessToken: ''
|
||||
# Unused atm
|
||||
refreshToken: ''
|
||||
# Unused atm
|
||||
clientSecret: ''
|
||||
# Campaign ID of your patreon page. Go to your patreon page (make sure you're logged in) and type "prompt('Campaign ID', window.patreon.bootstrap.creator.data.id);" in the console. (ctrl + shift + i)
|
||||
campaignId: ''
|
||||
# Api key for sending stats to DiscordBotList.
|
||||
botListToken: ''
|
||||
# Official cleverbot api key.
|
||||
cleverbotApiKey: ''
|
||||
# Redis connection string. Don't change if you don't know what you're doing.
|
||||
redisOptions: localhost:6379,syncTimeout=30000,responseTimeout=30000,allowAdmin=true,password=
|
||||
# Database options. Don't change if you don't know what you're doing. Leave null for default values
|
||||
db:
|
||||
# Database type. Only sqlite supported atm
|
||||
type: sqlite
|
||||
# Connection string. Will default to "Data Source=data/NadekoBot.db"
|
||||
connectionString: Data Source=data/NadekoBot.db
|
||||
# Address and port of the coordinator endpoint. Leave empty for default.
|
||||
# Change only if you've changed the coordinator address or port.
|
||||
coordinatorUrl: http://localhost:3442
|
||||
# Api key obtained on https://rapidapi.com (go to MyApps -> Add New App -> Enter Name -> Application key)
|
||||
rapidApiKey: 4UrKpcWXcxxxxxxxxxxxxxxp1Q8kI6jsn32xxxoVWiY7
|
||||
# https://locationiq.com api key (register and you will receive the token in the email).
|
||||
# Used only for .time command.
|
||||
locationIqApiKey:
|
||||
# https://timezonedb.com api key (register and you will receive the token in the email).
|
||||
# Used only for .time command
|
||||
timezoneDbApiKey:
|
||||
# https://pro.coinmarketcap.com/account/ api key. There is a free plan for personal use.
|
||||
# Used for cryptocurrency related commands.
|
||||
coinmarketcapApiKey:
|
||||
# Api key used for Osu related commands. Obtain this key at https://osu.ppy.sh/p/api
|
||||
osuApiKey: 4c8c8fdffdsfdsfsdfsfa33f3f3140a7d93320d6
|
||||
# Optional Trovo client id.
|
||||
# You should use this if Trovo stream notifications stopped working or you're getting ratelimit errors.
|
||||
trovoClientId:
|
||||
# Obtain by creating an application at https://dev.twitch.tv/console/apps
|
||||
twitchClientId: jf2w6kkyrlzfl6mp1b4k25h4jr6b2o
|
||||
# Obtain by creating an application at https://dev.twitch.tv/console/apps
|
||||
twitchClientSecret: 16tr61tr1q86tweqwe
|
||||
# Command and args which will be used to restart the bot.
|
||||
# Only used if bot is executed directly (NOT through the coordinator)
|
||||
# placeholders:
|
||||
# {0} -> shard id
|
||||
# {1} -> total shards
|
||||
# Linux default
|
||||
# cmd: dotnet
|
||||
# args: "NadekoBot.dll -- {0}"
|
||||
# Windows default
|
||||
# cmd: "NadekoBot.exe"
|
||||
# args: "{0}"
|
||||
restartCommand:
|
||||
cmd:
|
||||
args:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Database
|
||||
|
||||
Nadeko saves all settings and data in the database file `NadekoBot.db`, located in:
|
||||
|
||||
- Windows (Updater): `system/data` (can be easily accessed through the `Data` button on the updater)
|
||||
- Windows (Source), Linux and OSX: `nadekobot/output/data/NadekoBot.db`
|
||||
|
||||
In order to open it you will need [SQLite Browser](http://sqlitebrowser.org/).
|
||||
|
||||
*NOTE: You don't have to worry if you don't have the `NadekoBot.db` file, it gets automatically created once you successfully run the bot for the first time.*
|
||||
|
||||
**To make changes to the database on windows:**
|
||||
|
||||
- Shut your bot down.
|
||||
- Copy the `NadekoBot.db` file to someplace safe. (Back up)
|
||||
- Open it with SQLite Browser.
|
||||
- Go to the **Browse Data** tab.
|
||||
- Click on the **Table** drop-down list.
|
||||
- Choose the table you want to edit.
|
||||
- Click on the cell you want to edit.
|
||||
- Edit it on the right-hand side.
|
||||
- Click on **Apply**.
|
||||
- Click on **Write Changes**.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Sharding your bot
|
||||
|
||||
To run a sharded bot, you will want to run `src/NadekoBot.Coordinator` project.
|
||||
Shards communicate with the coordinator using gRPC
|
||||
To configure your Coordinator, you will need to edit the `src/NadekoBot.Coordinator/coord.yml` file
|
||||
|
||||
```yml
|
||||
# total number of shards
|
||||
TotalShards: 3
|
||||
# How often do shards ping their state back to the coordinator
|
||||
RecheckIntervalMs: 5000
|
||||
# Command to run the shard
|
||||
ShardStartCommand: dotnet
|
||||
# Arguments to run the shard
|
||||
# {0} = shard id
|
||||
# {1} = total number of shards
|
||||
ShardStartArgs: ../../output/NadekoBot.dll -- {0} {1}
|
||||
# How long does it take for the shard to be forcefully restarted once it stops reporting its state
|
||||
UnresponsiveSec: 30
|
||||
```
|
||||
|
||||
[Google Console]: https://console.developers.google.com
|
||||
[DiscordApp]: https://discordapp.com/developers/applications/me
|
||||
[Invite Guide]: https://tukimoop.pw/s/guide.html
|
||||
@@ -1,165 +0,0 @@
|
||||
# Creating A Medusa
|
||||
|
||||
## Getting started
|
||||
|
||||
This section will guide you through how to create a simple custom medusa. You can find the entirety of this code hosted [here](https://gitlab.com/nadeko/example_medusa)
|
||||
|
||||
#### Prerequisite
|
||||
- [.net8 sdk](https://dotnet.microsoft.com/en-us/download) installed
|
||||
- Optional: use [vscode](https://code.visualstudio.com/download) to write code
|
||||
|
||||
#### Guide
|
||||
|
||||
- Open your favorite terminal and navigate to a folder where you will keep your project .
|
||||
|
||||
- Create a new folder and move into it
|
||||
- `mkdir example_medusa `
|
||||
- `cd example_medusa`
|
||||
|
||||
- Install nadeko-medusa template
|
||||
- `dotnet new install nadeko-medusa`
|
||||
|
||||
- Make a new Nadeko Medusa project
|
||||
- `dotnet new nadeko-medusa`
|
||||
|
||||
### Build it
|
||||
|
||||
- Build your Medusa into a dll that Nadeko can load. In your terminal, type:
|
||||
- `dotnet publish -o bin/medusae/example_medusa /p:DebugType=embedded`
|
||||
|
||||
- Done. You can now try it out in action.
|
||||
|
||||
### Try it out
|
||||
|
||||
- Copy the `bin/medusae/example_medusa` folder into your NadekoBot's `data/medusae/` folder. (Nadeko version 4.1.0+)
|
||||
|
||||
- Load it with `.meload example_medusa`
|
||||
|
||||
- In the channel your bot can see, run the following commands to try it out
|
||||
- `.hello` and
|
||||
- `.hello @<someone>`
|
||||
|
||||
- Check its information with
|
||||
- `.meinfo example_medusa`
|
||||
|
||||
- Unload it
|
||||
- `.meunload example_medusa`
|
||||
|
||||
- :tada: Congrats! You've just made your first medusa! :tada:
|
||||
|
||||
|
||||
|
||||
## Theory
|
||||
|
||||
Medusa system allows you to write independent medusae (known as "modules", "cogs" or "plugins" in other software) which you can then load, unload and update at will without restarting the bot.
|
||||
|
||||
The system itself borrows some design from the current way Nadeko's Modules are written but mostly from never-released `Ayu.Commands` system which was designed to be used for a full Nadeko v3 rewrite.
|
||||
|
||||
The medusa base classes used for development are open source [here](https://gitlab.com/kwoth/nadekobot/-/tree/v5/src/Nadeko.Medusa) in case you need reference, as there is no generated documentation at the moment.
|
||||
|
||||
### Term list
|
||||
|
||||
#### Medusa
|
||||
|
||||
- The project itself which compiles to a single `.dll` (and some optional auxiliary files), it can contain multiple [Sneks](#snek), [Services](#service), and [ParamParsers](#param-parser)
|
||||
|
||||
#### Snek
|
||||
|
||||
- A class which will be added as a single Module to NadekoBot on load. It also acts as a [lifecycle handler](snek-lifecycle.md) and as a singleton service with the support for initialize and cleanup.
|
||||
- It can contain a Snek (called SubSnek) but only 1 level of nesting is supported (you can only have a snek contain a subsnek, but a subsnek can't contain any other sneks)
|
||||
- Sneks can have their own prefix
|
||||
- For example if you set this to 'test' then a command called 'cmd' will have to be invoked by using `.test cmd` instead of `.cmd`
|
||||
|
||||
#### Snek Command
|
||||
|
||||
- Acts as a normal command
|
||||
- Has context injected as a first argument which controls where the command can be executed
|
||||
- `AnyContext` the command can be executed in both DMs and Servers
|
||||
- `GuildContext` the command can only be executed in Servers
|
||||
- `DmContext` the command can only be executed in DMs
|
||||
- Support the usual features such as default values, leftover, params, etc.
|
||||
- It also supports dependency injection via `[inject]` attribute. These dependencies must come after the context and before any input parameters
|
||||
- Supports `ValueTask`, `Task`, `Task<T>` and `void` return types
|
||||
|
||||
#### Param Parser
|
||||
|
||||
- Allows custom parsing of command arguments into your own types.
|
||||
- Overriding existing parsers (for example for IGuildUser, etc...) can cause issues.
|
||||
|
||||
#### Service
|
||||
|
||||
- Usually not needed.
|
||||
- They are marked with a `[svc]` attribute, and offer a way to inject dependencies to different parts of your medusa.
|
||||
- Transient and Singleton lifetimes are supported.
|
||||
|
||||
### Localization
|
||||
|
||||
Response and command strings can be kept in one of three different places based on whether you plan to allow support for localization
|
||||
|
||||
option 1) `res.yml` and `cmds.yml`
|
||||
|
||||
If you don't plan on having your app localized, but you just *may* in the future, you should keep your strings in the `res.yml` and `cmds.yml` file the root folder of your project, and they will be automatically copied to the output whenever you build your medusa.
|
||||
|
||||
##### Example project folder structure:
|
||||
- uwu/
|
||||
- uwu.csproj
|
||||
- uwu.cs
|
||||
- res.yml
|
||||
- cmds.yml
|
||||
|
||||
##### Example output folder structure:
|
||||
- medusae/uwu/
|
||||
- uwu.dll
|
||||
- res.yml
|
||||
- cmds.yml
|
||||
|
||||
option 2) `strings` folder
|
||||
|
||||
If you plan on having your app localized (or want to allow your consumers to easily add languages themselves), you should keep your response strings in the `strings/res/en-us.yml` and your command strings in `strings/cmds/en-us.yml` file. This will be your base file, and from there you can make support for additional languages, for example `strings/res/ru-ru.yml` and `strings/cmds/ru-ru.yml`
|
||||
|
||||
##### Example project folder structure:
|
||||
- uwu/
|
||||
- uwu.csproj
|
||||
- uwu.cs
|
||||
- strings/
|
||||
- res/
|
||||
- en-us.yml
|
||||
- ru-ru.yml
|
||||
- cmds/
|
||||
- en-us.yml
|
||||
- ru-ru.yml
|
||||
|
||||
##### Example output folder structure:
|
||||
- medusae/uwu/
|
||||
- uwu.dll
|
||||
- strings/
|
||||
- res/
|
||||
- en-us.yml
|
||||
- ru-ru.yml
|
||||
- cmds/
|
||||
- en-us.yml
|
||||
- ru-ru.yml
|
||||
|
||||
option 3) In the code
|
||||
|
||||
If you don't want any auxiliary files, and you don't want to bother making new .yml files to keep your strings in, you can specify the command strings directly in the `[cmd]` attribute itself, and use non-localized methods for message sending in your commands.
|
||||
|
||||
If you update your response strings .yml file(s) while the medusa is loaded and running, running `.stringsreload` will reload the responses without the need to reload the medusa or restart the bot.
|
||||
|
||||
#### Bot medusa config file
|
||||
|
||||
- Medusa config is kept in `data/medusae/medusa.yml` file in NadekoBot installation folder
|
||||
- At the moment this config only keeps track of which medusae are currently loaded (they will also be always loaded at startup)
|
||||
- If a medusa is causing issues and you're unable to unload it, you can remove it from the `loaded:` list in this config file and restart the bot. It won't be loaded next time the bot is started up
|
||||
|
||||
#### Unloadability issues
|
||||
|
||||
To make sure your medusa can be properly unloaded/reloaded you must:
|
||||
|
||||
- Make sure that none of your types and objects are referenced by the Bot or Bot's services after the DisposeAsync is called on your Snek instances.
|
||||
|
||||
- Make sure that all of your commands execute quickly and don't have any long running tasks, as they will hold a reference to a type from your assembly
|
||||
|
||||
- If you are still having issues, you can always run `.meunload` followed by a bot restart, or if you want to find what is causing the medusa unloadability issues, you can check the [microsoft's assembly unloadability debugging guide](https://docs.microsoft.com/en-us/dotnet/standard/assembly/unloadability)
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
## Getting Started
|
||||
|
||||
### What is the Medusa system?
|
||||
|
||||
- It is a dynamic module/plugin/cog system for NadekoBot introduced in **NadekoBot 4.1.0**
|
||||
|
||||
- Allows developers to add custom functionality to Nadeko without modifying the original code
|
||||
|
||||
- Allows for those custom features to be updated during bot runtime (if properly written), without the need for bot restart.
|
||||
|
||||
- They are added to `data/medusae` folder and are loaded, unloaded and handled through discord commands.
|
||||
- `.meload` Loads the specified medusa (see `.h .meload`)
|
||||
- `.meunload` Unloads the specified medusa (see `.h .meunload`)
|
||||
- `.meinfo` Checks medusae information (see `.h .meinfo`)
|
||||
- `.melist` Lists the available medusae (see `.h .melist`)
|
||||
|
||||
### How to make one?
|
||||
|
||||
Medusae are written in [C#](https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/) programming language, so you will need at least low-intermediate knowledge of it in order to make a useful Medusa.
|
||||
|
||||
Follow the [creating a medusa guide](creating-a-medusa.md)
|
||||
|
||||
### Where to get medusae other people made?
|
||||
|
||||
⚠ *It is EXTREMELY, and I repeat **EXTREMELY** dangerous to run medusae of strangers or people you don't FULLY trust.* ⚠
|
||||
⚠ *It can not only lead to your bot being stolen, but it also puts your entire computer and personal files in jeopardy.* ⚠
|
||||
|
||||
**It is strongly recommended to run only the medusae you yourself wrote, and only on a hosted VPS or dedicated server which ONLY hosts your bot, to minimize the potential damage caused by bad actors.**
|
||||
|
||||
No easy way at the moment, except asking in the `#dev-and-modding` chat in [#NadekoLog server](https://discord.nadeko.bot)
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
# Snek Lifecycle
|
||||
|
||||
*You can override several methods to hook into command handler's lifecycle.
|
||||
These methods start with `Exec*`*
|
||||
|
||||
|
||||
- `ExecOnMessageAsync` runs first right after any message was received
|
||||
- `ExecInputTransformAsync` runs after ExecOnMessageAsync and allows you to transform the message content before the bot looks for the matching command
|
||||
- `ExecPreCommandAsync` runs after a command was found but not executed, allowing you to potentially prevent command execution
|
||||
- `ExecPostCommandAsync` runs if the command was successfully executed
|
||||
- `ExecOnNoCommandAsync` runs instead of ExecPostCommandAsync if no command was found for a message
|
||||
|
||||
|
||||
*Besides that, sneks have 2 methods with which you can initialize and cleanup your snek*
|
||||
|
||||
|
||||
- `InitializeAsync` Runs when the medusa which contains this snek is being loaded
|
||||
- `DisposeAsync` Runs when the medusa which contains this snek is being unloaded
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.0071 23.007L16.4231 9.41602H7.59106L12.0071 23.007Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.007 23.007L7.59101 9.41602H1.4021L12.007 23.007Z" fill="white" fill-opacity="0.66"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.40214 9.41602L0.0601964 13.5462C-0.0622036 13.9229 0.0718535 14.3356 0.39231 14.5684L12.007 23.007L1.40214 9.41602Z" fill="white" fill-opacity="0.33"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.4021 9.41592H7.59101L4.93124 1.23021C4.79444 0.80895 4.19856 0.809064 4.06176 1.23021L1.4021 9.41592Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.0071 23.007L16.4231 9.41602H22.612L12.0071 23.007Z" fill="white" fill-opacity="0.66"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.612 9.41602L23.9539 13.5462C24.0763 13.9229 23.9423 14.3356 23.6218 14.5684L12.0071 23.007L22.612 9.41602Z" fill="white" fill-opacity="0.33"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.612 9.41592H16.4231L19.0829 1.23021C19.2197 0.80895 19.8156 0.809064 19.9524 1.23021L22.612 9.41592Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,85 +0,0 @@
|
||||
# Permissions Overview
|
||||
|
||||
Have you ever felt confused or even overwhelmed when trying to set Nadeko's permissions? In this guide we will be explaining **how to use the permission commands correctly** and even **cover a few common questions**! Every command we discuss here can be found in the [Commands List].
|
||||
|
||||
## Why do we use the Permissions Commands?
|
||||
|
||||
Permissions are very handy at setting who can use what commands in a server. All commands and modules are enabled by default. If something is a bot owner only command, it can only be ran by the bot owner, the person who is running the bot, or has their ID in the [creds.yml](creds-guide.md) file.
|
||||
|
||||
Several commands still require that you have the correct permissions on Discord to be able to use them, so for users to be able to use commands like `.kick` and `.voicemute`, they need **Kick** and **Mute Members** server permissions, respectively.
|
||||
|
||||
With the permissions system it possible to restrict who can skip the current song.
|
||||
|
||||
## First Time Setup
|
||||
|
||||
To change permissions you **must** meet the following requirements:
|
||||
|
||||
**Have Administrator Server Permission.**
|
||||
|
||||
**If you are NOT the server owner or an admin, get the role set to `.permrole` (there is no permission role by default).**
|
||||
|
||||
## Basics & Hierarchy
|
||||
|
||||
The [Commands List] is a great tool which lists **all** available commands, however we'll go over a few of them here.
|
||||
|
||||
First, let's explain how the permissions system works - It's simple once you figure out how each command works!
|
||||
The permissions system works as a chain. Everytime a command is used, the permissions chain is checked. Starting from the top of it, the command is compared to a rule, if it isn't either allowed or disallowed by that rule it proceeds to check the next rule all the way till it reaches the bottom rule, which allows all commands.
|
||||
|
||||
To view this permissions chain, do `.lp`. The rule at the top of the chain takes priority over all rules below it.
|
||||
|
||||
If you want to remove a permission from the chain of permissions, do `.rp X` to remove rule number X and similarly, do `.mp X Y` to move rule number X to number Y (moving, not swapping!).
|
||||
|
||||
If you want the bot to notify users why they can't use a command or module, use `.verbose true` and Nadeko will tell you what rule is preventing the command from being used.
|
||||
|
||||
## Commonly Asked Questions
|
||||
|
||||
#### How do I restrict all commands to a single channel?
|
||||
|
||||
To allow users to only use commands in a specific text channel, follow these steps:
|
||||
|
||||
1. `.asm disable`
|
||||
- Disables all modules on the entire server
|
||||
2. `.acm enable #bot-spammerino`
|
||||
- Enables all modules in the #bot-spammerino channel
|
||||
|
||||
#### How do I allow only one module to be used in a specific channel?
|
||||
|
||||
To allow users to only use commands from a certain module, let's say **gambling**, in a specific text channel, follow these steps:
|
||||
|
||||
1. `.acm disable #gamblers-den`
|
||||
- Disables all modules in the #gamblers-den channel
|
||||
2. `.cm Gambling enable #gamblers-den`
|
||||
- Enables usage of the Gambling module in the #gamblers-den channel
|
||||
|
||||
#### How do I create a music DJ?
|
||||
|
||||
To allow users to only see the current song and have a DJ role for queuing follow these steps:
|
||||
|
||||
1. `.sm Music disable`
|
||||
- Disables music commands for everybody
|
||||
2. `.sc .nowplaying enable`
|
||||
- Enables the "nowplaying" command for everyone
|
||||
3. `.sc .listqueue enable`
|
||||
- Enables the "listqueue" command for everyone
|
||||
4. `.rm Music enable DJ`
|
||||
- Enables all music commands only for the DJ role
|
||||
|
||||
#### How do I disable Expressions from triggering?
|
||||
|
||||
If you don't want server or global Expressions, just block the module that controls their usage:
|
||||
|
||||
1. `.sm ActualExpressions disable`
|
||||
- Disables the ActualExpression module from being used
|
||||
|
||||
**Note**: The `Expressions` module controls the usage of Expressions. The `Expressions` module controls commands related to Expressions (such as `.acr`, `.lcr`, `.crca`, etc).
|
||||
|
||||
#### I've broken permissions and am stuck, can I reset permissions?
|
||||
|
||||
Yes, there is a way, in one easy command!
|
||||
|
||||
1. `.resetperms`
|
||||
- This resets the permission chain back to default
|
||||
|
||||
*-- Thanks to @applemac for providing the template for this guide*
|
||||
|
||||
[Commands List]: https://nadeko.bot/commands
|
||||
@@ -1,88 +0,0 @@
|
||||
# Placeholders
|
||||
|
||||
Placeholders are used in Quotes, Expressions, Greet/Bye messages, playing statuses, and a few other places.
|
||||
|
||||
They can be used to make the message more user friendly, generate random numbers or pictures, etc.
|
||||
|
||||
Some features have their own specific placeholders which are noted in that feature's command help. Some placeholders are not available in certain features because they don't make sense there.
|
||||
|
||||
## Usual placeholders
|
||||
|
||||
!!! Note
|
||||
If you're using placeholders in embeds, don't use %user.mention% and %bot.mention% in titles, footers and field names. They will not show properly.
|
||||
|
||||
### Bot placeholders
|
||||
|
||||
- `%bot.status%` - Bot's status (Online, Idle, DoNotDisturb, Invisible)
|
||||
- `%bot.latency%` - Bot latency
|
||||
- `%bot.name%` - Bot username
|
||||
- `%bot.mention%` - Bot mention (clickable)
|
||||
- `%bot.fullname%` - Bot username#discriminator
|
||||
- `%bot.time%` - Bot time (usually the time of the server it's hosted on)
|
||||
- `%bot.discrim%` - Bot's discriminator
|
||||
- `%bot.id%` - Bot's user ID
|
||||
- `%bot.avatar%` - Bot's avatar url
|
||||
|
||||
### Server placeholders
|
||||
|
||||
- `%server.id%` - Server ID
|
||||
- `%server.name%` - Server name
|
||||
- `%server.members%` - Member count
|
||||
- `%server.boosters%` - Number of users boosting the server
|
||||
- `%server.boost_level%` - Server Boost level
|
||||
- `%server.time%` - Server time (requires `.timezone` to be set)
|
||||
|
||||
### Channel placeholders
|
||||
|
||||
- `%channel.mention%` - Channel mention (clickable)
|
||||
- `%channel.name%` - Channel name
|
||||
- `%channel.id%` - Channel ID
|
||||
- `%channel.created%` - Channel creation date
|
||||
- `%channel.nsfw%` - Returns either `True` or `False`, depending on if the channel is designated as age-restricted in discord
|
||||
- `%channel.topic%` - Channel topic
|
||||
|
||||
### User placeholders
|
||||
|
||||
- `%user.mention%` - User mention
|
||||
- `%user.fullname%` - Username#discriminator
|
||||
- `%user.name%` - Username
|
||||
- `%user.discrim%` - Discriminator
|
||||
- `%user.avatar%` - User's avatar url
|
||||
- `%user.id%` - User ID
|
||||
- `%user.created_time%` - Account creation time (local time)
|
||||
- `%user.created_date%` - Account creation date
|
||||
- `%user.joined_time%` - Account join time (local time)
|
||||
- `%user.joined_date%` - Account join date
|
||||
|
||||
### Ban message placeholders
|
||||
|
||||
- `%ban.mod%` - Full name of the moderator who performed the ban
|
||||
- `%ban.mod.fullname%` - Full name of the moderator who performed the ban
|
||||
- `%ban.mod.mention%` - Moderator's mention
|
||||
- `%ban.mod.name%` - Name of the moderator - Admin
|
||||
- `%ban.mod.discrim%` - Discriminator of the moderator - 1234
|
||||
- `%ban.user%` - Full name of the banned user
|
||||
- `%ban.user.fullname%` - Full name of the banned user
|
||||
- `%ban.user.name%` - Name of the banned user
|
||||
- `%ban.user.discrim%` - Discriminator of the banned user
|
||||
- `%ban.reason%` - Reason for the ban, if provided
|
||||
- `%ban.duration%` - Duration of the ban in the form Days.Hours:Minutes (6.05:04)
|
||||
|
||||
### Shard stats placeholders
|
||||
|
||||
- `%shard.servercount%` - Server count on current shard
|
||||
- `%shard.usercount%` - Combined user count on current shard
|
||||
- `%shard.id%` - Shard ID
|
||||
|
||||
### Music placeholders
|
||||
|
||||
- `%music.queued%` - Number of songs currently queued
|
||||
- `%music.playing%` - Current song name (random playing song if bot is playing on multiple servers)
|
||||
- `%music.servers%` - Number of servers currently listening to music
|
||||
|
||||
### Miscellaneous placeholders
|
||||
|
||||
- `%rngX-Y%` - Returns a random number between X and Y
|
||||
- `%target%` - Returns anything the user has written after the trigger (only works on Expressions)
|
||||
|
||||

|
||||
@@ -1,122 +0,0 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700;1,900&display=swap');
|
||||
|
||||
/* general styling changes */
|
||||
|
||||
.md-typeset * {
|
||||
letter-spacing: 0 !important;
|
||||
}
|
||||
|
||||
.md-header__topic {
|
||||
font-family: 'Noto Sans';
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
|
||||
label[for="__toc"] {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 76.25em) {
|
||||
label[for="__drawer"] {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
.md-source__facts {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.md-source__fact {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 76.1875em) {
|
||||
label[for="__drawer"] {
|
||||
font-family: 'Noto Sans';
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.md-typeset h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: 600 !important;
|
||||
color: var(--md-default-fg-color);
|
||||
width: 87%;
|
||||
}
|
||||
|
||||
.md-header__title, .md-header__nav-title {
|
||||
margin-left: 8px !important;
|
||||
}
|
||||
|
||||
.md-search__form input {
|
||||
padding-left: 44px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.md-search__form .md-search__icon {
|
||||
display: flex;
|
||||
place-items: center;
|
||||
}
|
||||
|
||||
.md-search__form .md-search__icon svg {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.md-button {
|
||||
border-radius: 4px !important;
|
||||
}
|
||||
|
||||
.md-button:hover {
|
||||
filter: brightness(110%);
|
||||
}
|
||||
|
||||
.md-button:active {
|
||||
transform: translateY(1px);
|
||||
}
|
||||
|
||||
.md-button {
|
||||
display: inline-flex !important;
|
||||
place-items: center !important;
|
||||
font-weight: 500 !important;
|
||||
margin-right: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.md-button span {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.md-button span svg {
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
margin: 0px 8px;
|
||||
}
|
||||
|
||||
.color--primary {
|
||||
color: var(--md-primary-fg-color) !important;
|
||||
}
|
||||
|
||||
.color--accent {
|
||||
color: var(--md-accent-fg-color) !important;
|
||||
}
|
||||
|
||||
.md-header {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.md-main__inner {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
hr+h1, hr+h2, hr+h3, hr+h4, hr+h5, hr+h6 {
|
||||
margin-top: 0px !important;
|
||||
}
|
||||
|
||||
.md-sidebar {
|
||||
top: 0px !important;
|
||||
}
|
||||
|
||||
.admonition * {
|
||||
font-size: .75rem;
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
[data-md-color-scheme="dark"] {
|
||||
--md-default-fg-color: hsl(220, 10%, 100%);
|
||||
--md-default-fg-color--light: hsl(220, 10%, 87%);
|
||||
--md-default-fg-color--lighter: hsl(220, 10%, 54%);
|
||||
--md-default-fg-color--lightest: hsl(220, 10%, 32%);
|
||||
--md-default-bg-color: hsl(220, 10%, 20%);
|
||||
--md-default-bg-color--light: hsl(220, 10%, 16%);
|
||||
--md-default-bg-color--lighter: hsl(220, 10%, 12%);
|
||||
--md-default-bg-color--lightest: hsl(220, 10%, 8%);
|
||||
--md-code-fg-color: hsla(220, 10%, 86%, 1);
|
||||
--md-code-bg-color: hsla(220, 10%, 15%, 1);
|
||||
--md-code-hl-color: #448aff;
|
||||
--md-code-hl-number-color: #e6695b;
|
||||
--md-code-hl-special-color: #f06090;
|
||||
--md-code-hl-function-color: #c973d9;
|
||||
--md-code-hl-constant-color: #9383e2;
|
||||
--md-code-hl-keyword-color: #6791e0;
|
||||
--md-code-hl-string-color: #2fb170;
|
||||
--md-code-hl-name-color: var(--md-code-fg-color);
|
||||
--md-code-hl-operator-color: var(--md-default-fg-color--light);
|
||||
--md-code-hl-punctuation-color: var(--md-default-fg-color--light);
|
||||
--md-code-hl-comment-color: var(--md-default-fg-color--light);
|
||||
--md-code-hl-generic-color: var(--md-default-fg-color--light);
|
||||
--md-code-hl-variable-color: var(--md-default-fg-color--light);
|
||||
--md-typeset-color: var(--md-default-fg-color);
|
||||
--md-typeset-a-color: var(--md-primary-fg-color);
|
||||
--md-typeset-mark-color: #448aff;
|
||||
--md-typeset-kbd-color: hsla(220, 10%, 94%, 0.12);
|
||||
--md-typeset-kbd-accent-color: hsla(220, 10%, 94%, 0.2);
|
||||
--md-typeset-kbd-border-color: hsla(220, 10%, 14%, 1);
|
||||
--md-admonition-bg-color: hsla(220, 10%, 100%, 0.025);
|
||||
--md-footer-bg-color: hsl(220, 10%, 16%);
|
||||
--md-footer-bg-color--dark: hsl(220, 10%, 12%);
|
||||
}
|
||||
|
||||
[data-md-color-scheme="dark"] .md-typeset {
|
||||
color: var(--md-default-fg-color--light);
|
||||
}
|
||||
|
||||
[data-md-color-scheme="dark"][data-md-color-primary="black"], [data-md-color-scheme="dark"][data-md-color-primary="white"] {
|
||||
--md-typeset-a-color: var(--md-accent-fg-color);
|
||||
}
|
||||
|
||||
[data-md-color-scheme="dark"] .md-header {
|
||||
background: var(--md-default-bg-color--light);
|
||||
}
|
||||
|
||||
[data-md-color-scheme="dark"] .md-nav__item :not(.md-nav__link--active) {
|
||||
color: var(--md-default-fg-color--light);
|
||||
}
|
||||
|
||||
[data-md-color-scheme="dark"] .md-nav__item .md-nav__link:hover {
|
||||
color: var(--md-primary-fg-color);
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
mkdocs-material>=7.1.4
|
||||
mkdocs>=1.1.2
|
||||
mkdocs-git-revision-date-localized-plugin>=0.9.2
|
||||
mkdocs-material-extensions>=1.0.1
|
||||
-95
@@ -1,95 +0,0 @@
|
||||
site_name: 'NadekoBot'
|
||||
site_url: 'https://nadeko.bot'
|
||||
repo_url: 'https://gitlab.com/nadeko/nadekobot'
|
||||
site_author: 'Kwoth'
|
||||
|
||||
theme:
|
||||
name: material
|
||||
custom_dir: docs/overrides
|
||||
palette:
|
||||
- media: "(prefers-color-scheme: light)"
|
||||
scheme: default
|
||||
primary: blue
|
||||
accent: light blue
|
||||
toggle:
|
||||
icon: material/weather-sunny
|
||||
name: Switch to dark mode
|
||||
- media: "(prefers-color-scheme: dark)"
|
||||
scheme: dark
|
||||
primary: blue
|
||||
accent: light blue
|
||||
toggle:
|
||||
icon: material/weather-night
|
||||
name: Switch to light mode
|
||||
features:
|
||||
- navigation.instant
|
||||
- navigation.expand
|
||||
- navigation.top
|
||||
font:
|
||||
text: Source Sans Pro
|
||||
code: Source Code Pro
|
||||
logo: assets/favicon.png
|
||||
favicon: assets/favicon.png
|
||||
icon:
|
||||
repo: custom/gitlab
|
||||
|
||||
extra:
|
||||
homepage: https://nadeko.bot
|
||||
|
||||
extra_css:
|
||||
- stylesheets/styling-overrides.css
|
||||
- stylesheets/theme.css
|
||||
|
||||
plugins:
|
||||
- git-revision-date-localized:
|
||||
type: date
|
||||
- search
|
||||
|
||||
markdown_extensions:
|
||||
- attr_list
|
||||
- codehilite:
|
||||
guess_lang: false
|
||||
- toc:
|
||||
permalink: true
|
||||
- pymdownx.tasklist:
|
||||
custom_checkbox: true
|
||||
- pymdownx.betterem:
|
||||
smart_enable: all
|
||||
- admonition
|
||||
- meta
|
||||
- footnotes
|
||||
- pymdownx.details
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.superfences
|
||||
- pymdownx.tabbed
|
||||
- pymdownx.emoji:
|
||||
emoji_index: !!python/name:materialx.emoji.twemoji
|
||||
emoji_generator: !!python/name:materialx.emoji.to_svg
|
||||
options:
|
||||
custom_icons:
|
||||
- docs/overrides/.icons
|
||||
|
||||
nav:
|
||||
- Home: index.md
|
||||
- Guides:
|
||||
- Windows Guide: guides/windows-guide.md
|
||||
- Linux Guide: guides/linux-guide.md
|
||||
- OSX Guide: guides/osx-guide.md
|
||||
- Windows Guide (from source): guides/windows-source-guide.md
|
||||
- Docker Guide (unsupported): guides/docker-guide.md
|
||||
- Commands:
|
||||
- Readme: commands-readme.md
|
||||
- Commands List: https://nadeko.bot/commands
|
||||
- Features Explained:
|
||||
- Basic Creds: creds-guide.md
|
||||
- Advanced Creds: jsons-explained.md
|
||||
- Permissions System: permissions-system.md
|
||||
- Custom Reactions: custom-reactions.md
|
||||
- Placeholders: placeholders.md
|
||||
- Config: config-guide.md
|
||||
- Medusa System:
|
||||
- medusa/getting-started.md
|
||||
- medusa/creating-a-medusa.md
|
||||
- medusa/snek-lifecycle.md
|
||||
- Contribution Guide: contribution-guide.md
|
||||
- Donate: donate.md
|
||||
Reference in New Issue
Block a user