using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.ApplicationCommand; namespace Discord.Rest { /// /// Represents a Rest-based implementation of the . /// public abstract class RestApplicationCommand : RestEntity, IApplicationCommand { /// public ulong ApplicationId { get; private set; } /// public ApplicationCommandType Type { get; private set; } /// public string Name { get; private set; } /// public string Description { get; private set; } /// public bool IsDefaultPermission { get; private set; } /// public bool IsEnabledInDm { get; private set; } /// public GuildPermissions DefaultMemberPermissions { get; private set; } /// /// Gets a collection of options for this command. /// public IReadOnlyCollection Options { get; private set; } /// public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); internal RestApplicationCommand(BaseDiscordClient client, ulong id) : base(client, id) { } internal static RestApplicationCommand Create(BaseDiscordClient client, Model model, ulong? guildId) { return guildId.HasValue ? RestGuildCommand.Create(client, model, guildId.Value) : RestGlobalCommand.Create(client, model); } internal virtual void Update(Model model) { Type = model.Type; ApplicationId = model.ApplicationId; Name = model.Name; Description = model.Description; IsDefaultPermission = model.DefaultPermissions.GetValueOrDefault(true); Options = model.Options.IsSpecified ? model.Options.Value.Select(RestApplicationCommandOption.Create).ToImmutableArray() : ImmutableArray.Create(); IsEnabledInDm = model.DmPermission.GetValueOrDefault(true).GetValueOrDefault(true); DefaultMemberPermissions = new GuildPermissions((ulong)model.DefaultMemberPermission.GetValueOrDefault(0).GetValueOrDefault(0)); } /// public abstract Task DeleteAsync(RequestOptions options = null); /// public Task ModifyAsync(Action func, RequestOptions options = null) { return ModifyAsync(func, options); } /// public abstract Task ModifyAsync(Action func, RequestOptions options = null) where TArg : ApplicationCommandProperties; IReadOnlyCollection IApplicationCommand.Options => Options; } }