using System.Collections.Frozen; using System.Collections.Immutable; using Microsoft.Extensions.DependencyInjection; namespace LibMatrix.Utilities.Bot.Interfaces; public interface ICommand { public string Name { get; } public string[]? Aliases { get; } public string Description { get; } public bool Unlisted { get; } public Task CanInvoke(CommandContext ctx) => Task.FromResult(true); public Task Invoke(CommandContext ctx); } public interface ICommand : ICommand where T : ICommandGroup { } public interface ICommandGroup : ICommand { } public interface ICommandGroup : ICommandGroup where T : ICommandGroup { }