Award command improvement

This commit is contained in:
Nikolay Kochulin 2019-11-15 16:25:08 +00:00
parent 3a14060e6b
commit 44c47913d7
4 changed files with 60 additions and 12 deletions

View File

@ -23,18 +23,53 @@ namespace JetKarmaBot.Commands
using (var db = Db.GetContext()) using (var db = Db.GetContext())
{ {
var currentLocale = Locale[(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale]; 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"]); await Client.SendTextMessageAsync(args.Message.Chat.Id, currentLocale["jetkarmabot.award.errawardnoreply"]);
return true; return true;
} }
var awarder = args.Message.From; var awarder = args.Message.From;
var recipient = args.Message.ReplyToMessage.From;
bool awarding = cmd.Command == "award"; bool awarding = cmd.Command == "award";
if (awarder.Id == recipient.Id) if (awarder.Id == recipientId)
{ {
await Client.SendTextMessageAsync( await Client.SendTextMessageAsync(
args.Message.Chat.Id, args.Message.Chat.Id,
@ -43,7 +78,7 @@ namespace JetKarmaBot.Commands
return true; return true;
} }
if (CommandRouter.Me.Id == recipient.Id) if (CommandRouter.Me.Id == recipientId)
{ {
await Client.SendTextMessageAsync( await Client.SendTextMessageAsync(
args.Message.Chat.Id, args.Message.Chat.Id,
@ -55,7 +90,6 @@ namespace JetKarmaBot.Commands
} }
var text = args.Message.Text; var text = args.Message.Text;
var awardTypeText = cmd.Parameters.FirstOrDefault();
global::JetKarmaBot.Models.AwardType awardType = awardTypeText != null global::JetKarmaBot.Models.AwardType awardType = awardTypeText != null
? await db.AwardTypes.FirstAsync(at => at.CommandName == awardTypeText) ? await db.AwardTypes.FirstAsync(at => at.CommandName == awardTypeText)
: await db.AwardTypes.FindAsync((sbyte)1); : await db.AwardTypes.FindAsync((sbyte)1);
@ -73,20 +107,21 @@ namespace JetKarmaBot.Commands
AwardTypeId = awardType.AwardTypeId, AwardTypeId = awardType.AwardTypeId,
Amount = (sbyte)(awarding ? 1 : -1), Amount = (sbyte)(awarding ? 1 : -1),
FromId = awarder.Id, FromId = awarder.Id,
ToId = recipient.Id, ToId = recipientId,
ChatId = args.Message.Chat.Id ChatId = args.Message.Chat.Id
}); });
log.Debug($"Awarded {(awarding ? 1 : -1)}{awardType.Symbol} to {recipient.Username}");
await db.SaveChangesAsync(); 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 message = awarding
? string.Format(currentLocale["jetkarmabot.award.awardmessage"], getLocalizedName(awardType, currentLocale), recUserName) ? string.Format(currentLocale["jetkarmabot.award.awardmessage"], getLocalizedName(awardType, currentLocale), recUserName)
: string.Format(currentLocale["jetkarmabot.award.revokemessage"], getLocalizedName(awardType, currentLocale), recUserName); : string.Format(currentLocale["jetkarmabot.award.revokemessage"], getLocalizedName(awardType, currentLocale), recUserName);
var currentCount = await db.Awards 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); .SumAsync(aw => aw.Amount);
var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, currentCount, awardType.Symbol); var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, currentCount, awardType.Symbol);
@ -126,6 +161,13 @@ namespace JetKarmaBot.Commands
Type=ChatCommandArgumentType.String, Type=ChatCommandArgumentType.String,
Description="The award to grant to/strip of the specified user", Description="The award to grant to/strip of the specified user",
DescriptionID="jetkarmabot.award.awardtypehelp" 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"
} }
}; };
} }

View File

@ -6,7 +6,9 @@
], ],
"note": "This is a joke. And made with google translate.", "note": "This is a joke. And made with google translate.",
"strings": { "strings": {
"jetkarmabot.award.errawardnoreply": "Калі ласка выкарыстоўвайце гэтую каманду ў адказе іншаму карыстальніку.", "jetkarmabot.award.errawardnoreply": "Пра каго ты кажаш?",
"jetkarmabot.award.errbadusername": "Хто гэта?",
"jetkarmabot.award.errdup": "Калі ласка, спыніце батчіць ўзнагароды.",
"jetkarmabot.award.errawardself": "Хопіць з сабой гуляцца.", "jetkarmabot.award.errawardself": "Хопіць з сабой гуляцца.",
"jetkarmabot.award.errawardbot": "Я бот, і мяне вашы нікчэмныя пузамеркі не вабяць.", "jetkarmabot.award.errawardbot": "Я бот, і мяне вашы нікчэмныя пузамеркі не вабяць.",
"jetkarmabot.award.errrevokebot": "ಠ_ಠ", "jetkarmabot.award.errrevokebot": "ಠ_ಠ",

View File

@ -5,7 +5,9 @@
"англійская" "англійская"
], ],
"strings": { "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.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.errawardbot": "I am a bot, and have no use for your foolish fake internet points.",
"jetkarmabot.award.errrevokebot": "ಠ_ಠ", "jetkarmabot.award.errrevokebot": "ಠ_ಠ",

View File

@ -5,7 +5,9 @@
"руская" "руская"
], ],
"strings": { "strings": {
"jetkarmabot.award.errawardnoreply": "Пожалуйста используйте эту команду в ответе другому пользователю.", "jetkarmabot.award.errawardnoreply": "О ком ты говоришь?",
"jetkarmabot.award.errbadusername": "Кто это?",
"jetkarmabot.award.errdup": "Пожалуйста, не батчайте награды.",
"jetkarmabot.award.errawardself": "Хватит с собой играться.", "jetkarmabot.award.errawardself": "Хватит с собой играться.",
"jetkarmabot.award.errawardbot": "Я бот, и меня ваши жалкие пузомерки не интересуют.", "jetkarmabot.award.errawardbot": "Я бот, и меня ваши жалкие пузомерки не интересуют.",
"jetkarmabot.award.errrevokebot": "ಠ_ಠ", "jetkarmabot.award.errrevokebot": "ಠ_ಠ",