Modular and multipurpose Discord Bot, built using discord.js v14
  • TypeScript 96.9%
  • Shell 2.9%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Serkyo 49261588c2
Some checks failed
CI / Lint & Format (push) Successful in 9m39s
CI / Dependency Audit (push) Successful in 9m44s
CI / TypeScript Build (push) Successful in 9m36s
CI / Docker Image Build (push) Failing after 15s
CI / LFS Pointer Guard (push) Successful in 5s
docs(repo): record the GPU override, release workflow and timeout fix
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.
2026-09-23 12:27:08 +02:00
.forgejo ci(repo): publish a release when a version tag is pushed 2026-09-23 12:27:08 +02:00
assets chore(repo): move binary assets to assets/ and track them with git lfs 2026-08-08 00:13:13 +02:00
docker fix(docker): install from the lockfile and fix the multi-source COPY 2026-09-16 13:41:48 +02:00
secrets_example Rolled back some docker secrets to env var 2026-01-08 15:03:14 +01:00
src fix(services): bound every LibreTranslate request with a deadline 2026-09-23 12:17:48 +02:00
.dockerignore fix(docker): move .dockerignore to the build context root 2026-08-08 00:13:13 +02:00
.env.example docs(repo): correct what LT_THREADS actually controls 2026-09-23 12:17:48 +02:00
.gitattributes chore(repo): move binary assets to assets/ and track them with git lfs 2026-08-08 00:13:13 +02:00
.gitignore chore(repo): ignore the remaining headroom local state files 2026-09-23 12:17:48 +02:00
.prettierignore Ci/lint format (#16) 2026-05-18 23:38:51 +02:00
.prettierrc.json Ci/lint format (#16) 2026-05-18 23:38:51 +02:00
AGENTS.md docs(repo): document logging as a container runtime concern 2026-08-08 16:06:11 +02:00
CHANGELOG.md docs(repo): record the GPU override, release workflow and timeout fix 2026-09-23 12:27:08 +02:00
CLAUDE.md docs(repo): add engineering context for ai coding agents 2026-08-08 00:13:13 +02:00
CODE_OF_CONDUCT.md docs(repo): move front-facing docs under cryoforge nexus 2026-08-08 00:13:13 +02:00
CONTRIBUTING.md docs(repo): explain issue references in pre-migration commits 2026-08-08 01:32:10 +02:00
DEVELOPMENT.md docs(repo): correct what LT_THREADS actually controls 2026-09-23 12:17:48 +02:00
docker-compose.gpu.yml feat(docker): add an optional CUDA override for LibreTranslate 2026-09-23 12:17:48 +02:00
docker-compose.yml fix(docker): omit LT_LOAD_ONLY instead of passing it empty 2026-08-08 16:56:56 +02:00
eslint.config.ts Ci/lint format (#16) 2026-05-18 23:38:51 +02:00
LICENSE docs(repo): move front-facing docs under cryoforge nexus 2026-08-08 00:13:13 +02:00
linux_setup_and_run.sh feat(repo): prompt for the libretranslate settings in the setup script 2026-08-08 17:01:40 +02:00
package-lock.json chore(repo): upgrade dependencies and clear reachable advisories 2026-09-16 13:41:48 +02:00
package.json chore(repo): upgrade dependencies and clear reachable advisories 2026-09-16 13:41:48 +02:00
README.md docs(repo): document the translation performance options 2026-09-23 12:17:48 +02:00
SECURITY.md docs(repo): document logging as a container runtime concern 2026-08-08 16:06:11 +02:00
tsconfig.json Ci/lint format (#16) 2026-05-18 23:38:51 +02:00

Shiveron Icon

Shiveron

A multipurpose, modular Discord bot, built by Cryoforge Nexus

Release Open issues Stars Last commit License
Patreon

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 /translate command, 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

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.commands and bot
  • 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.sh in 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 to secrets
      • Start and stop the bot with:
      docker compose up -d --build
      docker compose stop
      

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 ps for the LibreTranslate container to turn healthy, then follow the bot with docker 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.