From 6ef9b602e563186f3309cfb415beb850ea8245a8 Mon Sep 17 00:00:00 2001 From: Basique Evangelist Date: Fri, 15 Nov 2019 16:25:08 +0000 Subject: [PATCH] Award command improvement --- JetKarmaBot/Commands/AwardCommand.cs | 60 +++++++++++++++++++++++----- JetKarmaBot/lang/be-BY.json | 4 +- JetKarmaBot/lang/en-US.json | 4 +- JetKarmaBot/lang/ru-RU.json | 4 +- 4 files changed, 60 insertions(+), 12 deletions(-) diff --git a/JetKarmaBot/Commands/AwardCommand.cs b/JetKarmaBot/Commands/AwardCommand.cs index 9064909..8c625a9 100644 --- a/JetKarmaBot/Commands/AwardCommand.cs +++ b/JetKarmaBot/Commands/AwardCommand.cs @@ -23,18 +23,53 @@ namespace JetKarmaBot.Commands using (var db = Db.GetContext()) { var currentLocale = Locale[(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale]; - if (args.Message.ReplyToMessage == null) + + string awardTypeText = null; + int recipientId = default(int); + foreach (string arg in cmd.Parameters) + { + if (arg.StartsWith('@')) + { + if (recipientId != default(int)) + { + await Client.SendTextMessageAsync(args.Message.Chat.Id, currentLocale["jetkarmabot.award.errdup"]); + return true; + } + recipientId = await db.Users.Where(x => x.Username == arg).Select(x => x.UserId).FirstOrDefaultAsync(); + if (recipientId == default(int)) + { + await Client.SendTextMessageAsync(args.Message.Chat.Id, currentLocale["jetkarmabot.award.errbadusername"]); + return true; + } + } + else + { + if (awardTypeText == null) + awardTypeText = arg; + else + { + await Client.SendTextMessageAsync(args.Message.Chat.Id, currentLocale["jetkarmabot.award.errdup"]); + return true; + } + } + } + + if (args.Message.ReplyToMessage != null && recipientId == default(int)) + { + recipientId = args.Message.ReplyToMessage.From.Id; + } + + if (recipientId == default(int)) { await Client.SendTextMessageAsync(args.Message.Chat.Id, currentLocale["jetkarmabot.award.errawardnoreply"]); return true; } var awarder = args.Message.From; - var recipient = args.Message.ReplyToMessage.From; bool awarding = cmd.Command == "award"; - if (awarder.Id == recipient.Id) + if (awarder.Id == recipientId) { await Client.SendTextMessageAsync( args.Message.Chat.Id, @@ -43,7 +78,7 @@ namespace JetKarmaBot.Commands return true; } - if (CommandRouter.Me.Id == recipient.Id) + if (CommandRouter.Me.Id == recipientId) { await Client.SendTextMessageAsync( args.Message.Chat.Id, @@ -55,7 +90,6 @@ namespace JetKarmaBot.Commands } var text = args.Message.Text; - var awardTypeText = cmd.Parameters.FirstOrDefault(); global::JetKarmaBot.Models.AwardType awardType = awardTypeText != null ? await db.AwardTypes.FirstAsync(at => at.CommandName == awardTypeText) : await db.AwardTypes.FindAsync((sbyte)1); @@ -73,20 +107,21 @@ namespace JetKarmaBot.Commands AwardTypeId = awardType.AwardTypeId, Amount = (sbyte)(awarding ? 1 : -1), FromId = awarder.Id, - ToId = recipient.Id, + ToId = recipientId, ChatId = args.Message.Chat.Id }); - log.Debug($"Awarded {(awarding ? 1 : -1)}{awardType.Symbol} to {recipient.Username}"); await db.SaveChangesAsync(); - var recUserName = (await db.Users.FindAsync(recipient.Id)).Username; + var recUserName = (await db.Users.FindAsync(recipientId)).Username; + + log.Debug($"Awarded {(awarding ? 1 : -1)}{awardType.Symbol} to {recUserName}"); string message = awarding ? string.Format(currentLocale["jetkarmabot.award.awardmessage"], getLocalizedName(awardType, currentLocale), recUserName) : string.Format(currentLocale["jetkarmabot.award.revokemessage"], getLocalizedName(awardType, currentLocale), recUserName); var currentCount = await db.Awards - .Where(aw => aw.ToId == recipient.Id && aw.AwardTypeId == awardType.AwardTypeId && aw.ChatId == args.Message.Chat.Id) + .Where(aw => aw.ToId == recipientId && aw.AwardTypeId == awardType.AwardTypeId && aw.ChatId == args.Message.Chat.Id) .SumAsync(aw => aw.Amount); var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, currentCount, awardType.Symbol); @@ -126,6 +161,13 @@ namespace JetKarmaBot.Commands Type=ChatCommandArgumentType.String, Description="The award to grant to/strip of the specified user", DescriptionID="jetkarmabot.award.awardtypehelp" + }, + new ChatCommandArgument() { + Name="to", + Required=false, + Type=ChatCommandArgumentType.String, + Description="The user to award it to (if not present, uses author of message replied to)", + DescriptionID="jetkarmabot.award.tohelp" } }; } diff --git a/JetKarmaBot/lang/be-BY.json b/JetKarmaBot/lang/be-BY.json index 21fb439..e0566dd 100644 --- a/JetKarmaBot/lang/be-BY.json +++ b/JetKarmaBot/lang/be-BY.json @@ -6,7 +6,9 @@ ], "note": "This is a joke. And made with google translate.", "strings": { - "jetkarmabot.award.errawardnoreply": "Калі ласка выкарыстоўвайце гэтую каманду ў адказе іншаму карыстальніку.", + "jetkarmabot.award.errawardnoreply": "Пра каго ты кажаш?", + "jetkarmabot.award.errbadusername": "Хто гэта?", + "jetkarmabot.award.errdup": "Калі ласка, спыніце батчіць ўзнагароды.", "jetkarmabot.award.errawardself": "Хопіць з сабой гуляцца.", "jetkarmabot.award.errawardbot": "Я бот, і мяне вашы нікчэмныя пузамеркі не вабяць.", "jetkarmabot.award.errrevokebot": "ಠ_ಠ", diff --git a/JetKarmaBot/lang/en-US.json b/JetKarmaBot/lang/en-US.json index 5036ce1..71c0443 100644 --- a/JetKarmaBot/lang/en-US.json +++ b/JetKarmaBot/lang/en-US.json @@ -5,7 +5,9 @@ "англійская" ], "strings": { - "jetkarmabot.award.errawardnoreply": "Please use this command in reply to another user.", + "jetkarmabot.award.errawardnoreply": "Who are you talking about?", + "jetkarmabot.award.errbadusername": "I don't know who that is.", + "jetkarmabot.award.errdup": "Please stop batching awards.", "jetkarmabot.award.errawardself": "Please stop playing with yourself.", "jetkarmabot.award.errawardbot": "I am a bot, and have no use for your foolish fake internet points.", "jetkarmabot.award.errrevokebot": "ಠ_ಠ", diff --git a/JetKarmaBot/lang/ru-RU.json b/JetKarmaBot/lang/ru-RU.json index e6543b2..47264d6 100644 --- a/JetKarmaBot/lang/ru-RU.json +++ b/JetKarmaBot/lang/ru-RU.json @@ -5,7 +5,9 @@ "руская" ], "strings": { - "jetkarmabot.award.errawardnoreply": "Пожалуйста используйте эту команду в ответе другому пользователю.", + "jetkarmabot.award.errawardnoreply": "О ком ты говоришь?", + "jetkarmabot.award.errbadusername": "Кто это?", + "jetkarmabot.award.errdup": "Пожалуйста, не батчайте награды.", "jetkarmabot.award.errawardself": "Хватит с собой играться.", "jetkarmabot.award.errawardbot": "Я бот, и меня ваши жалкие пузомерки не интересуют.", "jetkarmabot.award.errrevokebot": "ಠ_ಠ",