|
|
@@ -34,14 +34,22 @@ namespace Discord.Interactions |
|
|
|
|
|
|
|
#region Commands |
|
|
|
|
|
|
|
public static ApplicationCommandProperties ToApplicationCommandProps(this SlashCommandInfo commandInfo) => |
|
|
|
new SlashCommandProperties |
|
|
|
public static SlashCommandProperties ToApplicationCommandProps(this SlashCommandInfo commandInfo) |
|
|
|
{ |
|
|
|
var props = new SlashCommandBuilder() |
|
|
|
{ |
|
|
|
Name = commandInfo.Name, |
|
|
|
Description = commandInfo.Description, |
|
|
|
IsDefaultPermission = commandInfo.DefaultPermission, |
|
|
|
Options = commandInfo.Parameters.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified |
|
|
|
}; |
|
|
|
}.Build(); |
|
|
|
|
|
|
|
if (commandInfo.Parameters.Count > SlashCommandBuilder.MaxOptionsCount) |
|
|
|
throw new InvalidOperationException($"Slash Commands cannot have more than {SlashCommandBuilder.MaxOptionsCount} command parameters"); |
|
|
|
|
|
|
|
props.Options = commandInfo.Parameters.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified; |
|
|
|
|
|
|
|
return props; |
|
|
|
} |
|
|
|
|
|
|
|
public static ApplicationCommandOptionProperties ToApplicationCommandOptionProps(this SlashCommandInfo commandInfo) => |
|
|
|
new ApplicationCommandOptionProperties |
|
|
@@ -53,11 +61,12 @@ namespace Discord.Interactions |
|
|
|
Options = commandInfo.Parameters?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() |
|
|
|
}; |
|
|
|
|
|
|
|
public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) => |
|
|
|
new ContextCommandProperties(commandInfo.CommandType) |
|
|
|
public static ApplicationCommandProperties ToApplicationCommandProps(this ContextCommandInfo commandInfo) |
|
|
|
=> commandInfo.CommandType switch |
|
|
|
{ |
|
|
|
Name = commandInfo.Name, |
|
|
|
IsDefaultPermission = commandInfo.DefaultPermission |
|
|
|
ApplicationCommandType.Message => new MessageCommandBuilder { Name = commandInfo.Name, IsDefaultPermission = commandInfo.DefaultPermission}.Build(), |
|
|
|
ApplicationCommandType.User => new UserCommandBuilder { Name = commandInfo.Name, IsDefaultPermission=commandInfo.DefaultPermission}.Build(), |
|
|
|
_ => throw new InvalidOperationException($"{commandInfo.CommandType} isn't a supported command type.") |
|
|
|
}; |
|
|
|
#endregion |
|
|
|
|
|
|
@@ -99,13 +108,19 @@ namespace Discord.Interactions |
|
|
|
|
|
|
|
options.AddRange(moduleInfo.SubModules?.SelectMany(x => x.ParseSubModule(args, ignoreDontRegister))); |
|
|
|
|
|
|
|
args.Add(new SlashCommandProperties |
|
|
|
var props = new SlashCommandBuilder |
|
|
|
{ |
|
|
|
Name = moduleInfo.SlashGroupName.ToLower(), |
|
|
|
Description = moduleInfo.Description, |
|
|
|
IsDefaultPermission = moduleInfo.DefaultPermission, |
|
|
|
Options = options |
|
|
|
}); |
|
|
|
}.Build(); |
|
|
|
|
|
|
|
if (options.Count > SlashCommandBuilder.MaxOptionsCount) |
|
|
|
throw new InvalidOperationException($"Slash Commands cannot have more than {SlashCommandBuilder.MaxOptionsCount} command parameters"); |
|
|
|
|
|
|
|
props.Options = options; |
|
|
|
|
|
|
|
args.Add(props); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -153,7 +168,12 @@ namespace Discord.Interactions |
|
|
|
IsDefaultPermission = command.IsDefaultPermission, |
|
|
|
Options = command.Options?.Select(x => x.ToApplicationCommandOptionProps())?.ToList() ?? Optional<List<ApplicationCommandOptionProperties>>.Unspecified |
|
|
|
}, |
|
|
|
ApplicationCommandType.User or ApplicationCommandType.Message => new ContextCommandProperties(command.Type) |
|
|
|
ApplicationCommandType.User => new UserCommandProperties |
|
|
|
{ |
|
|
|
Name = command.Name, |
|
|
|
IsDefaultPermission = command.IsDefaultPermission |
|
|
|
}, |
|
|
|
ApplicationCommandType.Message => new MessageCommandProperties |
|
|
|
{ |
|
|
|
Name = command.Name, |
|
|
|
IsDefaultPermission = command.IsDefaultPermission |
|
|
@@ -177,14 +197,4 @@ namespace Discord.Interactions |
|
|
|
Options = commandOption.Options?.Select(x => x.ToApplicationCommandOptionProps()).ToList() |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
internal sealed class ContextCommandProperties : ApplicationCommandProperties |
|
|
|
{ |
|
|
|
internal override ApplicationCommandType Type { get; } |
|
|
|
|
|
|
|
public ContextCommandProperties(ApplicationCommandType type) |
|
|
|
{ |
|
|
|
Type = type; |
|
|
|
} |
|
|
|
} |
|
|
|
} |