diff --git a/src/Discord.Net.Interactions/Info/Commands/ComponentCommandInfo.cs b/src/Discord.Net.Interactions/Info/Commands/ComponentCommandInfo.cs index 186419cfb..22d6aba6c 100644 --- a/src/Discord.Net.Interactions/Info/Commands/ComponentCommandInfo.cs +++ b/src/Discord.Net.Interactions/Info/Commands/ComponentCommandInfo.cs @@ -51,8 +51,6 @@ namespace Discord.Interactions var paramCount = paramList.Count(); var captureCount = wildcardCaptures?.Count() ?? 0; - if (paramCount < captureCount + 1) - return await InvokeEventAndReturn(context, ExecuteResult.FromError(InteractionCommandError.BadArgs, "Command was invoked with too many parameters")).ConfigureAwait(false); if (context.Interaction is not IComponentInteraction messageComponent) return ExecuteResult.FromError(InteractionCommandError.ParseFailed, $"Provided {nameof(IInteractionContext)} doesn't belong to a Component Command Interaction"); diff --git a/src/Discord.Net.Interactions/InteractionService.cs b/src/Discord.Net.Interactions/InteractionService.cs index b7e92998b..0f023d1dc 100644 --- a/src/Discord.Net.Interactions/InteractionService.cs +++ b/src/Discord.Net.Interactions/InteractionService.cs @@ -914,8 +914,23 @@ namespace Discord.Interactions /// /// A task representing the conversion process. The task result contains the result of the conversion. /// - public Task SerializeValue(T obj, IServiceProvider services = null) => - _typeReaderMap.Get(typeof(T), services).SerializeAsync(obj); + public Task SerializeValueAsync(T obj, IServiceProvider services) => + _typeReaderMap.Get(typeof(T), services).SerializeAsync(obj, services); + + public async Task GenerateCustomIdStringAsync(string format, IServiceProvider services, params object[] args) + { + var serializedValues = new string[args.Length]; + + for(var i = 0; i < args.Length; i++) + { + var arg = args[i]; + var typeReader = _typeReaderMap.Get(arg.GetType(), null); + var result = await typeReader.SerializeAsync(arg, services); + serializedValues[i] = result; + } + + return string.Format(format, serializedValues); + } /// /// Loads and caches an for the provided . diff --git a/src/Discord.Net.Interactions/TypeReaders/DefaultSnowflakeReader.cs b/src/Discord.Net.Interactions/TypeReaders/DefaultSnowflakeReader.cs index d1dcc1751..e2ac1efbd 100644 --- a/src/Discord.Net.Interactions/TypeReaders/DefaultSnowflakeReader.cs +++ b/src/Discord.Net.Interactions/TypeReaders/DefaultSnowflakeReader.cs @@ -19,7 +19,7 @@ namespace Discord.Interactions TypeConverterResult.FromSuccess(result) : TypeConverterResult.FromError(InteractionCommandError.ConvertFailed, $"{option} must be a valid {typeof(T).Name} snowflake to be parsed."); } - public override Task SerializeAsync(object obj) => Task.FromResult((obj as ISnowflakeEntity)?.Id.ToString()); + public override Task SerializeAsync(object obj, IServiceProvider services) => Task.FromResult((obj as ISnowflakeEntity)?.Id.ToString()); } internal sealed class DefaultUserReader : DefaultSnowflakeReader diff --git a/src/Discord.Net.Interactions/TypeReaders/EnumReader.cs b/src/Discord.Net.Interactions/TypeReaders/EnumReader.cs index 799138061..df6f2ac33 100644 --- a/src/Discord.Net.Interactions/TypeReaders/EnumReader.cs +++ b/src/Discord.Net.Interactions/TypeReaders/EnumReader.cs @@ -12,7 +12,7 @@ namespace Discord.Interactions TypeConverterResult.FromSuccess(result) : TypeConverterResult.FromError(InteractionCommandError.ConvertFailed, $"Value {option} cannot be converted to {nameof(T)}")); } - public override Task SerializeAsync(object obj) + public override Task SerializeAsync(object obj, IServiceProvider services) { var name = Enum.GetName(typeof(T), obj); diff --git a/src/Discord.Net.Interactions/TypeReaders/TypeReader.cs b/src/Discord.Net.Interactions/TypeReaders/TypeReader.cs index c8420d556..e518e0208 100644 --- a/src/Discord.Net.Interactions/TypeReaders/TypeReader.cs +++ b/src/Discord.Net.Interactions/TypeReaders/TypeReader.cs @@ -33,7 +33,7 @@ namespace Discord.Interactions /// /// A task representing the conversion process. The result of the task contains the conversion result. /// - public virtual Task SerializeAsync(object obj) => Task.FromResult(obj.ToString()); + public virtual Task SerializeAsync(object obj, IServiceProvider services) => Task.FromResult(obj.ToString()); } ///