geekbot/src/Bot/Commands/User/Karma.cs

76 lines
No EOL
2.5 KiB
C#

using System;
using System.Threading.Tasks;
using Discord;
using Discord.Commands;
using Geekbot.Commands.Karma;
using Geekbot.Core;
using Geekbot.Core.CommandPreconditions;
using Geekbot.Core.Database;
using Geekbot.Core.ErrorHandling;
using Geekbot.Core.Extensions;
using Geekbot.Core.GuildSettingsManager;
namespace Geekbot.Bot.Commands.User
{
[DisableInDirectMessage]
public class Karma : GeekbotCommandBase
{
private readonly DatabaseContext _database;
public Karma(DatabaseContext database, IErrorHandler errorHandler, IGuildSettingsManager guildSettingsManager) : base(errorHandler, guildSettingsManager)
{
_database = database;
}
[Command("good", RunMode = RunMode.Async)]
[Summary("Increase Someones Karma")]
public async Task Good([Summary("@someone")] IUser user)
{
await ChangeKarma(user, KarmaChange.Up);
}
[Command("bad", RunMode = RunMode.Async)]
[Summary("Decrease Someones Karma")]
public async Task Bad([Summary("@someone")] IUser user)
{
await ChangeKarma(user, KarmaChange.Down);
}
[Command("neutral", RunMode = RunMode.Async)]
[Summary("Do nothing to someones Karma")]
public async Task Neutral([Summary("@someone")] IUser user)
{
await ChangeKarma(user, KarmaChange.Same);
}
private async Task ChangeKarma(IUser user, KarmaChange change)
{
try
{
var author = new Core.Interactions.Resolved.User()
{
Id = Context.User.Id.ToString(),
Username = Context.User.Username,
Discriminator = Context.User.Discriminator,
Avatar = Context.User.AvatarId,
};
var targetUser = new Core.Interactions.Resolved.User()
{
Id = user.Id.ToString(),
Username = user.Username,
Discriminator = user.Discriminator,
Avatar = user.AvatarId,
};
var karma = new Geekbot.Commands.Karma.Karma(_database, Context.Guild.Id.AsLong());
var res = await karma.ChangeKarma(author, targetUser, change);
await ReplyAsync(string.Empty, false, res.ToDiscordNetEmbed().Build());
}
catch (Exception e)
{
await ErrorHandler.HandleCommandException(e, Context);
}
}
}
}