- TypeScript 96.9%
- Shell 2.9%
- Dockerfile 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Also corrects the LT_THREADS entry, which described it as a knob on LibreTranslate's CPU use. It sets the WSGI server's thread count and has no effect on inference speed. |
||
| .forgejo | ||
| assets | ||
| docker | ||
| secrets_example | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| DEVELOPMENT.md | ||
| docker-compose.gpu.yml | ||
| docker-compose.yml | ||
| eslint.config.ts | ||
| LICENSE | ||
| linux_setup_and_run.sh | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| SECURITY.md | ||
| tsconfig.json | ||
Note
Shiveron is developed at git.cryoforgenexus.com/Shiveron/shiveron. The GitHub repository is a read-only mirror: issues and pull requests go to Forgejo, not to GitHub.
Features
- Moderation commands: ban, kick, timeout, warn, purge, and more
- Temporary voice channels, with a menu that lets users configure their own channel
- Infraction storage in a dedicated database, with a quick history view for moderators
- Message translation through auto-detection, flag emoji reactions, or the
/translatecommand, served by a self-hosted LibreTranslate instance - Internationalization, currently English, French, and German
- And much more to come
Public hosted version
Invite the public instance of Shiveron with this link. It is hosted by Cryoforge Nexus, and we do our best to keep it up around the clock.
Using the hosted instance means per-guild configuration is stored on our infrastructure. The privacy policy and terms of service cover what is collected, why, and how to have it deleted. Self-hosting keeps all of it on your own machine instead.
Requirements
- Discord bot token: available from the Discord Developer Portal under the "Bot" tab
- Discord client ID: found in the "General Information" tab of the Discord Developer Portal
- Docker: available from the official website
Installation
1. Create a Discord bot application
Create an application at the Discord Developer Portal if you do not have one yet, then create a bot account within it and reset its token so you can copy it.
To invite the bot to a server:
- Open the OAuth2 tab
- Under OAuth2 URL Generator, check
applications.commandsandbot - In the permissions section, check
Administrator - Copy the generated link and open it in a browser to invite the bot
2. Install and run Shiveron
- Download the latest release
- Extract the archive
- The next step depends on your operating system:
- Linux: run
linux_setup_and_run.shin a terminal, from the directory you extracted the files into:chmod +x linux_setup_and_run.sh ./linux_setup_and_run.sh - Windows: there is no working setup script yet, so the steps are manual. It is not much work:
- Fill in the required fields of
.env.example, then rename the file to.env - Fill in each file in
secrets_example/with the value its name describes, then rename the folder tosecrets - Start and stop the bot with:
docker compose up -d --build docker compose stop - Fill in the required fields of
- Linux: run
Note
The first startup takes a few minutes, because the translation language models are downloaded before the bot can start. The bot container stays idle until LibreTranslate reports itself healthy, so it logs nothing during that time. Watch
docker compose psfor the LibreTranslate container to turn healthy, then follow the bot withdocker compose logs -f.
3. Optional: speed up translation
Translation is the heaviest thing Shiveron does, and by default it runs on the CPU. On a twelve-core machine that works out to roughly three translations per second, which is ample for a quiet server and tight for a busy one. Two options help.
Load fewer languages. Set LT_LOAD_ONLY in .env to the languages the server actually uses, for example en,fr,de. This cuts both the first-startup download and the memory the translation container holds afterwards. Keep en in the list: every other pair is translated through English, so removing it breaks the rest.
Use an NVIDIA GPU. If the host has one, docker-compose.gpu.yml moves translation onto it:
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build
This needs the NVIDIA Container Toolkit installed on the host first. Without it the translation container fails to start rather than quietly falling back to the CPU. The downloaded language models are shared between the two setups, so switching does not download them again.
Contributing
Shiveron is built to be extended: commands and events are self-contained files, so adding a feature or stripping one out is a matter of adding or deleting a file.
- CONTRIBUTING.md covers the process: where development happens, branch strategy, commit conventions, and what a pull request needs.
- DEVELOPMENT.md is the engineering manual: architecture, layering rules, how to add a command or an event, and how to build and run the project locally.
- CODE_OF_CONDUCT.md applies to everyone taking part.
Found a bug? Open an issue with what happened, what you expected, and how to reproduce it. For anything security-related, follow SECURITY.md instead.
If you enjoy the project, you can support us on Patreon.
License
Shiveron is released under the MIT License.