| @@ -1,5 +1,4 @@ | |||||
| using Discord.Interactions.Builders; | using Discord.Interactions.Builders; | ||||
| using Discord.WebSocket; | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
| @@ -54,16 +53,14 @@ namespace Discord.Interactions | |||||
| try | try | ||||
| { | { | ||||
| var paramCount = paramList.Count(); | |||||
| var captureCount = wildcardCaptures?.Count() ?? 0; | |||||
| var args = new object[paramCount]; | var args = new object[paramCount]; | ||||
| for(var i = 0; i < paramCount; i++) | |||||
| for (var i = 0; i < paramCount; i++) | |||||
| { | { | ||||
| var parameter = Parameters.ElementAt(i); | var parameter = Parameters.ElementAt(i); | ||||
| bool isCapture = i < captureCount; | 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)"); | 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); | await InvokeModuleEvent(context, result).ConfigureAwait(false); | ||||
| @@ -75,7 +72,7 @@ namespace Discord.Interactions | |||||
| if (isCapture) | if (isCapture) | ||||
| readResult = await parameter.TypeReader.ReadAsync(context, wildcardCaptures.ElementAt(i), services).ConfigureAwait(false); | readResult = await parameter.TypeReader.ReadAsync(context, wildcardCaptures.ElementAt(i), services).ConfigureAwait(false); | ||||
| else | else | ||||
| readResult = await parameter.TypeConverter.ReadAsync(context, data, services).ConfigureAwait(false); | |||||
| readResult = await parameter.TypeConverter.ReadAsync(context, data, services).ConfigureAwait(false); | |||||
| if (!readResult.IsSuccess) | if (!readResult.IsSuccess) | ||||
| { | { | ||||
| @@ -90,38 +87,12 @@ namespace Discord.Interactions | |||||
| } | } | ||||
| catch (Exception ex) | 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) | protected override Task InvokeModuleEvent(IInteractionContext context, IResult result) | ||||
| => CommandService._componentCommandExecutedEvent.InvokeAsync(this, context, result); | => CommandService._componentCommandExecutedEvent.InvokeAsync(this, context, result); | ||||