A fully modular, expandable, open-source (for life) Discord bot and platform, written in C# using .NET Core and Discord.Net.
You can add the public instance, running on the default addon set, here.
You can join the support server here.
- Complete modularity including custom event hooks, custom commands (using the existing command system), and full expandability, through .NET's powerful assembly loading system
- Spotify track and album lookup (can also read from the current song you're listening to), powered by AbyssalSpotify
- Resizing (bicubic) of emojis and custom images, both animated and not-animated
- Live C# script evaluation
- Dice rolling with custom expression support (e.g.
a.roll d20+d48+d10
) - C a t commands
- General purpose command set
- It is heavily recommended to run Abyss on a Docker daemon running with Linux containers. Instructions for running with Docker are here. If you don't want to run on Docker, you're on your own.
- .NET Core 3.0 Preview 7 SDK for building (or Runtime for a pre-compiled version)
- A Discord bot application with registered user and token
Abyss.json
configuration file set out as below
An example Abyss configuration file can be found at abyss.example.json, which should be renamed to abyss.json
before running.
It produces a result that looks like this:
The bot will rotate through each Activity provided under the Startup.Activity property every minute. Available Activity types are Playing, Streaming, Listening, and Watching. (These match to the enum ActivityType in Discord.Net)
Abyss has fully modular runtime assembly support. Here's a quick guide on doing so:
- Clone this repository to your computer.
- Create a new .NET Core 3.0 Library (not .NET Standard 2.0) and add your local copy of
Abyss.Core
as a dependency. - Create your modules and commands as you like, using
AbyssModuleBase
. Feel free to look at Abyss' included commands for help. To extend your addon to modify functionality of the platform, create a class that extendsAbsys.Core.Addons.IAddon
and implement it's methods. - Build
Abyss.Console
(or whatever frontend you are using) in your preferred configuration. - Build your assembly, and copy the assembly file (something like
MyCommandAssembly.dll
) into yourAddons
folder. If you don't provide an absolute or relative directory path as the first argument to the application, it will default to the directory of the built DLL, plusAddons
. If you do, it will use theAddons
directory in that path. - Abyss will automatically discover addons and modules and register them. This will be logged in the console.
- If there are any issues, join the support server for help.
The project is broken down into the following projects:
Platform core
Abyss.Core
(library) The core of Abyss. This project contains the robust, fast, and safe architecture that sits at the heart of Abyss operation. It also contains all of the default commands that come with every instance.
Console host
Abyss.Console
This is an executable which wrapsAbyss.Core
, and pipes output to the console. This executable does not support web functionality.
Web host
Abyss.Web.Shared
This library contains data classes and code that is shared betweenAbyss.Web.Client
andAbyss.Web.Server
.Abyss.Web.Client
This contains all the Blazor clientside code for using the Abyss administration panel.Abyss.Web.Server
An alternative toAbyss.Console
, this executable starts up the Abyss administration panel on[Any IP]:2003
and serves clients the Blazor code inAbyss.Web.Client
. This web server contains many useful administration tools.
Addons
Abyss.ExampleCustomAssembly
(library) This is an example project, which shows how you can make your own projects to expand and add new functionality and commands to Abyss.
Copyright (c) 2019 abyssal512 under the MIT License, available at the LICENSE file.