Make errorhandler and languagehandler async, await all database actions

This commit is contained in:
runebaas 2018-06-13 22:18:57 +02:00
parent 926a632641
commit 95618b1f8b
No known key found for this signature in database
GPG key ID: 2677AF508D0300D6
46 changed files with 181 additions and 137 deletions

View file

@ -51,7 +51,7 @@ namespace Geekbot.net.Commands.User
}
catch (Exception e)
{
_errorHandler.HandleCommandException(e, Context);
await _errorHandler.HandleCommandException(e, Context);
}
}
}

View file

@ -30,8 +30,8 @@ namespace Geekbot.net.Commands.User
{
try
{
var transDict = _translation.GetDict(Context);
var actor = GetUser(Context.User.Id);
var transDict = await _translation.GetDict(Context);
var actor = await GetUser(Context.User.Id);
if (user.Id == Context.User.Id)
{
await ReplyAsync(string.Format(transDict["CannotChangeOwn"], Context.User.Username));
@ -43,7 +43,7 @@ namespace Geekbot.net.Commands.User
}
else
{
var target = GetUser(user.Id);
var target = await GetUser(user.Id);
target.Karma = target.Karma + 1;
SetUser(target);
@ -77,8 +77,8 @@ namespace Geekbot.net.Commands.User
{
try
{
var transDict = _translation.GetDict(Context);
var actor = GetUser(Context.User.Id);
var transDict = await _translation.GetDict(Context);
var actor = await GetUser(Context.User.Id);
if (user.Id == Context.User.Id)
{
await ReplyAsync(string.Format(transDict["CannotChangeOwn"], Context.User.Username));
@ -90,7 +90,7 @@ namespace Geekbot.net.Commands.User
}
else
{
var target = GetUser(user.Id);
var target = await GetUser(user.Id);
target.Karma = target.Karma - 1;
SetUser(target);
@ -129,19 +129,18 @@ namespace Geekbot.net.Commands.User
return $"{dt.Minutes} Minutes and {dt.Seconds} Seconds";
}
private KarmaModel GetUser(ulong userId)
private async Task<KarmaModel> GetUser(ulong userId)
{
var user = _database.Karma.FirstOrDefault(u =>u.GuildId.Equals(Context.Guild.Id.AsLong()) && u.UserId.Equals(userId.AsLong())) ?? CreateNewRow(userId);
var user = _database.Karma.FirstOrDefault(u =>u.GuildId.Equals(Context.Guild.Id.AsLong()) && u.UserId.Equals(userId.AsLong())) ?? await CreateNewRow(userId);
return user;
}
private bool SetUser(KarmaModel user)
private void SetUser(KarmaModel user)
{
_database.Karma.Update(user);
return true;
}
private KarmaModel CreateNewRow(ulong userId)
private async Task<KarmaModel> CreateNewRow(ulong userId)
{
var user = new KarmaModel()
{
@ -151,7 +150,7 @@ namespace Geekbot.net.Commands.User
TimeOut = DateTimeOffset.MinValue
};
var newUser = _database.Karma.Add(user).Entity;
_database.SaveChanges();
await _database.SaveChangesAsync();
return newUser;
}
}

View file

@ -81,6 +81,15 @@ namespace Geekbot.net.Commands.User.Ranking
return;
}
int guildMessages = 0;
if (type == RankType.messages)
{
guildMessages = _database.Messages
.Where(e => e.GuildId.Equals(Context.Guild.Id.AsLong()))
.Select(e => e.MessageCount)
.Sum();
}
var highscoreUsers = new Dictionary<RankUserDto, int>();
var failedToRetrieveUser = false;
foreach (var user in list)
@ -112,7 +121,7 @@ namespace Geekbot.net.Commands.User.Ranking
}
if (failedToRetrieveUser) replyBuilder.AppendLine(":warning: Couldn't get all userdata\n");
replyBuilder.AppendLine($":bar_chart: **{type} Highscore for {Context.Guild.Name}**");
replyBuilder.AppendLine($":bar_chart: **{type.ToString().CapitalizeFirst()} Highscore for {Context.Guild.Name}**");
var highscorePlace = 1;
foreach (var user in highscoreUsers)
{
@ -123,8 +132,10 @@ namespace Geekbot.net.Commands.User.Ranking
replyBuilder.Append(user.Key.Username != null
? $"**{user.Key.Username}#{user.Key.Discriminator}**"
: $"**{user.Key.Id}**");
replyBuilder.Append($" - {user.Value} {type}\n");
replyBuilder.Append(type == RankType.messages
? $" - {user.Value} {type} - {Math.Round((double) (100 * user.Value) / guildMessages, digits: 2)}%\n"
: $" - {user.Value} {type}\n");
highscorePlace++;
}
@ -133,12 +144,17 @@ namespace Geekbot.net.Commands.User.Ranking
}
catch (Exception e)
{
_errorHandler.HandleCommandException(e, Context);
await _errorHandler.HandleCommandException(e, Context);
}
}
private Dictionary<ulong, int> GetMessageList(int amount)
{
// return _database.Messages
// .Where(k => k.GuildId.Equals(Context.Guild.Id.AsLong()))
// .OrderByDescending(o => o.MessageCount)
// .Take(amount)
// .ToDictionary(key => key.UserId.AsUlong(), key => key.MessageCount);
return _redis.Db
.HashGetAll($"{Context.Guild.Id}:Messages").ToDictionary().Take(amount + 1)
.Where(user => !user.Key.Equals(0))

View file

@ -39,11 +39,18 @@ namespace Geekbot.net.Commands.User
var age = Math.Floor((DateTime.Now - createdAt).TotalDays);
var joinedDayAgo = Math.Floor((DateTime.Now - joinedAt).TotalDays);
var messages = (int) _redis.Db.HashGet($"{Context.Guild.Id}:Messages", userInfo.Id.ToString());
var guildMessages = (int) _redis.Db.HashGet($"{Context.Guild.Id}:Messages", 0.ToString());
var messages = _database.Messages.FirstOrDefault(e =>
e.GuildId.Equals(Context.Guild.Id.AsLong()) &&
e.UserId.Equals(userInfo.Id.AsLong()))?.MessageCount;
var guildMessages = _database.Messages
.Where(e => e.GuildId.Equals(Context.Guild.Id.AsLong()))
.Select(e => e.MessageCount)
.Sum();
var level = _levelCalc.GetLevel(messages);
var percent = Math.Round((double) (100 * messages) / guildMessages, 2);
var percent = Math.Round((double) (100 * messages) / guildMessages, digits: 2);
var eb = new EmbedBuilder();
eb.WithAuthor(new EmbedAuthorBuilder()