Files
Discord.Net/src/Discord.Net.Rest/Entities/Interactions/RestApplicationCommandOption.cs
Quin Lynch 503d32aa7e Update interaction summaries (#2099)
* init

* Update RestMessageComponentData.cs

* Update src/Discord.Net.Rest/Entities/Interactions/RestApplicationCommandOption.cs

Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>

* Update src/Discord.Net.Rest/Entities/Interactions/RestApplicationCommandOption.cs

Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>

* Update src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketApplicationCommand.cs

Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>

* Update src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketApplicationCommand.cs

Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>

Co-authored-by: Jared L <48422312+lhjt@users.noreply.github.com>
2022-02-12 06:51:14 -04:00

103 lines
3.4 KiB
C#

using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Model = Discord.API.ApplicationCommandOption;
namespace Discord.Rest
{
/// <summary>
/// Represents a Rest-based implementation of <see cref="IApplicationCommandOption"/>.
/// </summary>
public class RestApplicationCommandOption : IApplicationCommandOption
{
#region RestApplicationCommandOption
/// <inheritdoc/>
public ApplicationCommandOptionType Type { get; private set; }
/// <inheritdoc/>
public string Name { get; private set; }
/// <inheritdoc/>
public string Description { get; private set; }
/// <inheritdoc/>
public bool? IsDefault { get; private set; }
/// <inheritdoc/>
public bool? IsRequired { get; private set; }
/// <inheritdoc/>
public bool? IsAutocomplete { get; private set; }
/// <inheritdoc/>
public double? MinValue { get; private set; }
/// <inheritdoc/>
public double? MaxValue { get; private set; }
/// <summary>
/// Gets a collection of <see cref="RestApplicationCommandChoice"/>s for this command.
/// </summary>
public IReadOnlyCollection<RestApplicationCommandChoice> Choices { get; private set; }
/// <summary>
/// Gets a collection of <see cref="RestApplicationCommandOption"/>s for this command.
/// </summary>
public IReadOnlyCollection<RestApplicationCommandOption> Options { get; private set; }
/// <inheritdoc/>
public IReadOnlyCollection<ChannelType> ChannelTypes { get; private set; }
internal RestApplicationCommandOption() { }
internal static RestApplicationCommandOption Create(Model model)
{
var options = new RestApplicationCommandOption();
options.Update(model);
return options;
}
internal void Update(Model model)
{
Type = model.Type;
Name = model.Name;
Description = model.Description;
if (model.Default.IsSpecified)
IsDefault = model.Default.Value;
if (model.Required.IsSpecified)
IsRequired = model.Required.Value;
if (model.MinValue.IsSpecified)
MinValue = model.MinValue.Value;
if (model.MaxValue.IsSpecified)
MaxValue = model.MaxValue.Value;
if (model.Autocomplete.IsSpecified)
IsAutocomplete = model.Autocomplete.Value;
Options = model.Options.IsSpecified
? model.Options.Value.Select(Create).ToImmutableArray()
: ImmutableArray.Create<RestApplicationCommandOption>();
Choices = model.Choices.IsSpecified
? model.Choices.Value.Select(x => new RestApplicationCommandChoice(x)).ToImmutableArray()
: ImmutableArray.Create<RestApplicationCommandChoice>();
ChannelTypes = model.ChannelTypes.IsSpecified
? model.ChannelTypes.Value.ToImmutableArray()
: ImmutableArray.Create<ChannelType>();
}
#endregion
#region IApplicationCommandOption
IReadOnlyCollection<IApplicationCommandOption> IApplicationCommandOption.Options
=> Options;
IReadOnlyCollection<IApplicationCommandOptionChoice> IApplicationCommandOption.Choices
=> Choices;
#endregion
}
}