|
|
@@ -1,5 +1,6 @@ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Collections.Immutable; |
|
|
|
using System.Linq; |
|
|
|
|
|
|
|
namespace Discord.Interactions |
|
|
@@ -9,6 +10,9 @@ namespace Discord.Interactions |
|
|
|
#region Parameters |
|
|
|
public static ApplicationCommandOptionProperties ToApplicationCommandOptionProps(this SlashCommandParameterInfo parameterInfo) |
|
|
|
{ |
|
|
|
var localizationManager = parameterInfo.Command.Module.CommandService._localizationManager; |
|
|
|
var parameterPath = parameterInfo.GetParameterPath(); |
|
|
|
|
|
|
|
var props = new ApplicationCommandOptionProperties |
|
|
|
{ |
|
|
|
Name = parameterInfo.Name, |
|
|
@@ -23,7 +27,9 @@ namespace Discord.Interactions |
|
|
|
ChannelTypes = parameterInfo.ChannelTypes?.ToList(), |
|
|
|
IsAutocomplete = parameterInfo.IsAutocomplete, |
|
|
|
MaxValue = parameterInfo.MaxValue, |
|
|
|
MinValue = parameterInfo.MinValue |
|
|
|
MinValue = parameterInfo.MinValue, |
|
|
|
NameLocalizations = localizationManager?.GetAllNames(parameterPath, LocalizationTarget.Parameter) ?? ImmutableDictionary<string, string>.Empty, |
|
|
|
DescriptionLocalizations = localizationManager?.GetAllDescriptions(parameterPath, LocalizationTarget.Parameter) ?? ImmutableDictionary<string, string>.Empty |
|
|
|
}; |
|
|
|
|
|
|
|
parameterInfo.TypeConverter.Write(props, parameterInfo); |
|
|
@@ -36,12 +42,17 @@ namespace Discord.Interactions |
|
|
|
|
|
|
|
public static SlashCommandProperties ToApplicationCommandProps(this SlashCommandInfo commandInfo) |
|
|
|
{ |
|
|
|
var commandPath = commandInfo.GetCommandPath(); |
|
|
|
var localizationManager = commandInfo.Module.CommandService._localizationManager; |
|
|
|
|
|
|
|
var props = new SlashCommandBuilder() |
|
|
|
{ |
|
|
|
Name = commandInfo.Name, |
|
|
|
Description = commandInfo.Description, |
|
|
|
IsDefaultPermission = commandInfo.DefaultPermission, |
|
|
|
}.Build(); |
|
|
|
}.WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.WithDescriptionLocalizations(localizationManager?.GetAllDescriptions(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.Build(); |
|
|
|
|
|
|
|
if (commandInfo.Parameters.Count > SlashCommandBuilder.MaxOptionsCount) |
|
|
|
throw new InvalidOperationException($"Slash Commands cannot have more than {SlashCommandBuilder.MaxOptionsCount} command parameters"); |
|
|
@@ -51,23 +62,40 @@ namespace Discord.Interactions |
|
|
|
return props; |
|
|
|
} |
|
|
|
|
|
|
|
public static ApplicationCommandOptionProperties ToApplicationCommandOptionProps(this SlashCommandInfo commandInfo) => |
|
|
|
new ApplicationCommandOptionProperties |
|
|
|
public static ApplicationCommandOptionProperties ToApplicationCommandOptionProps(this SlashCommandInfo commandInfo) |
|
|
|
{ |
|
|
|
var localizationManager = commandInfo.Module.CommandService._localizationManager; |
|
|
|
var commandPath = commandInfo.GetCommandPath(); |
|
|
|
|
|
|
|
return new ApplicationCommandOptionProperties |
|
|
|
{ |
|
|
|
Name = commandInfo.Name, |
|
|
|
Description = commandInfo.Description, |
|
|
|
Type = ApplicationCommandOptionType.SubCommand, |
|
|
|
IsRequired = false, |
|
|
|
Options = commandInfo.FlattenedParameters?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() |
|
|
|
Options = commandInfo.FlattenedParameters?.Select(x => x.ToApplicationCommandOptionProps()) |
|
|
|
?.ToList(), |
|
|
|
NameLocalizations = localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty, |
|
|
|
DescriptionLocalizations = localizationManager?.GetAllDescriptions(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) |
|
|
|
=> commandInfo.CommandType switch |
|
|
|
{ |
|
|
|
var localizationManager = commandInfo.Module.CommandService._localizationManager; |
|
|
|
var commandPath = commandInfo.GetCommandPath(); |
|
|
|
|
|
|
|
return commandInfo.CommandType switch |
|
|
|
{ |
|
|
|
ApplicationCommandType.Message => new MessageCommandBuilder { Name = commandInfo.Name, IsDefaultPermission = commandInfo.DefaultPermission}.Build(), |
|
|
|
ApplicationCommandType.User => new UserCommandBuilder { Name = commandInfo.Name, IsDefaultPermission=commandInfo.DefaultPermission}.Build(), |
|
|
|
ApplicationCommandType.Message => new MessageCommandBuilder { Name = commandInfo.Name, IsDefaultPermission = commandInfo.DefaultPermission} |
|
|
|
.WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.Build(), |
|
|
|
ApplicationCommandType.User => new UserCommandBuilder { Name = commandInfo.Name, IsDefaultPermission=commandInfo.DefaultPermission} |
|
|
|
.WithNameLocalizations(localizationManager?.GetAllNames(commandPath, LocalizationTarget.Command) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.Build(), |
|
|
|
_ => throw new InvalidOperationException($"{commandInfo.CommandType} isn't a supported command type.") |
|
|
|
}; |
|
|
|
} |
|
|
|
#endregion |
|
|
|
|
|
|
|
#region Modules |
|
|
@@ -108,12 +136,18 @@ namespace Discord.Interactions |
|
|
|
|
|
|
|
options.AddRange(moduleInfo.SubModules?.SelectMany(x => x.ParseSubModule(args, ignoreDontRegister))); |
|
|
|
|
|
|
|
var localizationManager = moduleInfo.CommandService._localizationManager; |
|
|
|
var modulePath = moduleInfo.GetModulePath(); |
|
|
|
|
|
|
|
var props = new SlashCommandBuilder |
|
|
|
{ |
|
|
|
Name = moduleInfo.SlashGroupName, |
|
|
|
Description = moduleInfo.Description, |
|
|
|
IsDefaultPermission = moduleInfo.DefaultPermission, |
|
|
|
}.Build(); |
|
|
|
} |
|
|
|
.WithNameLocalizations(localizationManager?.GetAllNames(modulePath, LocalizationTarget.Group) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.WithDescriptionLocalizations(localizationManager?.GetAllDescriptions(modulePath, LocalizationTarget.Group) ?? ImmutableDictionary<string, string>.Empty) |
|
|
|
.Build(); |
|
|
|
|
|
|
|
if (options.Count > SlashCommandBuilder.MaxOptionsCount) |
|
|
|
throw new InvalidOperationException($"Slash Commands cannot have more than {SlashCommandBuilder.MaxOptionsCount} command parameters"); |
|
|
@@ -151,7 +185,11 @@ namespace Discord.Interactions |
|
|
|
Name = moduleInfo.SlashGroupName, |
|
|
|
Description = moduleInfo.Description, |
|
|
|
Type = ApplicationCommandOptionType.SubCommandGroup, |
|
|
|
Options = options |
|
|
|
Options = options, |
|
|
|
NameLocalizations = moduleInfo.CommandService._localizationManager?.GetAllNames(moduleInfo.GetModulePath(), LocalizationTarget.Group) |
|
|
|
?? ImmutableDictionary<string, string>.Empty, |
|
|
|
DescriptionLocalizations = moduleInfo.CommandService._localizationManager?.GetAllDescriptions(moduleInfo.GetModulePath(), LocalizationTarget.Group) |
|
|
|
?? ImmutableDictionary<string, string>.Empty, |
|
|
|
} }; |
|
|
|
} |
|
|
|
|
|
|
@@ -166,17 +204,23 @@ namespace Discord.Interactions |
|
|
|
Name = command.Name, |
|
|
|
Description = command.Description, |
|
|
|
IsDefaultPermission = command.IsDefaultPermission, |
|
|
|
Options = command.Options?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified |
|
|
|
Options = command.Options?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified, |
|
|
|
NameLocalizations = command.NameLocalizations?.ToImmutableDictionary(), |
|
|
|
DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary(), |
|
|
|
}, |
|
|
|
ApplicationCommandType.User => new UserCommandProperties |
|
|
|
{ |
|
|
|
Name = command.Name, |
|
|
|
IsDefaultPermission = command.IsDefaultPermission |
|
|
|
IsDefaultPermission = command.IsDefaultPermission, |
|
|
|
NameLocalizations = command.NameLocalizations?.ToImmutableDictionary(), |
|
|
|
DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary() |
|
|
|
}, |
|
|
|
ApplicationCommandType.Message => new MessageCommandProperties |
|
|
|
{ |
|
|
|
Name = command.Name, |
|
|
|
IsDefaultPermission = command.IsDefaultPermission |
|
|
|
IsDefaultPermission = command.IsDefaultPermission, |
|
|
|
NameLocalizations = command.NameLocalizations?.ToImmutableDictionary(), |
|
|
|
DescriptionLocalizations = command.DescriptionLocalizations?.ToImmutableDictionary() |
|
|
|
}, |
|
|
|
_ => throw new InvalidOperationException($"Cannot create command properties for command type {command.Type}"), |
|
|
|
}; |
|
|
@@ -194,7 +238,9 @@ namespace Discord.Interactions |
|
|
|
Name = x.Name, |
|
|
|
Value = x.Value |
|
|
|
}).ToList(), |
|
|
|
Options = commandOption.Options?.Select(x => x.ToApplicationCommandOptionProps()).ToList() |
|
|
|
Options = commandOption.Options?.Select(x => x.ToApplicationCommandOptionProps()).ToList(), |
|
|
|
NameLocalizations = commandOption.NameLocalizations?.ToImmutableDictionary(), |
|
|
|
DescriptionLocalizations = commandOption.DescriptionLocalizations?.ToImmutableDictionary() |
|
|
|
}; |
|
|
|
} |
|
|
|
} |