From 715ea7528f70f9e969198633038d11d51eea001f Mon Sep 17 00:00:00 2001 From: Nikolay Kochulin Date: Sat, 16 Nov 2019 20:59:35 +0000 Subject: [PATCH] Add /at remove --- JetKarmaBot/Commands/AwardTypeCommand.cs | 1 + .../Commands/AwardTypeManage/RemoveCommand.cs | 86 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs diff --git a/JetKarmaBot/Commands/AwardTypeCommand.cs b/JetKarmaBot/Commands/AwardTypeCommand.cs index 2022cd5..01a0355 100644 --- a/JetKarmaBot/Commands/AwardTypeCommand.cs +++ b/JetKarmaBot/Commands/AwardTypeCommand.cs @@ -25,6 +25,7 @@ namespace JetKarmaBot.Commands Router = r; Router.SuperCommand = "at"; r.Add(c.GetInstance()); + r.Add(c.GetInstance()); r.Add(c.GetInstance()); } diff --git a/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs b/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs new file mode 100644 index 0000000..3132d43 --- /dev/null +++ b/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using JetKarmaBot.Models; +using JetKarmaBot.Services; +using Microsoft.EntityFrameworkCore; +using Perfusion; +using Telegram.Bot; +using Telegram.Bot.Args; +using Telegram.Bot.Types; +using Telegram.Bot.Types.Enums; + +namespace JetKarmaBot.Commands.AwardTypeManage +{ + public class RemoveCommand : IChatCommand + { + public IReadOnlyCollection Names => new[] { "remove" }; + + public string Description => "Remove an award type."; + + public string DescriptionID => "jetkarmabot.at.remove.help"; + [Inject] TelegramBotClient Client { get; set; } + [Inject] public KarmaContextFactory Db { get; set; } + [Inject] public Localization Locale { get; set; } + + public IReadOnlyCollection Arguments => new[] { + new ChatCommandArgument() { + Name="award", + Required=true, + Type=ChatCommandArgumentType.String, + Description="The award to remove", + DescriptionID="jetkarmabot.award.cmdnamehelp" + } + }; + + public async Task Execute(ICommandRouter route, CommandString cmd, MessageEventArgs args) + { + using (var db = Db.GetContext()) + { + var currentLocale = Locale[(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale]; + + ChatMember cm = await Client.GetChatMemberAsync(args.Message.Chat.Id, args.Message.From.Id); + if (cm.Status != ChatMemberStatus.Administrator && cm.Status != ChatMemberStatus.Creator) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.remove.errperm"], + replyToMessageId: args.Message.MessageId); + return true; + } + + if (cmd.Parameters.Length < 1 || cmd.Parameters.Length > 1) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.remove.errarg"], + replyToMessageId: args.Message.MessageId); + return true; + } + + AwardType awardType = await db.AwardTypes.FirstAsync(x => x.CommandName == cmd.Parameters[0]); + + if (awardType == null) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.remove.errinvcn"], + replyToMessageId: args.Message.MessageId); + return true; + } + + await db.Database.ExecuteSqlCommandAsync("DELETE FROM award WHERE awardtypeid = @p0", awardType.AwardTypeId); // No delete by predicate in ef core yet..s + + db.AwardTypes.Remove(awardType); + + await db.SaveChangesAsync(); + + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale[string.Format("jetkarmabot.at.remove.success", cmd.Parameters[0])], + replyToMessageId: args.Message.MessageId); + return true; + } + } + } +} \ No newline at end of file