From c6c545cb19e1e81d378721f0e914cebd244ab233 Mon Sep 17 00:00:00 2001 From: Cenngo Date: Sat, 23 Apr 2022 18:49:38 +0300 Subject: [PATCH] fix implementation bugs --- .../ResxLocalizationManager.cs | 23 +++++++++++-------- .../Utilities/CommandHierarchy.cs | 6 ++--- .../API/Common/ApplicationCommandOption.cs | 7 ++++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs b/src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs index f7920565f..7b0ab6ed3 100644 --- a/src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs +++ b/src/Discord.Net.Interactions/LocalizationManagers/ResxLocalizationManager.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Collections.Immutable; +using System.Diagnostics; using System.Globalization; +using System.Linq; using System.Reflection; using System.Resources; using System.Threading.Tasks; @@ -15,11 +18,13 @@ namespace Discord.Interactions { private const string NameIdentifier = "name"; private const string DescriptionIdentifier = "description"; + private const string SpaceToken = "~"; private readonly string _baseResource; private readonly Assembly _assembly; private static readonly ConcurrentDictionary _localizerCache = new(); private readonly IEnumerable _supportedLocales; + private readonly IEnumerable _resourceNames; /// /// Initializes a new instance of the class. @@ -32,6 +37,7 @@ namespace Discord.Interactions _baseResource = baseResource; _assembly = assembly; _supportedLocales = supportedLocales; + _resourceNames = assembly.GetManifestResourceNames(); } /// @@ -44,20 +50,19 @@ namespace Discord.Interactions private IDictionary GetValues(IList key, string identifier) { - var result = new Dictionary(); + var resourceName = (_baseResource + "." + string.Join(".", key)).Replace(" ", SpaceToken); + + if (!_resourceNames.Any(x => string.Equals(resourceName + ".resources", x, StringComparison.OrdinalIgnoreCase))) + return ImmutableDictionary.Empty; - var resourceName = _baseResource + "." + string.Join(".", key); + var result = new Dictionary(); var resourceManager = _localizerCache.GetOrAdd(resourceName, new ResourceManager(resourceName, _assembly)); foreach (var locale in _supportedLocales) { - try - { - var value = resourceManager.GetString(identifier, locale); - if (value is not null) - result[locale.Name] = value; - } - catch (MissingManifestResourceException){} + var value = resourceManager.GetString(identifier, locale); + if (value is not null) + result[locale.Name] = value; } return result; diff --git a/src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs b/src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs index 0b62eede2..a4554eaef 100644 --- a/src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs +++ b/src/Discord.Net.Interactions/Utilities/CommandHierarchy.cs @@ -29,21 +29,21 @@ namespace Discord.Interactions return new string[] { commandInfo.Name }; var path = commandInfo.Module.GetModulePath(); - path.Insert(0, commandInfo.Name); + path.Add(commandInfo.Name); return path; } public static IList GetParameterPath(this IParameterInfo parameterInfo) { var path = parameterInfo.Command.GetCommandPath(); - path.Insert(0, parameterInfo.Name); + path.Add(parameterInfo.Name); return path; } public static IList GetChoicePath(this IParameterInfo parameterInfo, ParameterChoice choice) { var path = parameterInfo.GetParameterPath(); - path.Insert(0, choice.Name); + path.Add(choice.Name); return path; } diff --git a/src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs b/src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs index e8f54c1ed..f44331d58 100644 --- a/src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs +++ b/src/Discord.Net.Rest/API/Common/ApplicationCommandOption.cs @@ -75,8 +75,8 @@ namespace Discord.API Type = cmd.Type; Description = cmd.Description; - NameLocalizations = cmd.NameLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional>.Unspecified; - DescriptionLocalizations = cmd.DescriptionLocalizations?.ToDictionary(x => x.Key, x => x.Value) ?? Optional>.Unspecified; + NameLocalizations = cmd.NameLocalizations?.ToDictionary() ?? Optional>.Unspecified; + DescriptionLocalizations = cmd.DescriptionLocalizations?.ToDictionary() ?? Optional>.Unspecified; NameLocalized = cmd.NameLocalized; DescriptionLocalized = cmd.DescriptionLocalized; } @@ -102,6 +102,9 @@ namespace Discord.API Type = option.Type; Description = option.Description; Autocomplete = option.IsAutocomplete; + + NameLocalizations = option.NameLocalizations?.ToDictionary() ?? Optional>.Unspecified; + DescriptionLocalizations = option.DescriptionLocalizations?.ToDictionary() ?? Optional>.Unspecified; } } }