mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 17:28:27 -04:00
Updated command strings with the description of every param of every command (machine generated)
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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; }
|
||||||
}
|
}
|
@@ -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
Reference in New Issue
Block a user