diff --git a/Geekbot.net/Commands/Admin/Admin.cs b/Geekbot.net/Commands/Admin/Admin.cs index 15b4df1..6377c60 100644 --- a/Geekbot.net/Commands/Admin/Admin.cs +++ b/Geekbot.net/Commands/Admin/Admin.cs @@ -7,6 +7,7 @@ using Discord.Commands; using Discord.WebSocket; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -17,7 +18,7 @@ namespace Geekbot.net.Commands.Admin [Group("admin")] [RequireUserPermission(GuildPermission.Administrator)] [DisableInDirectMessage] - public class Admin : ModuleBase + public class Admin : GeekbotBase { private readonly DiscordSocketClient _client; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Admin/Mod.cs b/Geekbot.net/Commands/Admin/Mod.cs index 1188504..a2a2f4e 100644 --- a/Geekbot.net/Commands/Admin/Mod.cs +++ b/Geekbot.net/Commands/Admin/Mod.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Discord.WebSocket; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.UserRepository; @@ -15,7 +16,7 @@ namespace Geekbot.net.Commands.Admin [RequireUserPermission(GuildPermission.ManageMessages)] [RequireUserPermission(GuildPermission.ManageRoles)] [DisableInDirectMessage] - public class Mod : ModuleBase + public class Mod : GeekbotBase { private readonly DiscordSocketClient _client; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Admin/Owner/Owner.cs b/Geekbot.net/Commands/Admin/Owner/Owner.cs index 996d848..e395a44 100644 --- a/Geekbot.net/Commands/Admin/Owner/Owner.cs +++ b/Geekbot.net/Commands/Admin/Owner/Owner.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Discord.WebSocket; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.GlobalSettings; using Geekbot.net.Lib.Logger; @@ -12,7 +13,7 @@ namespace Geekbot.net.Commands.Admin.Owner { [Group("owner")] [RequireOwner] - public class Owner : ModuleBase + public class Owner : GeekbotBase { private readonly DiscordSocketClient _client; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Admin/Role.cs b/Geekbot.net/Commands/Admin/Role.cs index 85b7160..22b4249 100644 --- a/Geekbot.net/Commands/Admin/Role.cs +++ b/Geekbot.net/Commands/Admin/Role.cs @@ -7,29 +7,27 @@ using Discord.Commands; using Discord.Net; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; -using Geekbot.net.Lib.Localization; using Geekbot.net.Lib.ReactionListener; namespace Geekbot.net.Commands.Admin { [Group("role")] [DisableInDirectMessage] - public class Role : ModuleBase + public class Role : GeekbotBase { private readonly DatabaseContext _database; private readonly IErrorHandler _errorHandler; private readonly IReactionListener _reactionListener; - private readonly ITranslationHandler _translationHandler; - public Role(DatabaseContext database, IErrorHandler errorHandler, IReactionListener reactionListener, ITranslationHandler translationHandler) + public Role(DatabaseContext database, IErrorHandler errorHandler, IReactionListener reactionListener) { _database = database; _errorHandler = errorHandler; _reactionListener = reactionListener; - _translationHandler = translationHandler; } [Command(RunMode = RunMode.Async)] @@ -38,17 +36,16 @@ namespace Geekbot.net.Commands.Admin { try { - var transContext = await _translationHandler.GetGuildContext(Context); var roles = _database.RoleSelfService.Where(g => g.GuildId.Equals(Context.Guild.Id.AsLong())).ToList(); if (roles.Count == 0) { - await ReplyAsync(transContext.GetString("NoRolesConfigured")); + await ReplyAsync(Context.Translations.GetString("NoRolesConfigured")); return; } var sb = new StringBuilder(); - sb.AppendLine(transContext.GetString("ListHeader", Context.Guild.Name)); - sb.AppendLine(transContext.GetString("ListInstruction")); + sb.AppendLine(Context.Translations.GetString("ListHeader", Context.Guild.Name)); + sb.AppendLine(Context.Translations.GetString("ListInstruction")); foreach (var role in roles) sb.AppendLine($"- {role.WhiteListName}"); await ReplyAsync(sb.ToString()); } @@ -64,7 +61,6 @@ namespace Geekbot.net.Commands.Admin { try { - var transContext = await _translationHandler.GetGuildContext(Context); var roleName = roleNameRaw.ToLower(); var roleFromDb = _database.RoleSelfService.FirstOrDefault(e => e.GuildId.Equals(Context.Guild.Id.AsLong()) && e.WhiteListName.Equals(roleName)); @@ -74,23 +70,23 @@ namespace Geekbot.net.Commands.Admin var role = Context.Guild.Roles.First(r => r.Id == roleFromDb.RoleId.AsUlong()); if (role == null) { - await ReplyAsync(transContext.GetString("RoleNotFound")); + await ReplyAsync(Context.Translations.GetString("RoleNotFound")); return; } if (guildUser.RoleIds.Contains(role.Id)) { await guildUser.RemoveRoleAsync(role); - await ReplyAsync(transContext.GetString("RemovedUserFromRole", role.Name)); + await ReplyAsync(Context.Translations.GetString("RemovedUserFromRole", role.Name)); return; } await guildUser.AddRoleAsync(role); - await ReplyAsync(transContext.GetString("AddedUserFromRole", role.Name)); + await ReplyAsync(Context.Translations.GetString("AddedUserFromRole", role.Name)); return; } - await ReplyAsync(transContext.GetString("RoleNotFound")); + await ReplyAsync(Context.Translations.GetString("RoleNotFound")); } catch (HttpException e) { @@ -109,10 +105,9 @@ namespace Geekbot.net.Commands.Admin { try { - var transContext = await _translationHandler.GetGuildContext(Context); if (role.IsManaged) { - await ReplyAsync(transContext.GetString("CannotAddManagedRole")); + await ReplyAsync(Context.Translations.GetString("CannotAddManagedRole")); return; } @@ -122,7 +117,7 @@ namespace Geekbot.net.Commands.Admin || role.Permissions.BanMembers || role.Permissions.KickMembers) { - await ReplyAsync(transContext.GetString("CannotAddDangerousRole")); + await ReplyAsync(Context.Translations.GetString("CannotAddDangerousRole")); return; } @@ -133,7 +128,7 @@ namespace Geekbot.net.Commands.Admin WhiteListName = roleName }); await _database.SaveChangesAsync(); - await ReplyAsync(transContext.GetString("CannotAddDangerousRole", role.Name)); + await ReplyAsync(Context.Translations.GetString("CannotAddDangerousRole", role.Name)); } catch (Exception e) { @@ -148,18 +143,17 @@ namespace Geekbot.net.Commands.Admin { try { - var transContext = await _translationHandler.GetGuildContext(Context); var roleFromDb = _database.RoleSelfService.FirstOrDefault(e => e.GuildId.Equals(Context.Guild.Id.AsLong()) && e.WhiteListName.Equals(roleName)); if (roleFromDb != null) { _database.RoleSelfService.Remove(roleFromDb); await _database.SaveChangesAsync(); - await ReplyAsync(transContext.GetString("RemovedRoleFromWhitelist", roleName)); + await ReplyAsync(Context.Translations.GetString("RemovedRoleFromWhitelist", roleName)); return; } - await ReplyAsync(transContext.GetString("RoleNotFound")); + await ReplyAsync(Context.Translations.GetString("RoleNotFound")); } catch (Exception e) { diff --git a/Geekbot.net/Commands/Games/Pokedex.cs b/Geekbot.net/Commands/Games/Pokedex.cs index a0d2ae0..32fd8eb 100644 --- a/Geekbot.net/Commands/Games/Pokedex.cs +++ b/Geekbot.net/Commands/Games/Pokedex.cs @@ -3,13 +3,14 @@ using System.Linq; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; using PokeAPI; namespace Geekbot.net.Commands.Games { - public class Pokedex : ModuleBase + public class Pokedex : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Games/Roll.cs b/Geekbot.net/Commands/Games/Roll.cs index dfecb13..965f9c1 100644 --- a/Geekbot.net/Commands/Games/Roll.cs +++ b/Geekbot.net/Commands/Games/Roll.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.AlmostRedis; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -13,18 +14,16 @@ using StackExchange.Redis; namespace Geekbot.net.Commands.Games { - public class Roll : ModuleBase + public class Roll : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IAlmostRedis _redis; - private readonly ITranslationHandler _translation; private readonly DatabaseContext _database; private readonly IRandomNumberGenerator _randomNumberGenerator; - public Roll(IAlmostRedis redis, IErrorHandler errorHandler, ITranslationHandler translation, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator) + public Roll(IAlmostRedis redis, IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator) { _redis = redis; - _translation = translation; _database = database; _randomNumberGenerator = randomNumberGenerator; _errorHandler = errorHandler; @@ -39,7 +38,6 @@ namespace Geekbot.net.Commands.Games var number = _randomNumberGenerator.Next(1, 100); var guess = 1000; int.TryParse(stuff, out guess); - var transContext = await _translation.GetGuildContext(Context); if (guess <= 100 && guess > 0) { var prevRoll = _redis.Db.HashGet($"{Context.Guild.Id}:RollsPrevious2", Context.Message.Author.Id).ToString()?.Split('|'); @@ -47,17 +45,17 @@ namespace Geekbot.net.Commands.Games { if (prevRoll[0] == guess.ToString() && DateTime.Parse(prevRoll[1]) > DateTime.Now.AddDays(-1)) { - await ReplyAsync(transContext.GetString("NoPrevGuess", Context.Message.Author.Mention)); + await ReplyAsync(Context.Translations.GetString("NoPrevGuess", Context.Message.Author.Mention)); return; } } _redis.Db.HashSet($"{Context.Guild.Id}:RollsPrevious2", new[] {new HashEntry(Context.Message.Author.Id, $"{guess}|{DateTime.Now}")}); - await ReplyAsync(transContext.GetString("Rolled", Context.Message.Author.Mention, number, guess)); + await ReplyAsync(Context.Translations.GetString("Rolled", Context.Message.Author.Mention, number, guess)); if (guess == number) { - await ReplyAsync(transContext.GetString("Gratz", Context.Message.Author)); + await ReplyAsync(Context.Translations.GetString("Gratz", Context.Message.Author)); _redis.Db.HashIncrement($"{Context.Guild.Id}:Rolls", Context.User.Id.ToString()); var user = await GetUser(Context.User.Id); user.Rolls += 1; @@ -67,7 +65,7 @@ namespace Geekbot.net.Commands.Games } else { - await ReplyAsync(transContext.GetString("RolledNoGuess", Context.Message.Author.Mention, number)); + await ReplyAsync(Context.Translations.GetString("RolledNoGuess", Context.Message.Author.Mention, number)); } } catch (Exception e) diff --git a/Geekbot.net/Commands/Integrations/Google/Google.cs b/Geekbot.net/Commands/Integrations/Google/Google.cs index db059b4..76c3795 100644 --- a/Geekbot.net/Commands/Integrations/Google/Google.cs +++ b/Geekbot.net/Commands/Integrations/Google/Google.cs @@ -4,13 +4,14 @@ using System.Net; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.GlobalSettings; using Newtonsoft.Json; namespace Geekbot.net.Commands.Integrations.Google { - public class Google : ModuleBase + public class Google : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IGlobalSettings _globalSettings; diff --git a/Geekbot.net/Commands/Integrations/MagicTheGathering.cs b/Geekbot.net/Commands/Integrations/MagicTheGathering.cs index ef16fee..a9d2251 100644 --- a/Geekbot.net/Commands/Integrations/MagicTheGathering.cs +++ b/Geekbot.net/Commands/Integrations/MagicTheGathering.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.Converters; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -11,7 +12,7 @@ using MtgApiManager.Lib.Service; namespace Geekbot.net.Commands.Integrations { - public class MagicTheGathering : ModuleBase + public class MagicTheGathering : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IMtgManaConverter _manaConverter; diff --git a/Geekbot.net/Commands/Integrations/Mal.cs b/Geekbot.net/Commands/Integrations/Mal.cs index ecc91bf..ace49f4 100644 --- a/Geekbot.net/Commands/Integrations/Mal.cs +++ b/Geekbot.net/Commands/Integrations/Mal.cs @@ -4,13 +4,14 @@ using System.Web; using System.Xml; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.Clients; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; namespace Geekbot.net.Commands.Integrations { - public class Mal : ModuleBase + public class Mal : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IMalClient _malClient; diff --git a/Geekbot.net/Commands/Integrations/UbranDictionary/UrbanDictionary.cs b/Geekbot.net/Commands/Integrations/UbranDictionary/UrbanDictionary.cs index 4f29f10..420d2b4 100644 --- a/Geekbot.net/Commands/Integrations/UbranDictionary/UrbanDictionary.cs +++ b/Geekbot.net/Commands/Integrations/UbranDictionary/UrbanDictionary.cs @@ -4,13 +4,14 @@ using System.Net.Http; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; using Newtonsoft.Json; namespace Geekbot.net.Commands.Integrations.UbranDictionary { - public class UrbanDictionary : ModuleBase + public class UrbanDictionary : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Integrations/Wikipedia.cs b/Geekbot.net/Commands/Integrations/Wikipedia.cs index 9124670..1bc2390 100644 --- a/Geekbot.net/Commands/Integrations/Wikipedia.cs +++ b/Geekbot.net/Commands/Integrations/Wikipedia.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Geekbot.net.Database; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; using HtmlAgilityPack; @@ -14,7 +15,7 @@ using WikipediaApi.Page; namespace Geekbot.net.Commands.Integrations { - public class Wikipedia : ModuleBase + public class Wikipedia : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IWikipediaClient _wikipediaClient; diff --git a/Geekbot.net/Commands/Integrations/Youtube.cs b/Geekbot.net/Commands/Integrations/Youtube.cs index 1672bab..26f0e9c 100644 --- a/Geekbot.net/Commands/Integrations/Youtube.cs +++ b/Geekbot.net/Commands/Integrations/Youtube.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.GlobalSettings; using Google.Apis.Services; @@ -8,7 +9,7 @@ using Google.Apis.YouTube.v3; namespace Geekbot.net.Commands.Integrations { - public class Youtube : ModuleBase + public class Youtube : GeekbotBase { private readonly IGlobalSettings _globalSettings; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/BenedictCumberbatchNameGenerator.cs b/Geekbot.net/Commands/Randomness/BenedictCumberbatchNameGenerator.cs index 501f891..fa734fd 100644 --- a/Geekbot.net/Commands/Randomness/BenedictCumberbatchNameGenerator.cs +++ b/Geekbot.net/Commands/Randomness/BenedictCumberbatchNameGenerator.cs @@ -2,12 +2,13 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.RandomNumberGenerator; namespace Geekbot.net.Commands.Randomness { - public class BenedictCumberbatchNameGenerator : ModuleBase + public class BenedictCumberbatchNameGenerator : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IRandomNumberGenerator _randomNumberGenerator; diff --git a/Geekbot.net/Commands/Randomness/Cat/Cat.cs b/Geekbot.net/Commands/Randomness/Cat/Cat.cs index 4d43a4c..b752955 100644 --- a/Geekbot.net/Commands/Randomness/Cat/Cat.cs +++ b/Geekbot.net/Commands/Randomness/Cat/Cat.cs @@ -3,12 +3,13 @@ using System.Net.Http; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Newtonsoft.Json; namespace Geekbot.net.Commands.Randomness.Cat { - public class Cat : ModuleBase + public class Cat : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/CheckEm.cs b/Geekbot.net/Commands/Randomness/CheckEm.cs index f8191ad..790dce8 100644 --- a/Geekbot.net/Commands/Randomness/CheckEm.cs +++ b/Geekbot.net/Commands/Randomness/CheckEm.cs @@ -3,12 +3,13 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Media; namespace Geekbot.net.Commands.Randomness { - public class CheckEm : ModuleBase + public class CheckEm : GeekbotBase { private readonly IMediaProvider _checkEmImages; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/Chuck/ChuckNorrisJokes.cs b/Geekbot.net/Commands/Randomness/Chuck/ChuckNorrisJokes.cs index 07ea41f..ceb559c 100644 --- a/Geekbot.net/Commands/Randomness/Chuck/ChuckNorrisJokes.cs +++ b/Geekbot.net/Commands/Randomness/Chuck/ChuckNorrisJokes.cs @@ -3,12 +3,13 @@ using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Newtonsoft.Json; namespace Geekbot.net.Commands.Randomness.Chuck { - public class ChuckNorrisJokes : ModuleBase + public class ChuckNorrisJokes : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/Dad/DadJokes.cs b/Geekbot.net/Commands/Randomness/Dad/DadJokes.cs index 2c51781..4bb204b 100644 --- a/Geekbot.net/Commands/Randomness/Dad/DadJokes.cs +++ b/Geekbot.net/Commands/Randomness/Dad/DadJokes.cs @@ -3,12 +3,13 @@ using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Newtonsoft.Json; namespace Geekbot.net.Commands.Randomness.Dad { - public class DadJokes : ModuleBase + public class DadJokes : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/Dog/Dog.cs b/Geekbot.net/Commands/Randomness/Dog/Dog.cs index 176cbad..6ea0d25 100644 --- a/Geekbot.net/Commands/Randomness/Dog/Dog.cs +++ b/Geekbot.net/Commands/Randomness/Dog/Dog.cs @@ -3,12 +3,13 @@ using System.Net.Http; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Newtonsoft.Json; namespace Geekbot.net.Commands.Randomness.Dog { - public class Dog : ModuleBase + public class Dog : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/EightBall.cs b/Geekbot.net/Commands/Randomness/EightBall.cs index d07451d..e72f85e 100644 --- a/Geekbot.net/Commands/Randomness/EightBall.cs +++ b/Geekbot.net/Commands/Randomness/EightBall.cs @@ -2,11 +2,12 @@ using System.Collections.Generic; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; namespace Geekbot.net.Commands.Randomness { - public class EightBall : ModuleBase + public class EightBall : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/Fortune.cs b/Geekbot.net/Commands/Randomness/Fortune.cs index d4f6b5f..582cc75 100644 --- a/Geekbot.net/Commands/Randomness/Fortune.cs +++ b/Geekbot.net/Commands/Randomness/Fortune.cs @@ -1,10 +1,11 @@ using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.Media; namespace Geekbot.net.Commands.Randomness { - public class Fortune : ModuleBase + public class Fortune : GeekbotBase { private readonly IFortunesProvider _fortunes; diff --git a/Geekbot.net/Commands/Randomness/Gdq.cs b/Geekbot.net/Commands/Randomness/Gdq.cs index 2685b33..3bed944 100644 --- a/Geekbot.net/Commands/Randomness/Gdq.cs +++ b/Geekbot.net/Commands/Randomness/Gdq.cs @@ -2,11 +2,12 @@ using System.Net; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; namespace Geekbot.net.Commands.Randomness { - public class Gdq : ModuleBase + public class Gdq : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/Kanye/Kanye.cs b/Geekbot.net/Commands/Randomness/Kanye/Kanye.cs index 42a6ca7..a37fbc3 100644 --- a/Geekbot.net/Commands/Randomness/Kanye/Kanye.cs +++ b/Geekbot.net/Commands/Randomness/Kanye/Kanye.cs @@ -4,13 +4,14 @@ using System.Net.Http.Headers; using System.Threading.Tasks; using Discord.Commands; using Geekbot.net.Commands.Randomness.Dad; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Microsoft.AspNetCore.Hosting.Internal; using Newtonsoft.Json; namespace Geekbot.net.Commands.Randomness.Kanye { - public class Kanye : ModuleBase + public class Kanye : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Randomness/RandomAnimals.cs b/Geekbot.net/Commands/Randomness/RandomAnimals.cs index 8562908..8a15551 100644 --- a/Geekbot.net/Commands/Randomness/RandomAnimals.cs +++ b/Geekbot.net/Commands/Randomness/RandomAnimals.cs @@ -1,11 +1,12 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.Media; namespace Geekbot.net.Commands.Randomness { - public class RandomAnimals : ModuleBase + public class RandomAnimals : GeekbotBase { private readonly IMediaProvider _mediaProvider; diff --git a/Geekbot.net/Commands/Randomness/Ship.cs b/Geekbot.net/Commands/Randomness/Ship.cs index 2571891..3f43710 100644 --- a/Geekbot.net/Commands/Randomness/Ship.cs +++ b/Geekbot.net/Commands/Randomness/Ship.cs @@ -5,13 +5,14 @@ using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; using Geekbot.net.Lib.RandomNumberGenerator; namespace Geekbot.net.Commands.Randomness { - public class Ship : ModuleBase + public class Ship : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly IRandomNumberGenerator _randomNumberGenerator; diff --git a/Geekbot.net/Commands/Randomness/Slap.cs b/Geekbot.net/Commands/Randomness/Slap.cs index 20e83c3..3165581 100644 --- a/Geekbot.net/Commands/Randomness/Slap.cs +++ b/Geekbot.net/Commands/Randomness/Slap.cs @@ -6,12 +6,13 @@ using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; namespace Geekbot.net.Commands.Randomness { - public class Slap : ModuleBase + public class Slap : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly DatabaseContext _database; @@ -24,7 +25,7 @@ namespace Geekbot.net.Commands.Randomness [Command("slap", RunMode = RunMode.Async)] [Summary("slap someone")] - public async Task Slapper([Summary("@someone")] IUser user) + public async Task Slapper([Summary("@someone")] IGuildUser user) { try { @@ -79,7 +80,7 @@ namespace Geekbot.net.Commands.Randomness "powerless banhammer" }; - await ReplyAsync($"{Context.User.Username} slapped {user.Username} with a {things[new Random().Next(things.Count - 1)]}"); + await ReplyAsync($"{Context.GuildUser.Nickname} slapped {user.Nickname} with a {things[new Random().Next(things.Count - 1)]}"); await UpdateRecieved(user.Id); await UpdateGiven(Context.User.Id); diff --git a/Geekbot.net/Commands/Rpg/Cookies.cs b/Geekbot.net/Commands/Rpg/Cookies.cs index f22eccf..69e3d68 100644 --- a/Geekbot.net/Commands/Rpg/Cookies.cs +++ b/Geekbot.net/Commands/Rpg/Cookies.cs @@ -5,6 +5,7 @@ using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -15,18 +16,16 @@ namespace Geekbot.net.Commands.Rpg { [DisableInDirectMessage] [Group("cookies")] - public class Cookies : ModuleBase + public class Cookies : GeekbotBase { private readonly DatabaseContext _database; private readonly IErrorHandler _errorHandler; - private readonly ITranslationHandler _translation; private readonly IRandomNumberGenerator _randomNumberGenerator; - public Cookies(DatabaseContext database, IErrorHandler errorHandler, ITranslationHandler translation , IRandomNumberGenerator randomNumberGenerator) + public Cookies(DatabaseContext database, IErrorHandler errorHandler, IRandomNumberGenerator randomNumberGenerator) { _database = database; _errorHandler = errorHandler; - _translation = translation; _randomNumberGenerator = randomNumberGenerator; } @@ -36,18 +35,17 @@ namespace Geekbot.net.Commands.Rpg { try { - var transContext = await _translation.GetGuildContext(Context); var actor = await GetUser(Context.User.Id); if (actor.LastPayout.Value.AddHours(24) > DateTimeOffset.Now) { - var formatedWaitTime = transContext.FormatDateTimeAsRemaining(actor.LastPayout.Value.AddHours(24)); - await ReplyAsync(transContext.GetString("WaitForMoreCookies", formatedWaitTime)); + var formatedWaitTime = Context.Translations.FormatDateTimeAsRemaining(actor.LastPayout.Value.AddHours(24)); + await ReplyAsync(Context.Translations.GetString("WaitForMoreCookies", formatedWaitTime)); return; } actor.Cookies += 10; actor.LastPayout = DateTimeOffset.Now; await SetUser(actor); - await ReplyAsync(transContext.GetString("GetCookies", 10, actor.Cookies)); + await ReplyAsync(Context.Translations.GetString("GetCookies", 10, actor.Cookies)); } catch (Exception e) @@ -62,9 +60,8 @@ namespace Geekbot.net.Commands.Rpg { try { - var transContext = await _translation.GetGuildContext(Context); var actor = await GetUser(Context.User.Id); - await ReplyAsync(transContext.GetString("InYourJar", actor.Cookies)); + await ReplyAsync(Context.Translations.GetString("InYourJar", actor.Cookies)); } catch (Exception e) { @@ -78,12 +75,11 @@ namespace Geekbot.net.Commands.Rpg { try { - var transContext = await _translation.GetGuildContext(Context); var giver = await GetUser(Context.User.Id); if (giver.Cookies < amount) { - await ReplyAsync(transContext.GetString("NotEnoughToGive")); + await ReplyAsync(Context.Translations.GetString("NotEnoughToGive")); return; } @@ -95,7 +91,7 @@ namespace Geekbot.net.Commands.Rpg await SetUser(giver); await SetUser(taker); - await ReplyAsync(transContext.GetString("Given", amount, user.Username)); + await ReplyAsync(Context.Translations.GetString("Given", amount, user.Username)); } catch (Exception e) { @@ -109,12 +105,11 @@ namespace Geekbot.net.Commands.Rpg { try { - var transContext = await _translation.GetGuildContext(Context); var actor = await GetUser(Context.User.Id); if (actor.Cookies < 5) { - await ReplyAsync(transContext.GetString("NotEnoughCookiesToEat")); + await ReplyAsync(Context.Translations.GetString("NotEnoughCookiesToEat")); return; } @@ -123,7 +118,7 @@ namespace Geekbot.net.Commands.Rpg await SetUser(actor); - await ReplyAsync(transContext.GetString("AteCookies", amount, actor.Cookies)); + await ReplyAsync(Context.Translations.GetString("AteCookies", amount, actor.Cookies)); } catch (Exception e) { diff --git a/Geekbot.net/Commands/User/GuildInfo.cs b/Geekbot.net/Commands/User/GuildInfo.cs index 6c8b941..e55506c 100644 --- a/Geekbot.net/Commands/User/GuildInfo.cs +++ b/Geekbot.net/Commands/User/GuildInfo.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Geekbot.net.Database; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -11,7 +12,7 @@ using Geekbot.net.Lib.Levels; namespace Geekbot.net.Commands.User { - public class GuildInfo : ModuleBase + public class GuildInfo : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly DatabaseContext _database; diff --git a/Geekbot.net/Commands/User/Karma.cs b/Geekbot.net/Commands/User/Karma.cs index ed221ff..fd4a82d 100644 --- a/Geekbot.net/Commands/User/Karma.cs +++ b/Geekbot.net/Commands/User/Karma.cs @@ -5,25 +5,23 @@ using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; -using Geekbot.net.Lib.Localization; namespace Geekbot.net.Commands.User { [DisableInDirectMessage] - public class Karma : ModuleBase + public class Karma : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly DatabaseContext _database; - private readonly ITranslationHandler _translation; - public Karma(DatabaseContext database, IErrorHandler errorHandler, ITranslationHandler translation) + public Karma(DatabaseContext database, IErrorHandler errorHandler) { _database = database; _errorHandler = errorHandler; - _translation = translation; } [Command("good", RunMode = RunMode.Async)] @@ -32,16 +30,15 @@ namespace Geekbot.net.Commands.User { try { - var transContext = await _translation.GetGuildContext(Context); var actor = await GetUser(Context.User.Id); if (user.Id == Context.User.Id) { - await ReplyAsync(transContext.GetString("CannotChangeOwn", Context.User.Username)); + await ReplyAsync(Context.Translations.GetString("CannotChangeOwn", Context.User.Username)); } else if (TimeoutFinished(actor.TimeOut)) { - var formatedWaitTime = transContext.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3)); - await ReplyAsync(transContext.GetString("WaitUntill", Context.User.Username, formatedWaitTime)); + var formatedWaitTime = Context.Translations.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3)); + await ReplyAsync(Context.Translations.GetString("WaitUntill", Context.User.Username, formatedWaitTime)); } else { @@ -60,10 +57,10 @@ namespace Geekbot.net.Commands.User .WithName(user.Username)); eb.WithColor(new Color(138, 219, 146)); - eb.Title = transContext.GetString("Increased"); - eb.AddInlineField(transContext.GetString("By"), Context.User.Username); - eb.AddInlineField(transContext.GetString("Amount"), "+1"); - eb.AddInlineField(transContext.GetString("Current"), target.Karma); + eb.Title = Context.Translations.GetString("Increased"); + eb.AddInlineField(Context.Translations.GetString("By"), Context.User.Username); + eb.AddInlineField(Context.Translations.GetString("Amount"), "+1"); + eb.AddInlineField(Context.Translations.GetString("Current"), target.Karma); await ReplyAsync("", false, eb.Build()); } } @@ -79,16 +76,15 @@ namespace Geekbot.net.Commands.User { try { - var transContext = await _translation.GetGuildContext(Context); var actor = await GetUser(Context.User.Id); if (user.Id == Context.User.Id) { - await ReplyAsync(transContext.GetString("CannotChangeOwn", Context.User.Username)); + await ReplyAsync(Context.Translations.GetString("CannotChangeOwn", Context.User.Username)); } else if (TimeoutFinished(actor.TimeOut)) { - var formatedWaitTime = transContext.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3)); - await ReplyAsync(transContext.GetString("WaitUntill", Context.User.Username, formatedWaitTime)); + var formatedWaitTime = Context.Translations.FormatDateTimeAsRemaining(actor.TimeOut.AddMinutes(3)); + await ReplyAsync(Context.Translations.GetString("WaitUntill", Context.User.Username, formatedWaitTime)); } else { @@ -107,10 +103,10 @@ namespace Geekbot.net.Commands.User .WithName(user.Username)); eb.WithColor(new Color(138, 219, 146)); - eb.Title = transContext.GetString("Decreased"); - eb.AddInlineField(transContext.GetString("By"), Context.User.Username); - eb.AddInlineField(transContext.GetString("Amount"), "-1"); - eb.AddInlineField(transContext.GetString("Current"), target.Karma); + eb.Title = Context.Translations.GetString("Decreased"); + eb.AddInlineField(Context.Translations.GetString("By"), Context.User.Username); + eb.AddInlineField(Context.Translations.GetString("Amount"), "-1"); + eb.AddInlineField(Context.Translations.GetString("Current"), target.Karma); await ReplyAsync("", false, eb.Build()); } } diff --git a/Geekbot.net/Commands/User/Ranking/Rank.cs b/Geekbot.net/Commands/User/Ranking/Rank.cs index 0ad21d5..03d2e31 100644 --- a/Geekbot.net/Commands/User/Ranking/Rank.cs +++ b/Geekbot.net/Commands/User/Ranking/Rank.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Discord.Commands; using Geekbot.net.Database; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.Converters; using Geekbot.net.Lib.ErrorHandling; @@ -15,24 +16,19 @@ using Geekbot.net.Lib.UserRepository; namespace Geekbot.net.Commands.User.Ranking { - public class Rank : ModuleBase + public class Rank : GeekbotBase { private readonly IEmojiConverter _emojiConverter; private readonly IHighscoreManager _highscoreManager; - private readonly ITranslationHandler _translationHandler; private readonly IErrorHandler _errorHandler; private readonly DatabaseContext _database; - private readonly IUserRepository _userRepository; - public Rank(DatabaseContext database, IErrorHandler errorHandler, IUserRepository userRepository, - IEmojiConverter emojiConverter, IHighscoreManager highscoreManager, ITranslationHandler translationHandler) + public Rank(DatabaseContext database, IErrorHandler errorHandler, IEmojiConverter emojiConverter, IHighscoreManager highscoreManager) { _database = database; _errorHandler = errorHandler; - _userRepository = userRepository; _emojiConverter = emojiConverter; _highscoreManager = highscoreManager; - _translationHandler = translationHandler; } [Command("rank", RunMode = RunMode.Async)] @@ -42,7 +38,6 @@ namespace Geekbot.net.Commands.User.Ranking { try { - var transContext = await _translationHandler.GetGuildContext(Context); HighscoreTypes type; try { @@ -51,14 +46,14 @@ namespace Geekbot.net.Commands.User.Ranking } catch { - await ReplyAsync(transContext.GetString("InvalidType")); + await ReplyAsync(Context.Translations.GetString("InvalidType")); return; } var replyBuilder = new StringBuilder(); if (amount > 20) { - await ReplyAsync(transContext.GetString("LimitingTo20Warning")); + await ReplyAsync(Context.Translations.GetString("LimitingTo20Warning")); amount = 20; } @@ -70,7 +65,7 @@ namespace Geekbot.net.Commands.User.Ranking } catch (HighscoreListEmptyException) { - await ReplyAsync(transContext.GetString("NoTypeFoundForServer", type)); + await ReplyAsync(Context.Translations.GetString("NoTypeFoundForServer", type)); return; } @@ -85,8 +80,8 @@ namespace Geekbot.net.Commands.User.Ranking var failedToRetrieveUser = highscoreUsers.Any(e => string.IsNullOrEmpty(e.Key.Username)); - if (failedToRetrieveUser) replyBuilder.AppendLine(transContext.GetString("FailedToResolveAllUsernames")); - replyBuilder.AppendLine(transContext.GetString("HighscoresFor", type.ToString().CapitalizeFirst(), Context.Guild.Name)); + if (failedToRetrieveUser) replyBuilder.AppendLine(Context.Translations.GetString("FailedToResolveAllUsernames")); + replyBuilder.AppendLine(Context.Translations.GetString("HighscoresFor", type.ToString().CapitalizeFirst(), Context.Guild.Name)); var highscorePlace = 1; foreach (var user in highscoreUsers) { diff --git a/Geekbot.net/Commands/User/Stats.cs b/Geekbot.net/Commands/User/Stats.cs index 6ddf7d4..1ee85bf 100644 --- a/Geekbot.net/Commands/User/Stats.cs +++ b/Geekbot.net/Commands/User/Stats.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Geekbot.net.Database; +using Geekbot.net.Lib; using Geekbot.net.Lib.AlmostRedis; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; @@ -12,7 +13,7 @@ using Geekbot.net.Lib.Levels; namespace Geekbot.net.Commands.User { - public class Stats : ModuleBase + public class Stats : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly ILevelCalc _levelCalc; diff --git a/Geekbot.net/Commands/Utils/AvatarGetter.cs b/Geekbot.net/Commands/Utils/AvatarGetter.cs index 142b3e3..2077fa5 100644 --- a/Geekbot.net/Commands/Utils/AvatarGetter.cs +++ b/Geekbot.net/Commands/Utils/AvatarGetter.cs @@ -2,11 +2,12 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; namespace Geekbot.net.Commands.Utils { - public class AvatarGetter : ModuleBase + public class AvatarGetter : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Utils/Changelog/Changelog.cs b/Geekbot.net/Commands/Utils/Changelog/Changelog.cs index adcc9a3..e86851a 100644 --- a/Geekbot.net/Commands/Utils/Changelog/Changelog.cs +++ b/Geekbot.net/Commands/Utils/Changelog/Changelog.cs @@ -7,12 +7,13 @@ using System.Threading.Tasks; using Discord; using Discord.Commands; using Discord.WebSocket; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Newtonsoft.Json; namespace Geekbot.net.Commands.Utils.Changelog { - public class Changelog : ModuleBase + public class Changelog : GeekbotBase { private readonly DiscordSocketClient _client; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Utils/Choose.cs b/Geekbot.net/Commands/Utils/Choose.cs index 62069bd..84ba62a 100644 --- a/Geekbot.net/Commands/Utils/Choose.cs +++ b/Geekbot.net/Commands/Utils/Choose.cs @@ -1,20 +1,19 @@ using System; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Localization; namespace Geekbot.net.Commands.Utils { - public class Choose : ModuleBase + public class Choose : GeekbotBase { private readonly IErrorHandler _errorHandler; - private readonly ITranslationHandler _translation; - public Choose(IErrorHandler errorHandler, ITranslationHandler translation) + public Choose(IErrorHandler errorHandler) { _errorHandler = errorHandler; - _translation = translation; } [Command("choose", RunMode = RunMode.Async)] @@ -24,10 +23,9 @@ namespace Geekbot.net.Commands.Utils { try { - var transContext = await _translation.GetGuildContext(Context); var choicesArray = choices.Split(';'); var choice = new Random().Next(choicesArray.Length); - await ReplyAsync(transContext.GetString("Choice", choicesArray[choice].Trim())); + await ReplyAsync(Context.Translations.GetString("Choice", choicesArray[choice].Trim())); } catch (Exception e) { diff --git a/Geekbot.net/Commands/Utils/Dice/Dice.cs b/Geekbot.net/Commands/Utils/Dice/Dice.cs index 6b95903..5cea32e 100644 --- a/Geekbot.net/Commands/Utils/Dice/Dice.cs +++ b/Geekbot.net/Commands/Utils/Dice/Dice.cs @@ -4,11 +4,12 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.RandomNumberGenerator; namespace Geekbot.net.Commands.Utils.Dice { - public class Dice : ModuleBase + public class Dice : GeekbotBase { private readonly IRandomNumberGenerator _randomNumberGenerator; diff --git a/Geekbot.net/Commands/Utils/Emojify.cs b/Geekbot.net/Commands/Utils/Emojify.cs index 5355aff..ddf1762 100644 --- a/Geekbot.net/Commands/Utils/Emojify.cs +++ b/Geekbot.net/Commands/Utils/Emojify.cs @@ -1,12 +1,13 @@ using System; using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.Converters; using Geekbot.net.Lib.ErrorHandling; namespace Geekbot.net.Commands.Utils { - public class Emojify : ModuleBase + public class Emojify : GeekbotBase { private readonly IEmojiConverter _emojiConverter; private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Utils/Help.cs b/Geekbot.net/Commands/Utils/Help.cs index a6f0084..73f1956 100644 --- a/Geekbot.net/Commands/Utils/Help.cs +++ b/Geekbot.net/Commands/Utils/Help.cs @@ -3,11 +3,12 @@ using System.Text; using System.Threading.Tasks; using Discord; using Discord.Commands; +using Geekbot.net.Lib; using Geekbot.net.Lib.ErrorHandling; namespace Geekbot.net.Commands.Utils { - public class Help : ModuleBase + public class Help : GeekbotBase { private readonly IErrorHandler _errorHandler; diff --git a/Geekbot.net/Commands/Utils/Info.cs b/Geekbot.net/Commands/Utils/Info.cs index b1d5403..2ca8d8b 100644 --- a/Geekbot.net/Commands/Utils/Info.cs +++ b/Geekbot.net/Commands/Utils/Info.cs @@ -11,7 +11,7 @@ using Geekbot.net.Lib.Extensions; namespace Geekbot.net.Commands.Utils { - public class Info : ModuleBase + public class Info : GeekbotBase { private readonly DiscordSocketClient _client; private readonly CommandService _commands; diff --git a/Geekbot.net/Commands/Utils/Ping.cs b/Geekbot.net/Commands/Utils/Ping.cs index 18cf9cb..a794b3a 100644 --- a/Geekbot.net/Commands/Utils/Ping.cs +++ b/Geekbot.net/Commands/Utils/Ping.cs @@ -1,9 +1,10 @@ using System.Threading.Tasks; using Discord.Commands; +using Geekbot.net.Lib; namespace Geekbot.net.Commands.Utils { - public class Ping : ModuleBase + public class Ping : GeekbotBase { [Command("👀", RunMode = RunMode.Async)] [Summary("Look at the bot.")] diff --git a/Geekbot.net/Commands/Utils/Quote/Quote.cs b/Geekbot.net/Commands/Utils/Quote/Quote.cs index f06c6ab..6cfd3f6 100644 --- a/Geekbot.net/Commands/Utils/Quote/Quote.cs +++ b/Geekbot.net/Commands/Utils/Quote/Quote.cs @@ -5,6 +5,7 @@ using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; +using Geekbot.net.Lib; using Geekbot.net.Lib.CommandPreconditions; using Geekbot.net.Lib.ErrorHandling; using Geekbot.net.Lib.Extensions; @@ -16,19 +17,17 @@ namespace Geekbot.net.Commands.Utils.Quote { [Group("quote")] [DisableInDirectMessage] - public class Quote : ModuleBase + public class Quote : GeekbotBase { private readonly IErrorHandler _errorHandler; private readonly DatabaseContext _database; private readonly IRandomNumberGenerator _randomNumberGenerator; - private readonly ITranslationHandler _translationHandler; - public Quote(IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator, ITranslationHandler translationHandler) + public Quote(IErrorHandler errorHandler, DatabaseContext database, IRandomNumberGenerator randomNumberGenerator) { _errorHandler = errorHandler; _database = database; _randomNumberGenerator = randomNumberGenerator; - _translationHandler = translationHandler; } [Command] @@ -41,8 +40,7 @@ namespace Geekbot.net.Commands.Utils.Quote if (!s.Any()) { - var transContext = await _translationHandler.GetGuildContext(Context); - await ReplyAsync(transContext.GetString("NoQuotesFound")); + await ReplyAsync(Context.Translations.GetString("NoQuotesFound")); return; } @@ -64,16 +62,15 @@ namespace Geekbot.net.Commands.Utils.Quote { try { - var transContext = await _translationHandler.GetGuildContext(Context); if (user.Id == Context.Message.Author.Id) { - await ReplyAsync(transContext.GetString("CannotSaveOwnQuotes")); + await ReplyAsync(Context.Translations.GetString("CannotSaveOwnQuotes")); return; } if (user.IsBot) { - await ReplyAsync(transContext.GetString("CannotQuoteBots")); + await ReplyAsync(Context.Translations.GetString("CannotQuoteBots")); return; } @@ -85,7 +82,7 @@ namespace Geekbot.net.Commands.Utils.Quote await _database.SaveChangesAsync(); var embed = QuoteBuilder(quote); - await ReplyAsync(transContext.GetString("QuoteAdded"), false, embed.Build()); + await ReplyAsync(Context.Translations.GetString("QuoteAdded"), false, embed.Build()); } catch (Exception e) { @@ -100,17 +97,16 @@ namespace Geekbot.net.Commands.Utils.Quote { try { - var transContext = await _translationHandler.GetGuildContext(Context); var message = await Context.Channel.GetMessageAsync(messageId); if (message.Author.Id == Context.Message.Author.Id) { - await ReplyAsync(transContext.GetString("CannotSaveOwnQuotes")); + await ReplyAsync(Context.Translations.GetString("CannotSaveOwnQuotes")); return; } if (message.Author.IsBot) { - await ReplyAsync(transContext.GetString("CannotQuoteBots")); + await ReplyAsync(Context.Translations.GetString("CannotQuoteBots")); return; } @@ -119,7 +115,7 @@ namespace Geekbot.net.Commands.Utils.Quote await _database.SaveChangesAsync(); var embed = QuoteBuilder(quote); - await ReplyAsync(transContext.GetString("QuoteAdded"), false, embed.Build()); + await ReplyAsync(Context.Translations.GetString("QuoteAdded"), false, embed.Build()); } catch (Exception e) { @@ -174,18 +170,17 @@ namespace Geekbot.net.Commands.Utils.Quote { try { - var transContext = await _translationHandler.GetGuildContext(Context); var quote = _database.Quotes.Where(e => e.GuildId == Context.Guild.Id.AsLong() && e.InternalId == id)?.FirstOrDefault(); if (quote != null) { _database.Quotes.Remove(quote); await _database.SaveChangesAsync(); var embed = QuoteBuilder(quote); - await ReplyAsync(transContext.GetString("Removed", id), false, embed.Build()); + await ReplyAsync(Context.Translations.GetString("Removed", id), false, embed.Build()); } else { - await ReplyAsync(transContext.GetString("NotFoundWithId")); + await ReplyAsync(Context.Translations.GetString("NotFoundWithId")); } } catch (Exception e) diff --git a/Geekbot.net/Handlers.cs b/Geekbot.net/Handlers.cs index a254c14..79390cc 100644 --- a/Geekbot.net/Handlers.cs +++ b/Geekbot.net/Handlers.cs @@ -9,7 +9,9 @@ using Discord.WebSocket; using Geekbot.net.Database; using Geekbot.net.Database.Models; using Geekbot.net.Lib.AlmostRedis; +using Geekbot.net.Lib.Context; using Geekbot.net.Lib.Extensions; +using Geekbot.net.Lib.Localization; using Geekbot.net.Lib.Logger; using Geekbot.net.Lib.ReactionListener; using Geekbot.net.Lib.UserRepository; @@ -27,11 +29,12 @@ namespace Geekbot.net private readonly CommandService _commands; private readonly IUserRepository _userRepository; private readonly IReactionListener _reactionListener; + private readonly ITranslationHandler _translationHandler; private readonly DatabaseContext _messageCounterDatabaseContext; public Handlers(DatabaseInitializer databaseInitializer, IDiscordClient client, IGeekbotLogger logger, IAlmostRedis redis, IServiceProvider servicesProvider, CommandService commands, IUserRepository userRepository, - IReactionListener reactionListener) + IReactionListener reactionListener, ITranslationHandler translationHandler) { _database = databaseInitializer.Initialize(); _messageCounterDatabaseContext = databaseInitializer.Initialize(); @@ -42,6 +45,7 @@ namespace Geekbot.net _commands = commands; _userRepository = userRepository; _reactionListener = reactionListener; + _translationHandler = translationHandler; } // @@ -79,7 +83,7 @@ namespace Geekbot.net if (!(message.HasCharPrefix('!', ref argPos) || message.HasMentionPrefix(_client.CurrentUser, ref argPos))) return Task.CompletedTask; - var context = new CommandContext(_client, message); + var context = new GeekbotContext(_client, message, _translationHandler); var commandExec = _commands.ExecuteAsync(context, argPos, _servicesProvider); _logger.Information(LogSource.Command, context.Message.Content.Split(" ")[0].Replace("!", ""), diff --git a/Geekbot.net/Lib/Context/GeekbotContext.cs b/Geekbot.net/Lib/Context/GeekbotContext.cs new file mode 100644 index 0000000..dfc4281 --- /dev/null +++ b/Geekbot.net/Lib/Context/GeekbotContext.cs @@ -0,0 +1,56 @@ +using Discord; +using Geekbot.net.Lib.Localization; + +namespace Geekbot.net.Lib.Context +{ + /// The context of a command which may contain the client, user, guild, channel, and message. + public class GeekbotContext : IGeekbotContext + { + /// + public IDiscordClient Client { get; } + + /// + public IGuild Guild { get; } + + /// + public IMessageChannel Channel { get; } + + /// + public IUser User { get; } + + /// + public IUserMessage Message { get; } + + /// + public IGuildUser GuildUser { get; } + + /// + public TranslationGuildContext Translations { get; } + + /// Indicates whether the channel that the command is executed in is a private channel. + public bool IsPrivate + { + get + { + return this.Channel is IPrivateChannel; + } + } + + /// + /// Initializes a new class with the provided client and message. + /// + /// The underlying client. + /// The underlying message. + /// the translation handler + public GeekbotContext(IDiscordClient client, IUserMessage msg, ITranslationHandler translationHandler) + { + this.Client = client; + this.Guild = (msg.Channel as IGuildChannel)?.Guild; + this.Channel = msg.Channel; + this.User = msg.Author; + this.GuildUser = msg.Author as IGuildUser; + this.Message = msg; + this.Translations = translationHandler.GetGuildContext(this.Guild, this.Message).Result; + } + } +} \ No newline at end of file diff --git a/Geekbot.net/Lib/Context/IGeekbotContext.cs b/Geekbot.net/Lib/Context/IGeekbotContext.cs new file mode 100644 index 0000000..61884e1 --- /dev/null +++ b/Geekbot.net/Lib/Context/IGeekbotContext.cs @@ -0,0 +1,19 @@ +using Discord; +using Discord.Commands; +using Geekbot.net.Lib.Localization; + +namespace Geekbot.net.Lib.Context +{ + public interface IGeekbotContext : ICommandContext + { + /// + /// Gets the who executed the command. + /// + IGuildUser GuildUser { get; } + + /// + /// Gets the containing the necessary tools for command localization. + /// + TranslationGuildContext Translations { get; } + } +} \ No newline at end of file diff --git a/Geekbot.net/Lib/GeekbotBase.cs b/Geekbot.net/Lib/GeekbotBase.cs new file mode 100644 index 0000000..e92f212 --- /dev/null +++ b/Geekbot.net/Lib/GeekbotBase.cs @@ -0,0 +1,9 @@ +using Discord.Commands; +using Geekbot.net.Lib.Context; + +namespace Geekbot.net.Lib +{ + public abstract class GeekbotBase : ModuleBase + { + } +} \ No newline at end of file diff --git a/Geekbot.net/Lib/Localization/ITranslationHandler.cs b/Geekbot.net/Lib/Localization/ITranslationHandler.cs index 9cd0680..3672c26 100644 --- a/Geekbot.net/Lib/Localization/ITranslationHandler.cs +++ b/Geekbot.net/Lib/Localization/ITranslationHandler.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Threading.Tasks; +using Discord; using Discord.Commands; namespace Geekbot.net.Lib.Localization @@ -10,6 +11,7 @@ namespace Geekbot.net.Lib.Localization string GetString(string language, string command, string stringName); Task> GetDict(ICommandContext context, string command); Task GetGuildContext(ICommandContext context); + Task GetGuildContext(IGuild guild, IUserMessage message); Task SetLanguage(ulong guildId, string language); List SupportedLanguages { get; } } diff --git a/Geekbot.net/Lib/Localization/TranslationHandler.cs b/Geekbot.net/Lib/Localization/TranslationHandler.cs index 3d1ee3a..f1a30e5 100644 --- a/Geekbot.net/Lib/Localization/TranslationHandler.cs +++ b/Geekbot.net/Lib/Localization/TranslationHandler.cs @@ -3,13 +3,12 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using Discord; using Discord.Commands; using Geekbot.net.Database; using Geekbot.net.Database.Models; using Geekbot.net.Lib.Extensions; using Geekbot.net.Lib.Logger; -using Utf8Json; -using YamlDotNet.RepresentationModel; using YamlDotNet.Serialization; namespace Geekbot.net.Lib.Localization @@ -137,12 +136,17 @@ namespace Geekbot.net.Lib.Localization return translation; } - private async Task> GetDict(ICommandContext context) + private Task> GetDict(ICommandContext context) + { + return GetDict(context.Guild, context.Message); + } + + private async Task> GetDict(IGuild guild, IUserMessage message) { try { - var command = context.Message.Content.Split(' ').First().TrimStart('!').ToLower(); - var serverLanguage = await GetServerLanguage(context.Guild?.Id ?? 0); + var command = message.Content.Split(' ').First().TrimStart('!').ToLower(); + var serverLanguage = await GetServerLanguage(guild?.Id ?? 0); return _translations[serverLanguage][command]; } catch (Exception e) @@ -159,6 +163,13 @@ namespace Geekbot.net.Lib.Localization return new TranslationGuildContext(this, language, dict); } + public async Task GetGuildContext(IGuild guild, IUserMessage message) + { + var dict = await GetDict(guild, message); + var language = await GetServerLanguage(guild?.Id ?? 0); + return new TranslationGuildContext(this, language, dict); + } + public async Task> GetDict(ICommandContext context, string command) { try diff --git a/Geekbot.net/Program.cs b/Geekbot.net/Program.cs index b7251a8..9833b3a 100755 --- a/Geekbot.net/Program.cs +++ b/Geekbot.net/Program.cs @@ -170,7 +170,7 @@ namespace Geekbot.net _servicesProvider = _services.BuildServiceProvider(); await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _servicesProvider); - var handlers = new Handlers(_databaseInitializer, _client, _logger, _redis, _servicesProvider, _commands, _userRepository, reactionListener); + var handlers = new Handlers(_databaseInitializer, _client, _logger, _redis, _servicesProvider, _commands, _userRepository, reactionListener, translationHandler); _client.MessageReceived += handlers.RunCommand; _client.MessageDeleted += handlers.MessageDeleted;