Skip to main content
Modules are still early. Right now they can only add prefix commands and show up in help.
Events, MySQL, settings, and Dashboard / !perms access are not supported yet.
Starting with SkyNET 3.1.8, you can drop extra command packs next to the bot without rebuilding SkyNET itself.
Put them in a folder called modules/ next to the SkyNET binary. When SkyNET updates, that folder is left alone, so your modules stay installed.
To build modules you need .NET 9. The host expects apiVersion 1.

Module SDK kit

SDK NuGet package, Fluxify deps, and a small StarterModule (!hello) to copy and rename.

Installing a module

  1. Get a built module folder (or build the starter from the kit above).
  2. Copy it into modules/ like this:
If the module needs extra DLLs that SkyNET does not already ship, put those in the same folder.
Do not copy SkyNET.ModuleSDK.dll here — the bot already has the SDK.
  1. Restart SkyNET.
  2. Check the log. You should see something like:
  1. Try the command. With the default prefix that would be !hello, and !help hello for help.
To update a module, replace the files in its folder and restart.
To remove one, delete its folder and restart.
If a module fails to load, SkyNET logs it and keeps running. Command names that already exist (built-in or another module) are skipped.

module.json

Every module folder needs a module.json:

Making a module

  1. Download the Module SDK kit and unzip it.
  2. Open StarterModule (or copy that folder and rename it).
  3. Keep the kit’s nuget/ folder and nuget.config next to the project so restore can find SkyNET.ModuleSDK.
  4. Implement / edit ISkyModule. If the assembly has more than one possible type, mark the real one with [SkyModule].
  5. In Load, register your commands. Set a Description so they show up under Modules in !help / !cmds.
Reference SkyNET.ModuleSDK only — do not pull in SkyNET host assemblies. The starter project already looks like this:
And a minimal module:
Build it:
Then copy module.json and StarterModule.dll from bin/Release/net9.0/ into <bot>/modules/MyModule/.

What the SDK gives you

ModuleCommandOptions can set Aliases, GuildOnly (defaults to true), Description, Usage, Examples, and Notes.
Write usage and examples without the prefix.
Module commands are open to everyone. There is no Dashboard or !perms gate on them yet.
Pick command names that do not clash with SkyNET or other modules.
There is no hot-reload — always restart after you change something.