Lazyload server language setting in translationHandler
This commit is contained in:
parent
35f0a5c8f8
commit
80c2bd8500
5 changed files with 36 additions and 39 deletions
|
@ -138,7 +138,7 @@ namespace Geekbot.net.Commands.Admin
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyAsync(
|
await ReplyAsync(
|
||||||
$"That doesn't seem to be a supported language\r\nSupported Languages are {string.Join(", ", _translation.GetSupportedLanguages())}");
|
$"That doesn't seem to be a supported language\r\nSupported Languages are {string.Join(", ", _translation.SupportedLanguages)}");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,9 +9,6 @@ namespace Geekbot.net.Lib.AlmostRedis
|
||||||
{
|
{
|
||||||
private readonly GeekbotLogger _logger;
|
private readonly GeekbotLogger _logger;
|
||||||
private readonly RunParameters _runParameters;
|
private readonly RunParameters _runParameters;
|
||||||
private IDatabase _database;
|
|
||||||
private ConnectionMultiplexer _connection;
|
|
||||||
private IAlmostRedis _almostRedisImplementation;
|
|
||||||
|
|
||||||
public AlmostRedis(GeekbotLogger logger, RunParameters runParameters)
|
public AlmostRedis(GeekbotLogger logger, RunParameters runParameters)
|
||||||
{
|
{
|
||||||
|
@ -21,24 +18,18 @@ namespace Geekbot.net.Lib.AlmostRedis
|
||||||
|
|
||||||
public void Connect()
|
public void Connect()
|
||||||
{
|
{
|
||||||
_connection = ConnectionMultiplexer.Connect($"{_runParameters.RedisHost}:{_runParameters.RedisPort}");
|
Connection = ConnectionMultiplexer.Connect($"{_runParameters.RedisHost}:{_runParameters.RedisPort}");
|
||||||
_database = _connection.GetDatabase(int.Parse(_runParameters.RedisDatabase));
|
Db = Connection.GetDatabase(int.Parse(_runParameters.RedisDatabase));
|
||||||
_logger.Information(LogSource.Redis, $"Connected to Redis on {_connection.Configuration} at {_database.Database}");
|
_logger.Information(LogSource.Redis, $"Connected to Redis on {Connection.Configuration} at {Db.Database}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDatabase Db
|
public IDatabase Db { get; private set; }
|
||||||
{
|
|
||||||
get { return _database; }
|
public ConnectionMultiplexer Connection { get; private set; }
|
||||||
}
|
|
||||||
|
|
||||||
public ConnectionMultiplexer Connection
|
|
||||||
{
|
|
||||||
get { return _connection; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<RedisKey> GetAllKeys()
|
public IEnumerable<RedisKey> GetAllKeys()
|
||||||
{
|
{
|
||||||
return _connection.GetServer($"{_runParameters.RedisHost}:{_runParameters.RedisPort}", int.Parse(_runParameters.RedisDatabase)).Keys();
|
return Connection.GetServer($"{_runParameters.RedisHost}:{_runParameters.RedisPort}", int.Parse(_runParameters.RedisDatabase)).Keys();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,6 +9,6 @@ namespace Geekbot.net.Lib.Localization
|
||||||
Dictionary<string, string> GetDict(ICommandContext context);
|
Dictionary<string, string> GetDict(ICommandContext context);
|
||||||
Dictionary<string, string> GetDict(ICommandContext context, string command);
|
Dictionary<string, string> GetDict(ICommandContext context, string command);
|
||||||
bool SetLanguage(ulong guildId, string language);
|
bool SetLanguage(ulong guildId, string language);
|
||||||
List<string> GetSupportedLanguages();
|
List<string> SupportedLanguages { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -16,17 +16,17 @@ namespace Geekbot.net.Lib.Localization
|
||||||
{
|
{
|
||||||
private readonly DatabaseContext _database;
|
private readonly DatabaseContext _database;
|
||||||
private readonly IGeekbotLogger _logger;
|
private readonly IGeekbotLogger _logger;
|
||||||
|
private readonly Dictionary<ulong, string> _serverLanguages;
|
||||||
private Dictionary<string, Dictionary<string, Dictionary<string, string>>> _translations;
|
private Dictionary<string, Dictionary<string, Dictionary<string, string>>> _translations;
|
||||||
private Dictionary<ulong, string> _serverLanguages;
|
|
||||||
private List<string> _supportedLanguages;
|
private List<string> _supportedLanguages;
|
||||||
|
|
||||||
public TranslationHandler(IReadOnlyCollection<SocketGuild> clientGuilds, DatabaseContext database, IGeekbotLogger logger)
|
public TranslationHandler(DatabaseContext database, IGeekbotLogger logger)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_logger.Information(LogSource.Geekbot, "Loading Translations");
|
_logger.Information(LogSource.Geekbot, "Loading Translations");
|
||||||
LoadTranslations();
|
LoadTranslations();
|
||||||
LoadServerLanguages(clientGuilds);
|
_serverLanguages = new Dictionary<ulong, string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadTranslations()
|
private void LoadTranslations()
|
||||||
|
@ -78,28 +78,37 @@ namespace Geekbot.net.Lib.Localization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadServerLanguages(IReadOnlyCollection<SocketGuild> clientGuilds)
|
private string GetServerLanguage(ulong guildId)
|
||||||
{
|
{
|
||||||
_serverLanguages = new Dictionary<ulong, string>();
|
try
|
||||||
foreach (var guild in clientGuilds)
|
|
||||||
{
|
{
|
||||||
var language = _database.GuildSettings
|
string lang;
|
||||||
.FirstOrDefault(g => g.GuildId.Equals(guild.Id.AsLong()))
|
try
|
||||||
?.Language ?? "EN";
|
|
||||||
if (string.IsNullOrEmpty(language) || !_supportedLanguages.Contains(language))
|
|
||||||
{
|
{
|
||||||
_serverLanguages[guild.Id] = "EN";
|
lang = _serverLanguages[guildId];
|
||||||
|
if (!string.IsNullOrEmpty(lang))
|
||||||
|
{
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
throw new Exception();
|
||||||
}
|
}
|
||||||
else
|
catch
|
||||||
{
|
{
|
||||||
_serverLanguages[guild.Id] = language;
|
lang = GetGuild(guildId).Language ?? "EN";
|
||||||
|
_serverLanguages[guildId] = lang;
|
||||||
|
return lang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
_logger.Error(LogSource.Geekbot, "Could not get guild langage", e);
|
||||||
|
return "EN";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetString(ulong guildId, string command, string stringName)
|
public string GetString(ulong guildId, string command, string stringName)
|
||||||
{
|
{
|
||||||
var translation = _translations[_serverLanguages[guildId]][command][stringName];
|
var translation = _translations[GetServerLanguage(guildId)][command][stringName];
|
||||||
if (!string.IsNullOrWhiteSpace(translation)) return translation;
|
if (!string.IsNullOrWhiteSpace(translation)) return translation;
|
||||||
translation = _translations[command][stringName]["EN"];
|
translation = _translations[command][stringName]["EN"];
|
||||||
if (string.IsNullOrWhiteSpace(translation))
|
if (string.IsNullOrWhiteSpace(translation))
|
||||||
|
@ -114,7 +123,7 @@ namespace Geekbot.net.Lib.Localization
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var command = context.Message.Content.Split(' ').First().TrimStart('!').ToLower();
|
var command = context.Message.Content.Split(' ').First().TrimStart('!').ToLower();
|
||||||
return _translations[_serverLanguages[context.Guild.Id]][command];
|
return _translations[GetServerLanguage(context.Guild.Id)][command];
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -127,7 +136,7 @@ namespace Geekbot.net.Lib.Localization
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return _translations[_serverLanguages[context.Guild.Id]][command];
|
return _translations[GetServerLanguage(context.Guild.Id)][command];
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -154,10 +163,7 @@ namespace Geekbot.net.Lib.Localization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<string> GetSupportedLanguages()
|
public List<string> SupportedLanguages => _supportedLanguages;
|
||||||
{
|
|
||||||
return _supportedLanguages;
|
|
||||||
}
|
|
||||||
|
|
||||||
private GuildSettingsModel GetGuild(ulong guildId)
|
private GuildSettingsModel GetGuild(ulong guildId)
|
||||||
{
|
{
|
||||||
|
|
|
@ -152,7 +152,7 @@ namespace Geekbot.net
|
||||||
_logger.Information(LogSource.Geekbot, $"Now Connected as {_client.CurrentUser.Username} to {_client.Guilds.Count} Servers");
|
_logger.Information(LogSource.Geekbot, $"Now Connected as {_client.CurrentUser.Username} to {_client.Guilds.Count} Servers");
|
||||||
|
|
||||||
_logger.Information(LogSource.Geekbot, "Registering Stuff");
|
_logger.Information(LogSource.Geekbot, "Registering Stuff");
|
||||||
var translationHandler = new TranslationHandler(_client.Guilds, _database, _logger);
|
var translationHandler = new TranslationHandler(_database, _logger);
|
||||||
var errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters.ExposeErrors);
|
var errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters.ExposeErrors);
|
||||||
var reactionListener = new ReactionListener(_redis.Db);
|
var reactionListener = new ReactionListener(_redis.Db);
|
||||||
await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
|
await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
|
||||||
|
|
Loading…
Reference in a new issue