Interaction Service Complex Parameters (#2155)
* Interaction Service Complex Parameters * add complex parameters * add complex parameters * fix build errors * add argument parsing * add nested complex parameter checks * add inline docs * add preferred constructor declaration * fix autocompletehandlers for complex parameters * make GetConstructor private * use flattened params in ToProps method * make DiscordType of SlashParameter nullable * add docs to Flattened parameters collection and move the GetComplexParameterCtor method * add inline docs to SlashCommandParameterBuilder.ComplexParameterFields * add check for validating required/optinal parameter order * implement change requests * return internal ParseResult as ExecuteResult Co-Authored-By: Cenk Ergen <57065323+Cenngo@users.noreply.github.com> * fix merge errors Co-authored-by: Cenk Ergen <57065323+Cenngo@users.noreply.github.com>
This commit is contained in:
@@ -1,13 +1,25 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
|
||||
namespace Discord.Interactions
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a cached argument constructor delegate.
|
||||
/// </summary>
|
||||
/// <param name="args">Method arguments array.</param>
|
||||
/// <returns>
|
||||
/// Returns the constructed object.
|
||||
/// </returns>
|
||||
public delegate object ComplexParameterInitializer(object[] args);
|
||||
|
||||
/// <summary>
|
||||
/// Represents the parameter info class for <see cref="SlashCommandInfo"/> commands.
|
||||
/// </summary>
|
||||
public class SlashCommandParameterInfo : CommandParameterInfo
|
||||
{
|
||||
internal readonly ComplexParameterInitializer _complexParameterInitializer;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public new SlashCommandInfo Command => base.Command as SlashCommandInfo;
|
||||
|
||||
@@ -43,9 +55,14 @@ namespace Discord.Interactions
|
||||
public bool IsAutocomplete { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Discord option type this parameter represents.
|
||||
/// Gets whether this type should be treated as a complex parameter.
|
||||
/// </summary>
|
||||
public ApplicationCommandOptionType DiscordOptionType => TypeConverter.GetDiscordType();
|
||||
public bool IsComplexParameter { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Discord option type this parameter represents. If the parameter is not a complex parameter.
|
||||
/// </summary>
|
||||
public ApplicationCommandOptionType? DiscordOptionType => TypeConverter?.GetDiscordType();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the parameter choices of this Slash Application Command parameter.
|
||||
@@ -57,6 +74,11 @@ namespace Discord.Interactions
|
||||
/// </summary>
|
||||
public IReadOnlyCollection<ChannelType> ChannelTypes { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the constructor parameters of this parameter, if <see cref="IsComplexParameter"/> is <see langword="true"/>.
|
||||
/// </summary>
|
||||
public IReadOnlyCollection<SlashCommandParameterInfo> ComplexParameterFields { get; }
|
||||
|
||||
internal SlashCommandParameterInfo(Builders.SlashCommandParameterBuilder builder, SlashCommandInfo command) : base(builder, command)
|
||||
{
|
||||
TypeConverter = builder.TypeConverter;
|
||||
@@ -64,9 +86,13 @@ namespace Discord.Interactions
|
||||
Description = builder.Description;
|
||||
MaxValue = builder.MaxValue;
|
||||
MinValue = builder.MinValue;
|
||||
IsComplexParameter = builder.IsComplexParameter;
|
||||
IsAutocomplete = builder.Autocomplete;
|
||||
Choices = builder.Choices.ToImmutableArray();
|
||||
ChannelTypes = builder.ChannelTypes.ToImmutableArray();
|
||||
ComplexParameterFields = builder.ComplexParameterFields?.Select(x => x.Build(command)).ToImmutableArray();
|
||||
|
||||
_complexParameterInitializer = builder.ComplexParameterInitializer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user