Delete the TranslationHandler and the old translations file. Refactor GeekbotCommandBase to get the server language from guild settings. Create DateLocalization to create a localized relative time remaining string.
This commit is contained in:
parent
078c884df7
commit
33829e91bc
22 changed files with 156 additions and 579 deletions
|
@ -14,7 +14,6 @@ using Geekbot.Core.CommandPreconditions;
|
|||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.Localization;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Admin
|
||||
{
|
||||
|
@ -24,21 +23,18 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
public class Admin : GeekbotCommandBase
|
||||
{
|
||||
private readonly DiscordSocketClient _client;
|
||||
private readonly IGuildSettingsManager _guildSettingsManager;
|
||||
|
||||
public Admin(DiscordSocketClient client, IErrorHandler errorHandler, IGuildSettingsManager guildSettingsManager, ITranslationHandler translationHandler) : base(errorHandler, translationHandler)
|
||||
public Admin(DiscordSocketClient client, IErrorHandler errorHandler, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_client = client;
|
||||
_guildSettingsManager = guildSettingsManager;
|
||||
}
|
||||
|
||||
[Command("welcome", RunMode = RunMode.Async)]
|
||||
[Summary("Set a Welcome Message (use '$user' to mention the new joined user).")]
|
||||
public async Task SetWelcomeMessage([Remainder, Summary("message")] string welcomeMessage)
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.WelcomeMessage = welcomeMessage;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
GuildSettings.WelcomeMessage = welcomeMessage;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
|
||||
var formatedMessage = welcomeMessage.Replace("$user", Context.User.Mention);
|
||||
await ReplyAsync($"Welcome message has been changed\r\nHere is an example of how it would look:\r\n{formatedMessage}");
|
||||
|
@ -52,9 +48,8 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
var m = await channel.SendMessageAsync("...");
|
||||
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.WelcomeChannel = channel.Id.AsLong();
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
GuildSettings.WelcomeChannel = channel.Id.AsLong();
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
|
||||
await m.DeleteAsync();
|
||||
|
||||
|
@ -74,9 +69,8 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
var m = await channel.SendMessageAsync("verifying...");
|
||||
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.ModChannel = channel.Id.AsLong();
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
GuildSettings.ModChannel = channel.Id.AsLong();
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.AppendLine("Successfully saved mod channel, you can now do the following");
|
||||
|
@ -96,13 +90,12 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
try
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
var modChannel = await GetModChannel(guild.ModChannel.AsUlong());
|
||||
var modChannel = await GetModChannel(GuildSettings.ModChannel.AsUlong());
|
||||
if (modChannel == null) return;
|
||||
|
||||
guild.ShowLeave = !guild.ShowLeave;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
await modChannel.SendMessageAsync(guild.ShowLeave
|
||||
GuildSettings.ShowLeave = !GuildSettings.ShowLeave;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
await modChannel.SendMessageAsync(GuildSettings.ShowLeave
|
||||
? "Saved - now sending messages here when someone leaves"
|
||||
: "Saved - stopping sending messages here when someone leaves"
|
||||
);
|
||||
|
@ -119,13 +112,12 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
try
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
var modChannel = await GetModChannel(guild.ModChannel.AsUlong());
|
||||
var modChannel = await GetModChannel(GuildSettings.ModChannel.AsUlong());
|
||||
if (modChannel == null) return;
|
||||
|
||||
guild.ShowDelete = !guild.ShowDelete;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
await modChannel.SendMessageAsync(guild.ShowDelete
|
||||
GuildSettings.ShowDelete = !GuildSettings.ShowDelete;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
await modChannel.SendMessageAsync(GuildSettings.ShowDelete
|
||||
? "Saved - now sending messages here when someone deletes a message"
|
||||
: "Saved - stopping sending messages here when someone deletes a message"
|
||||
);
|
||||
|
@ -138,31 +130,25 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
|
||||
[Command("setlang", RunMode = RunMode.Async)]
|
||||
[Summary("Change the bots language")]
|
||||
public async Task SetLanguage([Summary("language")] string languageRaw)
|
||||
public async Task SetLanguage([Summary("language")] string language)
|
||||
{
|
||||
try
|
||||
{
|
||||
var language = languageRaw.ToUpper();
|
||||
var success = await Translations.SetLanguage(Context.Guild.Id, language);
|
||||
if (success)
|
||||
var availableLanguages = new List<string>();
|
||||
availableLanguages.Add("en-GB"); // default
|
||||
availableLanguages.AddRange(GetAvailableCultures().Select(culture => culture.Name));
|
||||
if (availableLanguages.Contains(language))
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.Language = language;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
GuildSettings.Language = language;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language.ToLower() == "chde" ? "de-CH" : language);
|
||||
|
||||
if (language.ToLower() == "chde")
|
||||
{
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-ch");
|
||||
}
|
||||
|
||||
await ReplyAsync(Localization.Admin.NewLanguageSet);
|
||||
return;
|
||||
}
|
||||
|
||||
var available = new List<string>();
|
||||
available.Add("en-GB"); // default
|
||||
available.AddRange(GetAvailableCultures().Select(culture => culture.Name));
|
||||
await ReplyAsync($"That doesn't seem to be a supported language\nSupported Languages are {string.Join(", ", available)}");
|
||||
|
||||
await ReplyAsync($"That doesn't seem to be a supported language\nSupported Languages are {string.Join(", ", availableLanguages)}");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -177,9 +163,8 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
try
|
||||
{
|
||||
var language = languageRaw.ToLower();
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.WikiLang = language;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
GuildSettings.WikiLang = language;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
|
||||
await ReplyAsync($"Now using the {language} wikipedia");
|
||||
}
|
||||
|
@ -195,10 +180,10 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
try
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.Ping = !guild.Ping;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
await ReplyAsync(guild.Ping ? "i will reply to ping now" : "No more pongs...");
|
||||
// var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
GuildSettings.Ping = !GuildSettings.Ping;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
await ReplyAsync(GuildSettings.Ping ? "i will reply to ping now" : "No more pongs...");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -212,10 +197,10 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
{
|
||||
try
|
||||
{
|
||||
var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
guild.Hui = !guild.Hui;
|
||||
await _guildSettingsManager.UpdateSettings(guild);
|
||||
await ReplyAsync(guild.Hui ? "i will reply to hui now" : "No more hui's...");
|
||||
// var guild = _guildSettingsManager.GetSettings(Context.Guild.Id);
|
||||
GuildSettings.Hui = !GuildSettings.Hui;
|
||||
await GuildSettingsManager.UpdateSettings(GuildSettings);
|
||||
await ReplyAsync(GuildSettings.Hui ? "i will reply to hui now" : "No more hui's...");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -3,8 +3,10 @@ using System.Threading.Tasks;
|
|||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
using Geekbot.Core;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.GlobalSettings;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.Logger;
|
||||
using Geekbot.Core.UserRepository;
|
||||
|
||||
|
@ -12,20 +14,19 @@ namespace Geekbot.Bot.Commands.Admin.Owner
|
|||
{
|
||||
[Group("owner")]
|
||||
[RequireOwner]
|
||||
public class Owner : ModuleBase
|
||||
public class Owner : GeekbotCommandBase
|
||||
{
|
||||
private readonly DiscordSocketClient _client;
|
||||
private readonly IErrorHandler _errorHandler;
|
||||
private readonly IGlobalSettings _globalSettings;
|
||||
private readonly IGeekbotLogger _logger;
|
||||
private readonly IUserRepository _userRepository;
|
||||
|
||||
public Owner(DiscordSocketClient client, IGeekbotLogger logger, IUserRepository userRepositry, IErrorHandler errorHandler, IGlobalSettings globalSettings)
|
||||
public Owner(DiscordSocketClient client, IGeekbotLogger logger, IUserRepository userRepositry, IErrorHandler errorHandler, IGlobalSettings globalSettings,
|
||||
IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_client = client;
|
||||
_logger = logger;
|
||||
_userRepository = userRepositry;
|
||||
_errorHandler = errorHandler;
|
||||
_globalSettings = globalSettings;
|
||||
}
|
||||
|
||||
|
@ -73,7 +74,7 @@ namespace Geekbot.Bot.Commands.Admin.Owner
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await _errorHandler.HandleCommandException(e, Context,
|
||||
await ErrorHandler.HandleCommandException(e, Context,
|
||||
"Couldn't complete User Repository, see console for more info");
|
||||
}
|
||||
}
|
||||
|
@ -89,10 +90,10 @@ namespace Geekbot.Bot.Commands.Admin.Owner
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await _errorHandler.HandleCommandException(e, Context);
|
||||
await ErrorHandler.HandleCommandException(e, Context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Command("refreshuser", RunMode = RunMode.Async)]
|
||||
[Summary("Refresh a user in the user cache")]
|
||||
public async Task PopUserRepoCommand([Summary("user-id")] ulong userId)
|
||||
|
@ -105,7 +106,7 @@ namespace Geekbot.Bot.Commands.Admin.Owner
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await _errorHandler.HandleCommandException(e, Context);
|
||||
await ErrorHandler.HandleCommandException(e, Context);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,7 +120,7 @@ namespace Geekbot.Bot.Commands.Admin.Owner
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await _errorHandler.HandleCommandException(e, Context);
|
||||
await ErrorHandler.HandleCommandException(e, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
|
@ -11,7 +12,7 @@ using Geekbot.Core.Database;
|
|||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.ReactionListener;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Admin
|
||||
|
@ -23,7 +24,7 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
private readonly DatabaseContext _database;
|
||||
private readonly IReactionListener _reactionListener;
|
||||
|
||||
public Role(DatabaseContext database, IErrorHandler errorHandler, IReactionListener reactionListener, ITranslationHandler translationHandler) : base(errorHandler, translationHandler)
|
||||
public Role(DatabaseContext database, IErrorHandler errorHandler, IReactionListener reactionListener, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_reactionListener = reactionListener;
|
||||
|
@ -89,7 +90,14 @@ namespace Geekbot.Bot.Commands.Admin
|
|||
}
|
||||
catch (HttpException e)
|
||||
{
|
||||
await ErrorHandler.HandleHttpException(e, Context);
|
||||
if (e.HttpCode == HttpStatusCode.Forbidden)
|
||||
{
|
||||
await ReplyAsync(Localization.Internal.Http403);
|
||||
}
|
||||
else
|
||||
{
|
||||
await ErrorHandler.HandleCommandException(e, Context);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -2,13 +2,14 @@
|
|||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using Geekbot.Bot.Utils;
|
||||
using Geekbot.Core;
|
||||
using Geekbot.Core.Database;
|
||||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.KvInMemoryStore;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.RandomNumberGenerator;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Games.Roll
|
||||
|
@ -19,7 +20,8 @@ namespace Geekbot.Bot.Commands.Games.Roll
|
|||
private readonly DatabaseContext _database;
|
||||
private readonly IRandomNumberGenerator _randomNumberGenerator;
|
||||
|
||||
public Roll(IKvInMemoryStore kvInMemoryStore,IErrorHandler errorHandler, ITranslationHandler translation, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator) : base(errorHandler, translation)
|
||||
public Roll(IKvInMemoryStore kvInMemoryStore, IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator, IGuildSettingsManager guildSettingsManager)
|
||||
: base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_kvInMemoryStore = kvInMemoryStore;
|
||||
_database = database;
|
||||
|
@ -34,10 +36,9 @@ namespace Geekbot.Bot.Commands.Games.Roll
|
|||
{
|
||||
var number = _randomNumberGenerator.Next(1, 100);
|
||||
int.TryParse(stuff, out var guess);
|
||||
var transContext = await Translations.GetGuildContext(Context);
|
||||
if (guess <= 100 && guess > 0)
|
||||
{
|
||||
var kvKey = $"{Context.Guild.Id}:{Context.User.Id}:RollsPrevious";
|
||||
var kvKey = $"{Context?.Guild?.Id ?? 0}:{Context.User.Id}:RollsPrevious";
|
||||
|
||||
var prevRoll = _kvInMemoryStore.Get<RollTimeout>(kvKey);
|
||||
|
||||
|
@ -46,11 +47,11 @@ namespace Geekbot.Bot.Commands.Games.Roll
|
|||
await ReplyAsync(string.Format(
|
||||
Localization.Roll.NoPrevGuess,
|
||||
Context.Message.Author.Mention,
|
||||
transContext.FormatDateTimeAsRemaining(prevRoll.GuessedOn.AddDays(1))));
|
||||
DateLocalization.FormatDateTimeAsRemaining(prevRoll.GuessedOn.AddDays(1))));
|
||||
return;
|
||||
}
|
||||
|
||||
_kvInMemoryStore.Set(kvKey, new RollTimeout { LastGuess = guess, GuessedOn = DateTime.Now });
|
||||
_kvInMemoryStore.Set(kvKey, new RollTimeout {LastGuess = guess, GuessedOn = DateTime.Now});
|
||||
|
||||
await ReplyAsync(string.Format(Localization.Roll.Rolled, Context.Message.Author.Mention, number, guess));
|
||||
if (guess == number)
|
||||
|
@ -72,13 +73,13 @@ namespace Geekbot.Bot.Commands.Games.Roll
|
|||
await ErrorHandler.HandleCommandException(e, Context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private async Task<RollsModel> GetUser(ulong userId)
|
||||
{
|
||||
var user = _database.Rolls.FirstOrDefault(u =>u.GuildId.Equals(Context.Guild.Id.AsLong()) && u.UserId.Equals(userId.AsLong())) ?? await CreateNewRow(userId);
|
||||
var user = _database.Rolls.FirstOrDefault(u => u.GuildId.Equals(Context.Guild.Id.AsLong()) && u.UserId.Equals(userId.AsLong())) ?? await CreateNewRow(userId);
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
private async Task<RollsModel> CreateNewRow(ulong userId)
|
||||
{
|
||||
var user = new RollsModel()
|
||||
|
|
|
@ -8,7 +8,7 @@ using Geekbot.Core.Database;
|
|||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.RandomNumberGenerator;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Randomness
|
||||
|
@ -18,7 +18,7 @@ namespace Geekbot.Bot.Commands.Randomness
|
|||
private readonly IRandomNumberGenerator _randomNumberGenerator;
|
||||
private readonly DatabaseContext _database;
|
||||
|
||||
public Ship(DatabaseContext database, IErrorHandler errorHandler, IRandomNumberGenerator randomNumberGenerator, ITranslationHandler translations) : base(errorHandler, translations)
|
||||
public Ship(DatabaseContext database, IErrorHandler errorHandler, IRandomNumberGenerator randomNumberGenerator, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_randomNumberGenerator = randomNumberGenerator;
|
||||
|
|
|
@ -3,13 +3,14 @@ using System.Linq;
|
|||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Geekbot.Bot.Utils;
|
||||
using Geekbot.Core;
|
||||
using Geekbot.Core.CommandPreconditions;
|
||||
using Geekbot.Core.Database;
|
||||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.RandomNumberGenerator;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Rpg
|
||||
|
@ -22,7 +23,8 @@ namespace Geekbot.Bot.Commands.Rpg
|
|||
private readonly DatabaseContext _database;
|
||||
private readonly IRandomNumberGenerator _randomNumberGenerator;
|
||||
|
||||
public Cookies(DatabaseContext database, IErrorHandler errorHandler, ITranslationHandler translations , IRandomNumberGenerator randomNumberGenerator) : base(errorHandler, translations)
|
||||
public Cookies(DatabaseContext database, IErrorHandler errorHandler, IRandomNumberGenerator randomNumberGenerator, IGuildSettingsManager guildSettingsManager)
|
||||
: base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_randomNumberGenerator = randomNumberGenerator;
|
||||
|
@ -34,12 +36,11 @@ namespace Geekbot.Bot.Commands.Rpg
|
|||
{
|
||||
try
|
||||
{
|
||||
var transContext = await Translations.GetGuildContext(Context);
|
||||
var actor = await GetUser(Context.User.Id);
|
||||
if (actor.LastPayout.Value.AddDays(1).Date > DateTime.Now.Date)
|
||||
{
|
||||
var formatedWaitTime = transContext.FormatDateTimeAsRemaining(DateTimeOffset.Now.AddDays(1).Date);
|
||||
await ReplyAsync(string.Format(Localization.Cookies.WaitForMoreCookies, formatedWaitTime));
|
||||
var formattedWaitTime = DateLocalization.FormatDateTimeAsRemaining(DateTimeOffset.Now.AddDays(1).Date);
|
||||
await ReplyAsync(string.Format(Localization.Cookies.WaitForMoreCookies, formattedWaitTime));
|
||||
return;
|
||||
}
|
||||
actor.Cookies += 10;
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using Geekbot.Bot.Utils;
|
||||
using Geekbot.Core;
|
||||
using Geekbot.Core.CommandPreconditions;
|
||||
using Geekbot.Core.Database;
|
||||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
|
||||
namespace Geekbot.Bot.Commands.User
|
||||
{
|
||||
|
@ -19,12 +18,10 @@ namespace Geekbot.Bot.Commands.User
|
|||
public class Karma : GeekbotCommandBase
|
||||
{
|
||||
private readonly DatabaseContext _database;
|
||||
private readonly ITranslationHandler _translations;
|
||||
|
||||
public Karma(DatabaseContext database, IErrorHandler errorHandler, ITranslationHandler translations) : base(errorHandler, translations)
|
||||
public Karma(DatabaseContext database, IErrorHandler errorHandler, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_translations = translations;
|
||||
}
|
||||
|
||||
[Command("good", RunMode = RunMode.Async)]
|
||||
|
@ -33,8 +30,6 @@ namespace Geekbot.Bot.Commands.User
|
|||
{
|
||||
try
|
||||
{
|
||||
var transContext = await _translations.GetGuildContext(Context);
|
||||
|
||||
var actor = await GetUser(Context.User.Id);
|
||||
if (user.Id == Context.User.Id)
|
||||
{
|
||||
|
@ -42,7 +37,7 @@ namespace Geekbot.Bot.Commands.User
|
|||
}
|
||||
else if (TimeoutFinished(actor.TimeOut))
|
||||
{
|
||||
var formatedWaitTime = transContext.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3));
|
||||
var formatedWaitTime = DateLocalization.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3));
|
||||
await ReplyAsync(string.Format(Localization.Karma.WaitUntill, Context.User.Username, formatedWaitTime));
|
||||
}
|
||||
else
|
||||
|
@ -81,8 +76,6 @@ namespace Geekbot.Bot.Commands.User
|
|||
{
|
||||
try
|
||||
{
|
||||
var transContext = await _translations.GetGuildContext(Context);
|
||||
|
||||
var actor = await GetUser(Context.User.Id);
|
||||
if (user.Id == Context.User.Id)
|
||||
{
|
||||
|
@ -90,7 +83,7 @@ namespace Geekbot.Bot.Commands.User
|
|||
}
|
||||
else if (TimeoutFinished(actor.TimeOut))
|
||||
{
|
||||
var formatedWaitTime = transContext.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3));
|
||||
var formatedWaitTime = DateLocalization.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3));
|
||||
await ReplyAsync(string.Format(Localization.Karma.WaitUntill, Context.User.Username, formatedWaitTime));
|
||||
}
|
||||
else
|
||||
|
|
|
@ -10,8 +10,8 @@ using Geekbot.Core.Converters;
|
|||
using Geekbot.Core.Database;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.Highscores;
|
||||
using Geekbot.Core.Localization;
|
||||
|
||||
namespace Geekbot.Bot.Commands.User.Ranking
|
||||
{
|
||||
|
@ -21,7 +21,8 @@ namespace Geekbot.Bot.Commands.User.Ranking
|
|||
private readonly IHighscoreManager _highscoreManager;
|
||||
private readonly DatabaseContext _database;
|
||||
|
||||
public Rank(DatabaseContext database, IErrorHandler errorHandler, IEmojiConverter emojiConverter, IHighscoreManager highscoreManager, ITranslationHandler translations): base(errorHandler, translations)
|
||||
public Rank(DatabaseContext database, IErrorHandler errorHandler, IEmojiConverter emojiConverter, IHighscoreManager highscoreManager, IGuildSettingsManager guildSettingsManager)
|
||||
: base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_emojiConverter = emojiConverter;
|
||||
|
@ -53,7 +54,7 @@ namespace Geekbot.Bot.Commands.User.Ranking
|
|||
await ReplyAsync(Localization.Rank.LimitingTo20Warning);
|
||||
amount = 20;
|
||||
}
|
||||
|
||||
|
||||
var guildId = Context.Guild.Id;
|
||||
Dictionary<HighscoreUserDto, int> highscoreUsers;
|
||||
try
|
||||
|
@ -78,9 +79,9 @@ namespace Geekbot.Bot.Commands.User.Ranking
|
|||
var failedToRetrieveUser = highscoreUsers.Any(e => string.IsNullOrEmpty(e.Key.Username));
|
||||
|
||||
if (failedToRetrieveUser) replyBuilder.AppendLine(Localization.Rank.FailedToResolveAllUsernames).AppendLine();
|
||||
|
||||
|
||||
replyBuilder.AppendLine(string.Format(Localization.Rank.HighscoresFor, type.ToString().CapitalizeFirst(), Context.Guild.Name));
|
||||
|
||||
|
||||
var highscorePlace = 1;
|
||||
foreach (var (user, value) in highscoreUsers)
|
||||
{
|
||||
|
@ -91,7 +92,7 @@ namespace Geekbot.Bot.Commands.User.Ranking
|
|||
replyBuilder.Append(user.Username != null
|
||||
? $"**{user.Username}#{user.Discriminator}**"
|
||||
: $"**{user.Id}**");
|
||||
|
||||
|
||||
replyBuilder.Append(type == HighscoreTypes.messages
|
||||
? $" - {value} {type} - {Math.Round((double) (100 * value) / guildMessages, 2)}%\n"
|
||||
: $" - {value} {type}\n");
|
||||
|
|
|
@ -3,13 +3,13 @@ using System.Threading.Tasks;
|
|||
using Discord.Commands;
|
||||
using Geekbot.Core;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
|
||||
namespace Geekbot.Bot.Commands.Utils
|
||||
{
|
||||
public class Choose : GeekbotCommandBase
|
||||
{
|
||||
public Choose(IErrorHandler errorHandler, ITranslationHandler translation) : base(errorHandler, translation)
|
||||
public Choose(IErrorHandler errorHandler, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ using Geekbot.Core.Database;
|
|||
using Geekbot.Core.Database.Models;
|
||||
using Geekbot.Core.ErrorHandling;
|
||||
using Geekbot.Core.Extensions;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.GuildSettingsManager;
|
||||
using Geekbot.Core.Polyfills;
|
||||
using Geekbot.Core.RandomNumberGenerator;
|
||||
|
||||
|
@ -23,7 +23,8 @@ namespace Geekbot.Bot.Commands.Utils.Quote
|
|||
private readonly IRandomNumberGenerator _randomNumberGenerator;
|
||||
private readonly bool _isDev;
|
||||
|
||||
public Quote(IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator, ITranslationHandler translationHandler) : base(errorHandler, translationHandler)
|
||||
public Quote(IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator, IGuildSettingsManager guildSettingsManager)
|
||||
: base(errorHandler, guildSettingsManager)
|
||||
{
|
||||
_database = database;
|
||||
_randomNumberGenerator = randomNumberGenerator;
|
||||
|
|
|
@ -17,7 +17,6 @@ using Geekbot.Core.GuildSettingsManager;
|
|||
using Geekbot.Core.Highscores;
|
||||
using Geekbot.Core.KvInMemoryStore;
|
||||
using Geekbot.Core.Levels;
|
||||
using Geekbot.Core.Localization;
|
||||
using Geekbot.Core.Logger;
|
||||
using Geekbot.Core.MalClient;
|
||||
using Geekbot.Core.Media;
|
||||
|
@ -168,8 +167,7 @@ namespace Geekbot.Bot
|
|||
var randomNumberGenerator = new RandomNumberGenerator();
|
||||
var mediaProvider = new MediaProvider(_logger, randomNumberGenerator);
|
||||
var kvMemoryStore = new KvInInMemoryStore();
|
||||
var translationHandler = new TranslationHandler(_logger, _guildSettingsManager);
|
||||
var errorHandler = new ErrorHandler(_logger, translationHandler, _runParameters);
|
||||
var errorHandler = new ErrorHandler(_logger, _runParameters, () => Localization.Internal.SomethingWentWrong);
|
||||
var diceParser = new DiceParser(randomNumberGenerator);
|
||||
|
||||
services.AddSingleton(_userRepository);
|
||||
|
@ -186,7 +184,6 @@ namespace Geekbot.Bot
|
|||
services.AddSingleton<IGlobalSettings>(_globalSettings);
|
||||
services.AddSingleton<IErrorHandler>(errorHandler);
|
||||
services.AddSingleton<IDiceParser>(diceParser);
|
||||
services.AddSingleton<ITranslationHandler>(translationHandler);
|
||||
services.AddSingleton<IReactionListener>(_reactionListener);
|
||||
services.AddSingleton<IGuildSettingsManager>(_guildSettingsManager);
|
||||
services.AddSingleton(_client);
|
||||
|
|
49
src/Bot/Utils/DateLocalization.cs
Normal file
49
src/Bot/Utils/DateLocalization.cs
Normal file
|
@ -0,0 +1,49 @@
|
|||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace Geekbot.Bot.Utils
|
||||
{
|
||||
public class DateLocalization
|
||||
{
|
||||
public static string FormatDateTimeAsRemaining(DateTimeOffset dateTime)
|
||||
{
|
||||
var remaining = dateTime - DateTimeOffset.Now;
|
||||
const string formattable = "{0} {1}";
|
||||
var sb = new StringBuilder();
|
||||
|
||||
if (remaining.Days > 0)
|
||||
{
|
||||
sb.AppendFormat(formattable, remaining.Days, GetSingularOrPlural(remaining.Days, Localization.Internal.Days));
|
||||
}
|
||||
|
||||
if (remaining.Hours > 0)
|
||||
{
|
||||
if (sb.Length > 0) sb.Append(", ");
|
||||
sb.AppendFormat(formattable, remaining.Hours, GetSingularOrPlural(remaining.Hours, Localization.Internal.Hours));
|
||||
}
|
||||
|
||||
if (remaining.Minutes > 0)
|
||||
{
|
||||
if (sb.Length > 0) sb.Append(", ");
|
||||
sb.AppendFormat(formattable, remaining.Minutes, GetSingularOrPlural(remaining.Minutes, Localization.Internal.Minutes));
|
||||
}
|
||||
|
||||
if (remaining.Seconds > 0)
|
||||
{
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
sb.AppendFormat(" {0} ", Localization.Internal.And);
|
||||
}
|
||||
sb.AppendFormat(formattable, remaining.Seconds, GetSingularOrPlural(remaining.Seconds, Localization.Internal.Seconds));
|
||||
}
|
||||
|
||||
return sb.ToString().Trim();
|
||||
}
|
||||
|
||||
private static string GetSingularOrPlural(int number, string rawString)
|
||||
{
|
||||
var versions = rawString.Split('|');
|
||||
return number == 1 ? versions[0] : versions[1];
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue