izolabella.Discord 7.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package izolabella.Discord --version 7.0.0
NuGet\Install-Package izolabella.Discord -Version 7.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="izolabella.Discord" Version="7.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add izolabella.Discord --version 7.0.0
#r "nuget: izolabella.Discord, 7.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install izolabella.Discord as a Cake Addin
#addin nuget:?package=izolabella.Discord&version=7.0.0

// Install izolabella.Discord as a Cake Tool
#tool nuget:?package=izolabella.Discord&version=7.0.0

💞 izolabella.Discord

This project is an alternative to the command handler provided by Discord.NET for providing more detail to commands in a lightweight manner.

🌸 Quality Status

CodeFactor

👩‍💻 Getting Started

This project is available through NuGet.org;

  • Package Manager (Visual Studio)
Install-Package izolabella.Discord
  • .NET CLI
dotnet add package izolabella.Discord

This project uses Discord.NET to function!*

⌨️ Code

A new instance of the IzolabellaDiscordClient class must be initialized. The class takes a DiscordSocketConfig argument for the client, and a bool for whether or not the commands should be updated per guild or globally.

IzolabellaDiscordClient Client = new(new DiscordSocketConfig(), false);

The current version of this library uses classes for commands. To create a command, create a class that inherits the abstract class IzolabellaCommand. These classes must have parameterless constructors.

public class MyCommand : IzolabellaCommand
{
    public override string Name => "Command";

    public override string Description => "My command's description.'";

    public override bool GuildsOnly => true;

    public override List<IIzolabellaCommandConstraint> Constraints { get; } = new()
    {
        new WhitelistPermissionsConstraint(false, GuildPermission.Administrator)
    };

    public override List<IzolabellaCommandParameter> Parameters { get; } = new()
    {
        new IzolabellaCommandParameter("Param", "This is my parameter!", ApplicationCommandOptionType.Channel, true)
    };

    public override Task RunAsync(CommandContext Context, IzolabellaCommandArgument[] Arguments)
    {
        // command runs here!
    }

    public override Task OnLoadAsync(IIzolabellaCommand[] AllCommands)
    {
        // runs when all commands have been initialized - fired once.
    }

    public override Task OnConstrainmentAsync(CommandContext Context, IzolabellaCommandArgument[] Arguments, IIzolabellaCommandConstraint ConstraintThatFailed)
    {
        // when one of the constrainments don't pass the validity check by the handler, this method gets called.
    }
        
    public override Task OnErrorAsync(HttpException Error)
    {
        // when an error happens, this method will run.
    }
}

To create sub-commands, a class that inherits from IzolabellaSubCommand must be created, initialized, and placed in a list of a normal IzolabellaCommand. For example:

public class ExampleSub : IzolabellaSubCommand
{
    public override string Name => "Example Name";

    public override string Description => "Example!";

    public override bool GuildsOnly => true;

    public override List<IzolabellaCommandParameter> Parameters => new()
    {
        new("Channel", "Pick a channel!", ApplicationCommandOptionType.Channel, new() { ChannelType.Text }, false)
    };

    public override List<IIzolabellaCommandConstraint> Constraints => new();

    public override async Task RunAsync(CommandContext Context, IzolabellaCommandArgument[] Arguments)
    {
        await Context.UserContext.RespondAsync(text: "abc!!");
    }
}

Then, in an IzolabellaCommand, you can place it in the SubCommands property. As a shorter example (borrowing from the previous IzolabellaCommand example):

public class MyCommand : IzolabellaCommand
{
    public override List<IzolabellaSubCommand> SubCommands => new() { new ExampleSub() };
}

To get things going, call the following method on the IzolabellaDiscordClient instance you have created:

await Client.StartAsync();

Further, the client itself offers numerous events to hook on to. Browse intellisense context menus to see all the options.

Arguments will be in kebab case when passed back to the RunAsync methods!!! When comparing arguments by name, please keep this in mind. For example, if I have a parameter named "Channel Id", I should check in the arguments for an argument named "channel-id".

I want to make this as useable as possible for you. I have no in-depth documentation since things are currently changing rapidly. For questions and how-tos, please send me a request on Discord at izolabella.bin#0216.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
7.0.2 480 7/8/2022
7.0.1 399 7/8/2022
7.0.0 397 7/8/2022
6.3.0 403 7/4/2022
6.2.0 398 7/4/2022
6.1.7 408 7/4/2022
6.1.6 396 6/3/2022
6.1.5 376 6/3/2022
6.1.4 386 6/3/2022
6.1.3 380 6/3/2022
6.1.2 379 6/3/2022
6.1.1 379 6/2/2022
6.1.0 392 5/27/2022
6.0.0 378 5/27/2022
5.1.0 410 5/23/2022
5.1.0-beta 146 5/22/2022
5.0.0-beta 144 5/22/2022
4.1.1 392 5/22/2022
4.1.0 398 5/22/2022
4.0.0 429 3/28/2022
3.0.1 413 3/21/2022
3.0.0 398 3/21/2022
2.3.4 407 3/21/2022
2.3.3 409 3/21/2022
2.3.2 405 3/20/2022
2.3.1 401 3/18/2022
2.3.0 397 3/18/2022
2.2.1 412 3/17/2022
2.2.0 413 3/16/2022
2.1.0 419 3/11/2022
2.0.4 405 3/11/2022
2.0.3 402 3/11/2022
2.0.2 397 3/11/2022
2.0.1 407 3/11/2022
2.0.0 410 3/11/2022
1.0.5 459 3/9/2022
1.0.4 449 3/9/2022
1.0.3 442 3/9/2022
1.0.2 439 3/7/2022
1.0.1 445 3/7/2022
1.0.0 447 3/7/2022

Added subcommand support, and renamed some elements.