| @@ -1,5 +1,4 @@ | |||
| using Discord.Interactions.Builders; | |||
| using Discord.WebSocket; | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Collections.Immutable; | |||
| @@ -54,16 +53,14 @@ namespace Discord.Interactions | |||
| try | |||
| { | |||
| var paramCount = paramList.Count(); | |||
| var captureCount = wildcardCaptures?.Count() ?? 0; | |||
| var args = new object[paramCount]; | |||
| for(var i = 0; i < paramCount; i++) | |||
| for (var i = 0; i < paramCount; i++) | |||
| { | |||
| var parameter = Parameters.ElementAt(i); | |||
| bool isCapture = i < captureCount; | |||
| if(isCapture ^ parameter.IsRouteSegmentParameter) | |||
| if (isCapture ^ parameter.IsRouteSegmentParameter) | |||
| { | |||
| var result = ExecuteResult.FromError(InteractionCommandError.BadArgs, $"Argument type and parameter type didn't match (Wild Card capture/Component value)"); | |||
| await InvokeModuleEvent(context, result).ConfigureAwait(false); | |||
| @@ -75,7 +72,7 @@ namespace Discord.Interactions | |||
| if (isCapture) | |||
| readResult = await parameter.TypeReader.ReadAsync(context, wildcardCaptures.ElementAt(i), services).ConfigureAwait(false); | |||
| else | |||
| readResult = await parameter.TypeConverter.ReadAsync(context, data, services).ConfigureAwait(false); | |||
| readResult = await parameter.TypeConverter.ReadAsync(context, data, services).ConfigureAwait(false); | |||
| if (!readResult.IsSuccess) | |||
| { | |||
| @@ -90,38 +87,12 @@ namespace Discord.Interactions | |||
| } | |||
| catch (Exception ex) | |||
| { | |||
| return ExecuteResult.FromError(ex); | |||
| var result = ExecuteResult.FromError(ex); | |||
| await InvokeModuleEvent(context, result).ConfigureAwait(false); | |||
| return result; | |||
| } | |||
| } | |||
| private static object[] GenerateArgs(IEnumerable<CommandParameterInfo> paramList, IEnumerable<string> argList) | |||
| { | |||
| var result = new object[paramList.Count()]; | |||
| for (var i = 0; i < paramList.Count(); i++) | |||
| { | |||
| var parameter = paramList.ElementAt(i); | |||
| if (argList?.ElementAt(i) is null) | |||
| { | |||
| if (!parameter.IsRequired) | |||
| result[i] = parameter.DefaultValue; | |||
| else | |||
| throw new InvalidOperationException($"Component Interaction handler is executed with too few args."); | |||
| } | |||
| else if (parameter.IsParameterArray) | |||
| { | |||
| string[] paramArray = new string[argList.Count() - i]; | |||
| argList.ToArray().CopyTo(paramArray, i); | |||
| result[i] = paramArray; | |||
| } | |||
| else | |||
| result[i] = argList?.ElementAt(i); | |||
| } | |||
| return result; | |||
| } | |||
| protected override Task InvokeModuleEvent(IInteractionContext context, IResult result) | |||
| => CommandService._componentCommandExecutedEvent.InvokeAsync(this, context, result); | |||