Updated command strings with the description of every param of every command (machine generated)

This commit is contained in:
Kwoth
2024-05-07 12:09:02 +00:00
parent 8e589660ac
commit 03c5124122
4 changed files with 3852 additions and 1778 deletions

View File

@@ -1,15 +1,20 @@
#nullable disable #nullable disable
using StackExchange.Redis; using StackExchange.Redis;
using System.Text.Json;
using System.Web; using System.Web;
namespace NadekoBot.Services; namespace NadekoBot.Services;
// todo fix
/// <summary> /// <summary>
/// Uses <see cref="IStringsSource" /> to load strings into redis hash (only on Shard 0) /// Uses <see cref="IStringsSource" /> to load strings into redis hash (only on Shard 0)
/// and retrieves them from redis via <see cref="GetText" /> /// and retrieves them from redis via <see cref="GetText" />
/// </summary> /// </summary>
public class RedisBotStringsProvider : IBotStringsProvider public class RedisBotStringsProvider : IBotStringsProvider
{ {
private const string COMMANDS_KEY = "commands_v5";
private readonly ConnectionMultiplexer _redis; private readonly ConnectionMultiplexer _redis;
private readonly IStringsSource _source; private readonly IStringsSource _source;
private readonly IBotCredentials _creds; private readonly IBotCredentials _creds;
@@ -36,20 +41,28 @@ public class RedisBotStringsProvider : IBotStringsProvider
public CommandStrings GetCommandStrings(string localeName, string commandName) public CommandStrings GetCommandStrings(string localeName, string commandName)
{ {
string argsStr = _redis.GetDatabase() string examplesStr = _redis.GetDatabase()
.HashGet($"{_creds.RedisKey()}:commands:{localeName}", $"{commandName}::args"); .HashGet($"{_creds.RedisKey()}:{COMMANDS_KEY}:{localeName}",
if (argsStr == default) $"{commandName}::examples");
if (examplesStr == default)
return null; return null;
var descStr = _redis.GetDatabase() var descStr = _redis.GetDatabase()
.HashGet($"{_creds.RedisKey()}:commands:{localeName}", $"{commandName}::desc"); .HashGet($"{_creds.RedisKey()}:{COMMANDS_KEY}:{localeName}", $"{commandName}::desc");
if (descStr == default) if (descStr == default)
return null; return null;
var args = argsStr.Split('&').Map(HttpUtility.UrlDecode); var ex = examplesStr.Split('&').Map(HttpUtility.UrlDecode);
var paramsStr = _redis.GetDatabase()
.HashGet($"{_creds.RedisKey()}:{COMMANDS_KEY}:{localeName}", $"{commandName}::params");
if (paramsStr == default)
return null;
return new() return new()
{ {
Args = args, Examples = ex,
Params = JsonSerializer.Deserialize<Dictionary<string, CommandStringParam>[]>(paramsStr),
Desc = descStr Desc = descStr
}; };
} }
@@ -67,12 +80,14 @@ public class RedisBotStringsProvider : IBotStringsProvider
foreach (var (localeName, localeStrings) in _source.GetCommandStrings()) foreach (var (localeName, localeStrings) in _source.GetCommandStrings())
{ {
var hashFields = localeStrings var hashFields = localeStrings
.Select(x => new HashEntry($"{x.Key}::args", .Select(x => new HashEntry($"{x.Key}::examples",
string.Join('&', x.Value.Args.Map(HttpUtility.UrlEncode)))) string.Join('&', x.Value.Examples.Map(HttpUtility.UrlEncode))))
.Concat(localeStrings.Select(x => new HashEntry($"{x.Key}::desc", x.Value.Desc))) .Concat(localeStrings.Select(x => new HashEntry($"{x.Key}::desc", x.Value.Desc)))
.Concat(localeStrings.Select(x
=> new HashEntry($"{x.Key}::params", JsonSerializer.Serialize(x.Value.Params))))
.ToArray(); .ToArray();
redisDb.HashSet($"{_creds.RedisKey()}:commands:{localeName}", hashFields); redisDb.HashSet($"{_creds.RedisKey()}:{COMMANDS_KEY}:{localeName}", hashFields);
} }
} }
} }

View File

@@ -1,13 +1,35 @@
#nullable disable #nullable disable
using YamlDotNet.Core;
using YamlDotNet.Serialization; using YamlDotNet.Serialization;
namespace NadekoBot.Services; namespace NadekoBot.Services;
public sealed class CommandStrings // public sealed record class CommandStrings
// {
// [YamlMember(Alias = "desc")]
// public string Desc { get; set; }
//
// [YamlMember(Alias = "args")]
// public string[] Args { get; set; }
// }
public sealed record class CommandStrings
{ {
[YamlMember(Alias = "desc")] [YamlMember(Alias = "desc")]
public string Desc { get; set; } public string Desc { get; set; }
[YamlMember(Alias = "args")] [YamlMember(Alias = "ex")]
public string[] Args { get; set; } public string[] Examples { get; set; }
[YamlMember(Alias = "params")]
public Dictionary<string, CommandStringParam>[] Params { get; set; }
}
public sealed record class CommandStringParam
{
// [YamlMember(Alias = "type", ScalarStyle = ScalarStyle.DoubleQuoted)]
// public string Type { get; set; }
[YamlMember(Alias = "desc", ScalarStyle = ScalarStyle.DoubleQuoted)]
public string Desc{ get; set; }
} }

View File

@@ -81,8 +81,9 @@ public class BotStrings : IBotStrings
return new CommandStrings() return new CommandStrings()
{ {
Args = new[] { "" }, Examples = new[] { "" },
Desc = "?" Desc = "?",
Params = []
}; };
} }

File diff suppressed because it is too large Load Diff