Port !stats, !role, !wiki and !slap, fix messages in rank, add roleselfservicemodel to db
This commit is contained in:
parent
a1b5bd1955
commit
08015c6102
8 changed files with 141 additions and 74 deletions
|
@ -5,24 +5,25 @@ using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.Net;
|
using Discord.Net;
|
||||||
using Geekbot.net.Lib;
|
using Geekbot.net.Database;
|
||||||
|
using Geekbot.net.Database.Models;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
|
using Geekbot.net.Lib.Extensions;
|
||||||
using Geekbot.net.Lib.ReactionListener;
|
using Geekbot.net.Lib.ReactionListener;
|
||||||
using StackExchange.Redis;
|
|
||||||
|
|
||||||
namespace Geekbot.net.Commands.Admin
|
namespace Geekbot.net.Commands.Admin
|
||||||
{
|
{
|
||||||
[Group("role")]
|
[Group("role")]
|
||||||
public class Role : ModuleBase
|
public class Role : ModuleBase
|
||||||
{
|
{
|
||||||
|
private readonly DatabaseContext _database;
|
||||||
private readonly IErrorHandler _errorHandler;
|
private readonly IErrorHandler _errorHandler;
|
||||||
private readonly IDatabase _redis;
|
|
||||||
private readonly IReactionListener _reactionListener;
|
private readonly IReactionListener _reactionListener;
|
||||||
|
|
||||||
public Role(IErrorHandler errorHandler, IDatabase redis, IReactionListener reactionListener)
|
public Role(DatabaseContext database, IErrorHandler errorHandler, IReactionListener reactionListener)
|
||||||
{
|
{
|
||||||
|
_database = database;
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
_redis = redis;
|
|
||||||
_reactionListener = reactionListener;
|
_reactionListener = reactionListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,8 +33,8 @@ namespace Geekbot.net.Commands.Admin
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var roles = _redis.HashGetAll($"{Context.Guild.Id}:RoleWhitelist");
|
var roles = _database.RoleSelfService.Where(g => g.GuildId.Equals(Context.Guild.Id.AsLong())).ToList();
|
||||||
if (roles.Length == 0)
|
if (roles.Count == 0)
|
||||||
{
|
{
|
||||||
await ReplyAsync("There are no roles configured for this server");
|
await ReplyAsync("There are no roles configured for this server");
|
||||||
return;
|
return;
|
||||||
|
@ -42,7 +43,7 @@ namespace Geekbot.net.Commands.Admin
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.AppendLine($"**Self Service Roles on {Context.Guild.Name}**");
|
sb.AppendLine($"**Self Service Roles on {Context.Guild.Name}**");
|
||||||
sb.AppendLine("To get a role, use `!role name`");
|
sb.AppendLine("To get a role, use `!role name`");
|
||||||
foreach (var role in roles) sb.AppendLine($"- {role.Name}");
|
foreach (var role in roles) sb.AppendLine($"- {role.WhiteListName}");
|
||||||
await ReplyAsync(sb.ToString());
|
await ReplyAsync(sb.ToString());
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -58,18 +59,19 @@ namespace Geekbot.net.Commands.Admin
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var roleName = roleNameRaw.ToLower();
|
var roleName = roleNameRaw.ToLower();
|
||||||
if (_redis.HashExists($"{Context.Guild.Id}:RoleWhitelist", roleName))
|
var roleFromDb = _database.RoleSelfService.FirstOrDefault(e =>
|
||||||
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) && e.WhiteListName.Equals(roleName));
|
||||||
|
if (roleFromDb != null)
|
||||||
{
|
{
|
||||||
var guildUser = (IGuildUser) Context.User;
|
var guildUser = (IGuildUser) Context.User;
|
||||||
var roleId = ulong.Parse(_redis.HashGet($"{Context.Guild.Id}:RoleWhitelist", roleName));
|
var role = Context.Guild.Roles.First(r => r.Id == roleFromDb.RoleId.AsUlong());
|
||||||
var role = Context.Guild.Roles.First(r => r.Id == roleId);
|
|
||||||
if (role == null)
|
if (role == null)
|
||||||
{
|
{
|
||||||
await ReplyAsync("That role doesn't seem to exist");
|
await ReplyAsync("That role doesn't seem to exist");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (guildUser.RoleIds.Contains(roleId))
|
if (guildUser.RoleIds.Contains(role.Id))
|
||||||
{
|
{
|
||||||
await guildUser.RemoveRoleAsync(role);
|
await guildUser.RemoveRoleAsync(role);
|
||||||
await ReplyAsync($"Removed you from {role.Name}");
|
await ReplyAsync($"Removed you from {role.Name}");
|
||||||
|
@ -113,12 +115,17 @@ namespace Geekbot.net.Commands.Admin
|
||||||
|| role.Permissions.KickMembers)
|
|| role.Permissions.KickMembers)
|
||||||
{
|
{
|
||||||
await ReplyAsync(
|
await ReplyAsync(
|
||||||
"Woah, i don't think you want to add that role to self service as it contains some dangerous permissions");
|
"You cannot add that role to self service because it contains one or more dangerous permissions");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_redis.HashSet($"{Context.Guild.Id}:RoleWhitelist",
|
_database.RoleSelfService.Add(new RoleSelfServiceModel
|
||||||
new[] {new HashEntry(roleName.ToLower(), role.Id.ToString())});
|
{
|
||||||
|
GuildId = Context.Guild.Id.AsLong(),
|
||||||
|
RoleId = role.Id.AsLong(),
|
||||||
|
WhiteListName = roleName
|
||||||
|
});
|
||||||
|
_database.SaveChanges();
|
||||||
await ReplyAsync($"Added {role.Name} to the whitelist");
|
await ReplyAsync($"Added {role.Name} to the whitelist");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -134,16 +141,17 @@ namespace Geekbot.net.Commands.Admin
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var roleFromDb = _database.RoleSelfService.FirstOrDefault(e =>
|
||||||
var success = _redis.HashDelete($"{Context.Guild.Id}:RoleWhitelist", roleName.ToLower());
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) && e.WhiteListName.Equals(roleName));
|
||||||
if (success)
|
if (roleFromDb != null)
|
||||||
{
|
{
|
||||||
|
_database.RoleSelfService.Remove(roleFromDb);
|
||||||
|
_database.SaveChanges();
|
||||||
await ReplyAsync($"Removed {roleName} from the whitelist");
|
await ReplyAsync($"Removed {roleName} from the whitelist");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyAsync("There is not whitelisted role with that name...");
|
await ReplyAsync("There is not whitelisted role with that name");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,10 +5,10 @@ using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Geekbot.net.Lib;
|
using Geekbot.net.Database;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
|
using Geekbot.net.Lib.Extensions;
|
||||||
using HtmlAgilityPack;
|
using HtmlAgilityPack;
|
||||||
using StackExchange.Redis;
|
|
||||||
using WikipediaApi;
|
using WikipediaApi;
|
||||||
using WikipediaApi.Page;
|
using WikipediaApi.Page;
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@ namespace Geekbot.net.Commands.Integrations
|
||||||
{
|
{
|
||||||
private readonly IErrorHandler _errorHandler;
|
private readonly IErrorHandler _errorHandler;
|
||||||
private readonly IWikipediaClient _wikipediaClient;
|
private readonly IWikipediaClient _wikipediaClient;
|
||||||
private readonly IDatabase _redis;
|
private readonly DatabaseContext _database;
|
||||||
|
|
||||||
public Wikipedia(IErrorHandler errorHandler, IWikipediaClient wikipediaClient, IDatabase redis)
|
public Wikipedia(IErrorHandler errorHandler, IWikipediaClient wikipediaClient, DatabaseContext database)
|
||||||
{
|
{
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
_wikipediaClient = wikipediaClient;
|
_wikipediaClient = wikipediaClient;
|
||||||
_redis = redis;
|
_database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("wiki", RunMode = RunMode.Async)]
|
[Command("wiki", RunMode = RunMode.Async)]
|
||||||
|
@ -33,7 +33,7 @@ namespace Geekbot.net.Commands.Integrations
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var wikiLang = _redis.HashGet($"{Context.Guild.Id}:Settings", "WikiLang").ToString();
|
var wikiLang = _database.GuildSettings.FirstOrDefault(g => g.GuildId.Equals(Context.Guild.Id.AsLong()))?.WikiLang;
|
||||||
if (string.IsNullOrEmpty(wikiLang))
|
if (string.IsNullOrEmpty(wikiLang))
|
||||||
{
|
{
|
||||||
wikiLang = "en";
|
wikiLang = "en";
|
||||||
|
|
|
@ -1,21 +1,23 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Geekbot.net.Lib;
|
using Geekbot.net.Database;
|
||||||
|
using Geekbot.net.Database.Models;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
using StackExchange.Redis;
|
using Geekbot.net.Lib.Extensions;
|
||||||
|
|
||||||
namespace Geekbot.net.Commands.Randomness
|
namespace Geekbot.net.Commands.Randomness
|
||||||
{
|
{
|
||||||
public class Ship : ModuleBase
|
public class Ship : ModuleBase
|
||||||
{
|
{
|
||||||
private readonly IErrorHandler _errorHandler;
|
private readonly IErrorHandler _errorHandler;
|
||||||
private readonly IDatabase _redis;
|
private readonly DatabaseContext _database;
|
||||||
|
|
||||||
public Ship(IDatabase redis, IErrorHandler errorHandler)
|
public Ship(DatabaseContext database, IErrorHandler errorHandler)
|
||||||
{
|
{
|
||||||
_redis = redis;
|
_database = database;
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,22 +27,29 @@ namespace Geekbot.net.Commands.Randomness
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var dbstring = "";
|
var userKeys = user1.Id < user2.Id
|
||||||
if (user1.Id > user2.Id)
|
? new Tuple<long, long>(user1.Id.AsLong(), user2.Id.AsLong())
|
||||||
dbstring = $"{user1.Id}-{user2.Id}";
|
: new Tuple<long, long>(user2.Id.AsLong(), user1.Id.AsLong());
|
||||||
else
|
|
||||||
dbstring = $"{user2.Id}-{user1.Id}";
|
|
||||||
|
|
||||||
var dbval = _redis.HashGet($"{Context.Guild.Id}:Ships", dbstring);
|
var dbval = _database.Ships.FirstOrDefault(s =>
|
||||||
|
s.FirstUserId.Equals(userKeys.Item1) &&
|
||||||
|
s.SecondUserId.Equals(userKeys.Item2));
|
||||||
|
|
||||||
var shippingRate = 0;
|
var shippingRate = 0;
|
||||||
if (dbval.IsNullOrEmpty)
|
if (dbval == null)
|
||||||
{
|
{
|
||||||
shippingRate = new Random().Next(1, 100);
|
shippingRate = new Random().Next(1, 100);
|
||||||
_redis.HashSet($"{Context.Guild.Id}:Ships", dbstring, shippingRate);
|
_database.Ships.Add(new ShipsModel()
|
||||||
|
{
|
||||||
|
FirstUserId = userKeys.Item1,
|
||||||
|
SecondUserId = userKeys.Item2,
|
||||||
|
Strength = shippingRate
|
||||||
|
});
|
||||||
|
_database.SaveChanges();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
shippingRate = int.Parse(dbval.ToString());
|
shippingRate = dbval.Strength;
|
||||||
}
|
}
|
||||||
|
|
||||||
var reply = ":heartpulse: **Matchmaking** :heartpulse:\r\n";
|
var reply = ":heartpulse: **Matchmaking** :heartpulse:\r\n";
|
||||||
|
|
|
@ -1,23 +1,25 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Geekbot.net.Lib;
|
using Geekbot.net.Database;
|
||||||
|
using Geekbot.net.Database.Models;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
using StackExchange.Redis;
|
using Geekbot.net.Lib.Extensions;
|
||||||
|
|
||||||
namespace Geekbot.net.Commands.Randomness
|
namespace Geekbot.net.Commands.Randomness
|
||||||
{
|
{
|
||||||
public class Slap : ModuleBase
|
public class Slap : ModuleBase
|
||||||
{
|
{
|
||||||
private readonly IErrorHandler _errorHandler;
|
private readonly IErrorHandler _errorHandler;
|
||||||
private readonly IDatabase _redis;
|
private readonly DatabaseContext _database;
|
||||||
|
|
||||||
public Slap(IErrorHandler errorHandler, IDatabase redis)
|
public Slap(IErrorHandler errorHandler, DatabaseContext database)
|
||||||
{
|
{
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
_redis = redis;
|
_database = database;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("slap", RunMode = RunMode.Async)]
|
[Command("slap", RunMode = RunMode.Async)]
|
||||||
|
@ -76,16 +78,53 @@ namespace Geekbot.net.Commands.Randomness
|
||||||
"dictionary",
|
"dictionary",
|
||||||
"powerless banhammer"
|
"powerless banhammer"
|
||||||
};
|
};
|
||||||
|
|
||||||
_redis.HashIncrement($"{Context.Guild.Id}:SlapsRecieved", user.Id.ToString());
|
|
||||||
_redis.HashIncrement($"{Context.Guild.Id}:SlapsGiven", Context.User.Id.ToString());
|
|
||||||
|
|
||||||
await ReplyAsync($"{Context.User.Username} slapped {user.Username} with a {things[new Random().Next(things.Count - 1)]}");
|
await ReplyAsync($"{Context.User.Username} slapped {user.Username} with a {things[new Random().Next(things.Count - 1)]}");
|
||||||
|
|
||||||
|
UpdateRecieved(user.Id);
|
||||||
|
UpdateGiven(Context.User.Id);
|
||||||
|
_database.SaveChanges();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_errorHandler.HandleCommandException(e, Context);
|
_errorHandler.HandleCommandException(e, Context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateGiven(ulong userId)
|
||||||
|
{
|
||||||
|
var user = GetUser(userId);
|
||||||
|
user.Given++;
|
||||||
|
_database.Slaps.Update(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateRecieved(ulong userId)
|
||||||
|
{
|
||||||
|
var user = GetUser(userId);
|
||||||
|
user.Recieved++;
|
||||||
|
_database.Slaps.Update(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SlapsModel GetUser(ulong userId)
|
||||||
|
{
|
||||||
|
var user = _database.Slaps.FirstOrDefault(e =>
|
||||||
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) &&
|
||||||
|
e.UserId.Equals(userId.AsLong())
|
||||||
|
);
|
||||||
|
|
||||||
|
if (user != null) return user;
|
||||||
|
|
||||||
|
_database.Slaps.Add(new SlapsModel
|
||||||
|
{
|
||||||
|
GuildId = Context.Guild.Id.AsLong(),
|
||||||
|
UserId = userId.AsLong(),
|
||||||
|
Recieved = 0,
|
||||||
|
Given = 0
|
||||||
|
});
|
||||||
|
_database.SaveChanges();
|
||||||
|
return _database.Slaps.FirstOrDefault(e =>
|
||||||
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) &&
|
||||||
|
e.UserId.Equals(userId.AsLong()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,12 +6,12 @@ using System.Threading.Tasks;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using Geekbot.net.Database;
|
using Geekbot.net.Database;
|
||||||
using Geekbot.net.Lib;
|
|
||||||
using Geekbot.net.Lib.Converters;
|
using Geekbot.net.Lib.Converters;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
using Geekbot.net.Lib.Extensions;
|
using Geekbot.net.Lib.Extensions;
|
||||||
using Geekbot.net.Lib.Logger;
|
using Geekbot.net.Lib.Logger;
|
||||||
using Geekbot.net.Lib.UserRepository;
|
using Geekbot.net.Lib.UserRepository;
|
||||||
|
using StackExchange.Redis;
|
||||||
|
|
||||||
namespace Geekbot.net.Commands.User.Ranking
|
namespace Geekbot.net.Commands.User.Ranking
|
||||||
{
|
{
|
||||||
|
@ -23,9 +23,10 @@ namespace Geekbot.net.Commands.User.Ranking
|
||||||
private readonly DatabaseContext _database;
|
private readonly DatabaseContext _database;
|
||||||
private readonly IUserRepository _userRepository;
|
private readonly IUserRepository _userRepository;
|
||||||
private readonly DiscordSocketClient _client;
|
private readonly DiscordSocketClient _client;
|
||||||
|
private readonly IDatabase _redis;
|
||||||
|
|
||||||
public Rank(DatabaseContext database, IErrorHandler errorHandler, IGeekbotLogger logger, IUserRepository userRepository,
|
public Rank(DatabaseContext database, IErrorHandler errorHandler, IGeekbotLogger logger, IUserRepository userRepository,
|
||||||
IEmojiConverter emojiConverter, DiscordSocketClient client)
|
IEmojiConverter emojiConverter, DiscordSocketClient client, IDatabase redis)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
|
@ -33,6 +34,7 @@ namespace Geekbot.net.Commands.User.Ranking
|
||||||
_userRepository = userRepository;
|
_userRepository = userRepository;
|
||||||
_emojiConverter = emojiConverter;
|
_emojiConverter = emojiConverter;
|
||||||
_client = client;
|
_client = client;
|
||||||
|
_redis = redis;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command("rank", RunMode = RunMode.Async)]
|
[Command("rank", RunMode = RunMode.Async)]
|
||||||
|
@ -74,8 +76,8 @@ namespace Geekbot.net.Commands.User.Ranking
|
||||||
list = GetRollsList(amount);
|
list = GetRollsList(amount);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
list = new Dictionary<ulong, int>();
|
await ReplyAsync("Valid types are '`messages`' '`karma`', '`rolls`'");
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!list.Any())
|
if (!list.Any())
|
||||||
|
@ -142,18 +144,10 @@ namespace Geekbot.net.Commands.User.Ranking
|
||||||
|
|
||||||
private Dictionary<ulong, int> GetMessageList(int amount)
|
private Dictionary<ulong, int> GetMessageList(int amount)
|
||||||
{
|
{
|
||||||
var data = _database.Messages
|
|
||||||
.Where(k => k.GuildId.Equals(Context.Guild.Id.AsLong()))
|
|
||||||
.OrderByDescending(o => o.MessageCount)
|
|
||||||
.Take(amount);
|
|
||||||
|
|
||||||
var dict = new Dictionary<ulong, int>();
|
|
||||||
foreach (var user in data)
|
|
||||||
{
|
|
||||||
dict.Add(user.UserId.AsUlong(), user.MessageCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
return dict;
|
var data = _redis.HashGetAll($"{Context.Guild.Id}:Messages").ToDictionary().Take(amount + 1);
|
||||||
|
|
||||||
|
return data.Where(user => !user.Key.Equals(0)).ToDictionary(user => ulong.Parse(user.Key), user => int.Parse(user.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<ulong, int> GetKarmaList(int amount)
|
private Dictionary<ulong, int> GetKarmaList(int amount)
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Geekbot.net.Lib;
|
using Geekbot.net.Database;
|
||||||
using Geekbot.net.Lib.ErrorHandling;
|
using Geekbot.net.Lib.ErrorHandling;
|
||||||
|
using Geekbot.net.Lib.Extensions;
|
||||||
using Geekbot.net.Lib.Levels;
|
using Geekbot.net.Lib.Levels;
|
||||||
using StackExchange.Redis;
|
using StackExchange.Redis;
|
||||||
|
|
||||||
|
@ -14,10 +16,12 @@ namespace Geekbot.net.Commands.User
|
||||||
private readonly IErrorHandler _errorHandler;
|
private readonly IErrorHandler _errorHandler;
|
||||||
private readonly ILevelCalc _levelCalc;
|
private readonly ILevelCalc _levelCalc;
|
||||||
private readonly IDatabase _redis;
|
private readonly IDatabase _redis;
|
||||||
|
private readonly DatabaseContext _database;
|
||||||
|
|
||||||
public Stats(IDatabase redis, IErrorHandler errorHandler, ILevelCalc levelCalc)
|
public Stats(IDatabase redis, DatabaseContext database, IErrorHandler errorHandler, ILevelCalc levelCalc)
|
||||||
{
|
{
|
||||||
_redis = redis;
|
_redis = redis;
|
||||||
|
_database = database;
|
||||||
_errorHandler = errorHandler;
|
_errorHandler = errorHandler;
|
||||||
_levelCalc = levelCalc;
|
_levelCalc = levelCalc;
|
||||||
}
|
}
|
||||||
|
@ -47,20 +51,23 @@ namespace Geekbot.net.Commands.User
|
||||||
.WithName(userInfo.Username));
|
.WithName(userInfo.Username));
|
||||||
eb.WithColor(new Color(221, 255, 119));
|
eb.WithColor(new Color(221, 255, 119));
|
||||||
|
|
||||||
var karma = _redis.HashGet($"{Context.Guild.Id}:Karma", userInfo.Id.ToString());
|
var karma = _database.Karma.FirstOrDefault(e =>
|
||||||
var correctRolls = _redis.HashGet($"{Context.Guild.Id}:Rolls", userInfo.Id.ToString());
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) &&
|
||||||
|
e.UserId.Equals(userInfo.Id.AsLong()));
|
||||||
|
var correctRolls = _database.Rolls.FirstOrDefault(e =>
|
||||||
|
e.GuildId.Equals(Context.Guild.Id.AsLong()) &&
|
||||||
|
e.UserId.Equals(userInfo.Id.AsLong()));
|
||||||
|
|
||||||
eb.AddInlineField("Discordian Since",
|
eb.AddInlineField("Discordian Since",
|
||||||
$"{createdAt.Day}.{createdAt.Month}.{createdAt.Year} ({age} days)")
|
$"{createdAt.Day}.{createdAt.Month}.{createdAt.Year} ({age} days)")
|
||||||
.AddInlineField("Joined Server",
|
.AddInlineField("Joined Server",
|
||||||
$"{joinedAt.Day}.{joinedAt.Month}.{joinedAt.Year} ({joinedDayAgo} days)")
|
$"{joinedAt.Day}.{joinedAt.Month}.{joinedAt.Year} ({joinedDayAgo} days)")
|
||||||
.AddInlineField("Karma", karma.ToString() ?? "0")
|
.AddInlineField("Karma", karma?.Karma ?? 0)
|
||||||
.AddInlineField("Level", level)
|
.AddInlineField("Level", level)
|
||||||
.AddInlineField("Messages Sent", messages)
|
.AddInlineField("Messages Sent", messages)
|
||||||
.AddInlineField("Server Total", $"{percent}%");
|
.AddInlineField("Server Total", $"{percent}%");
|
||||||
|
|
||||||
if (!correctRolls.IsNullOrEmpty)
|
if (correctRolls != null) eb.AddInlineField("Guessed Rolls", correctRolls.Rolls);
|
||||||
eb.AddInlineField("Guessed Rolls", correctRolls);
|
|
||||||
|
|
||||||
await ReplyAsync("", false, eb.Build());
|
await ReplyAsync("", false, eb.Build());
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,8 @@ namespace Geekbot.net.Database
|
||||||
public DbSet<MessagesModel> Messages { get; set; }
|
public DbSet<MessagesModel> Messages { get; set; }
|
||||||
public DbSet<SlapsModel> Slaps { get; set; }
|
public DbSet<SlapsModel> Slaps { get; set; }
|
||||||
public DbSet<GlobalsModel> Globals { get; set; }
|
public DbSet<GlobalsModel> Globals { get; set; }
|
||||||
|
public DbSet<RoleSelfServiceModel> RoleSelfService { get; set; }
|
||||||
|
|
||||||
// public DbSet<UserSettingsModel> UserSettings { get; set; }
|
// public DbSet<UserSettingsModel> UserSettings { get; set; }
|
||||||
// public DbSet<RoleSelfServiceModel> RoleSelfService { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,17 @@
|
||||||
namespace Geekbot.net.Database.Models
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Geekbot.net.Database.Models
|
||||||
{
|
{
|
||||||
public class RoleSelfServiceModel
|
public class RoleSelfServiceModel
|
||||||
{
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public long GuildId { get; set; }
|
||||||
|
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
|
||||||
|
public string WhiteListName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue