diff --git a/JetKarmaBot/Commands/AwardCommand.cs b/JetKarmaBot/Commands/AwardCommand.cs index 15fc7e8..9fbbcc5 100644 --- a/JetKarmaBot/Commands/AwardCommand.cs +++ b/JetKarmaBot/Commands/AwardCommand.cs @@ -90,9 +90,22 @@ namespace JetKarmaBot.Commands } var text = args.Message.Text; - global::JetKarmaBot.Models.AwardType awardType = awardTypeText != null - ? await db.AwardTypes.FirstAsync(at => at.CommandName == awardTypeText) - : await db.AwardTypes.FindAsync((sbyte)1); + string awardTypeAcc, awardTypeSym; + sbyte awardTypeId = 0; + if (awardTypeText == null || awardTypeText == "star") + { + awardTypeAcc = currentLocale["jetkarmabot.star.accusative"]; + awardTypeSym = "★"; + awardTypeId = 0; + } + else + { + var awardType = await db.AwardTypes.FirstAsync(at => at.CommandName == awardTypeText && at.ChatId == args.Message.Chat.Id); + awardTypeAcc = awardType.AccusativeName; + awardTypeSym = awardType.Symbol; + awardTypeId = awardType.AwardTypeId; + } + DateTime cutoff = DateTime.Now - TimeSpan.FromMinutes(5); if (await db.Awards.Where(x => x.Date > cutoff && x.FromId == awarder.Id).CountAsync() >= 10) { @@ -104,7 +117,7 @@ namespace JetKarmaBot.Commands } await db.Awards.AddAsync(new Models.Award() { - AwardTypeId = awardType.AwardTypeId, + AwardTypeId = awardTypeId, Amount = (sbyte)(awarding ? 1 : -1), FromId = awarder.Id, ToId = recipientId, @@ -114,17 +127,16 @@ namespace JetKarmaBot.Commands var recUserName = (await db.Users.FindAsync(recipientId)).Username; - log.Debug($"Awarded {(awarding ? 1 : -1)}{awardType.Symbol} to {recUserName}"); + log.Debug($"Awarded {(awarding ? 1 : -1)}{awardTypeSym} 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); + string message = string.Format(currentLocale[ + awarding ? "jetkarmabot.award.awardmessage" : "jetkarmabot.award.revokemessage"], awardTypeAcc, recUserName); var currentCount = await db.Awards - .Where(aw => aw.ToId == recipientId && aw.AwardTypeId == awardType.AwardTypeId && aw.ChatId == args.Message.Chat.Id) + .Where(aw => aw.ToId == recipientId && aw.AwardTypeId == 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); + var response = message + "\n" + String.Format(currentLocale["jetkarmabot.award.statustext"], recUserName, currentCount, awardTypeSym); await Client.SendTextMessageAsync( args.Message.Chat.Id, diff --git a/JetKarmaBot/Commands/CurrenciesCommand.cs b/JetKarmaBot/Commands/CurrenciesCommand.cs index 27c3572..07b627f 100644 --- a/JetKarmaBot/Commands/CurrenciesCommand.cs +++ b/JetKarmaBot/Commands/CurrenciesCommand.cs @@ -28,8 +28,10 @@ namespace JetKarmaBot.Commands using (var db = Db.GetContext()) { var currentLocale = Locale[(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale]; - string resp = currentLocale["jetkarmabot.currencies.listtext"] + "\n" + string.Join("\n", - (await db.AwardTypes.ToListAsync()).Select(x => $"{x.Symbol} ({x.CommandName}) {currentLocale["jetkarmabot.awardtypes.nominative." + x.CommandName]}")); + string resp = currentLocale["jetkarmabot.currencies.listtext"] + "\n" + + $"★ (star) {currentLocale["jetkarmabot.star.nominative"]}\n" + + string.Join("\n", + (await db.AwardTypes.ToListAsync()).Select(x => $"{x.Symbol} ({x.CommandName}) {x.Name}")); await Client.SendTextMessageAsync( args.Message.Chat.Id, resp, diff --git a/JetKarmaBot/Commands/LeaderboardCommand.cs b/JetKarmaBot/Commands/LeaderboardCommand.cs index ac81e45..9f7f7de 100644 --- a/JetKarmaBot/Commands/LeaderboardCommand.cs +++ b/JetKarmaBot/Commands/LeaderboardCommand.cs @@ -27,16 +27,22 @@ namespace JetKarmaBot.Commands string response; - if (string.IsNullOrWhiteSpace(awardTypeName)) - awardTypeName = "star"; + string awardTypeSym; + sbyte awardTypeId; + if (string.IsNullOrWhiteSpace(awardTypeName) || awardTypeName == "star") + { + awardTypeId = 0; + awardTypeSym = "★"; + } + else + { + AwardType awardType = await db.AwardTypes.FirstAsync(x => x.CommandName == awardTypeName && x.ChatId == args.Message.Chat.Id); + awardTypeSym = awardType.Symbol; + awardTypeId = awardType.AwardTypeId; + } - var awardTypeIdQuery = from awt in db.AwardTypes - where awt.CommandName == awardTypeName - select awt.AwardTypeId; - var awardTypeId = await awardTypeIdQuery.FirstAsync(); - var awardType = await db.AwardTypes.FindAsync(awardTypeId); - response = string.Format(currentLocale["jetkarmabot.leaderboard.specifictext"], awardType.Symbol) + "\n" + string.Join('\n', + response = string.Format(currentLocale["jetkarmabot.leaderboard.specifictext"], awardTypeSym) + "\n" + string.Join('\n', await Task.WhenAll((await db.Awards .Where(x => x.ChatId == args.Message.Chat.Id && x.AwardTypeId == awardTypeId) .GroupBy(x => x.ToId) diff --git a/JetKarmaBot/Commands/StatusCommand.cs b/JetKarmaBot/Commands/StatusCommand.cs index 33e87d8..60232ca 100644 --- a/JetKarmaBot/Commands/StatusCommand.cs +++ b/JetKarmaBot/Commands/StatusCommand.cs @@ -41,8 +41,9 @@ namespace JetKarmaBot.Commands where award.ToId == asker.Id && (award.ChatId == args.Message.Chat.Id || isPrivate) group award by award.AwardTypeId into g join awardType in db.AwardTypes - on g.Key equals awardType.AwardTypeId - select new { AwardTypeId = g.Key, AwardTypeSymbol = awardType.Symbol, Amount = g.Sum(x => x.Amount) }; + on g.Key equals awardType.AwardTypeId into awts + from awt in awts.DefaultIfEmpty() + select new { AwardTypeId = g.Key, AwardTypeSymbol = awt == null ? "★" : awt.Symbol, Amount = g.Sum(x => x.Amount) }; var awardsByType = await awardsQuery.ToListAsync(); response = currentLocale["jetkarmabot.status.listalltext"] + "\n" + string.Join("\n", @@ -53,18 +54,26 @@ namespace JetKarmaBot.Commands } else { - var awardTypeIdQuery = from awt in db.AwardTypes - where awt.CommandName == awardTypeName - select awt.AwardTypeId; - var awardTypeId = await awardTypeIdQuery.FirstAsync(); - var awardType = await db.AwardTypes.FindAsync(awardTypeId); + sbyte awardTypeId; + string awardTypeSym; + if (awardTypeName == "star") + { + awardTypeId = 0; + awardTypeSym = "★"; + } + else + { + AwardType awardType = await db.AwardTypes.FirstAsync(x => x.CommandName == awardTypeName); + awardTypeId = awardType.AwardTypeId; + awardTypeSym = awardType.Symbol; + } response = string.Format(currentLocale["jetkarmabot.status.listspecifictext"], await db.Awards.Where( x => x.AwardTypeId == awardTypeId && x.ToId == asker.Id && x.ChatId == args.Message.Chat.Id) - .SumAsync(x => x.Amount), awardType.Symbol); + .SumAsync(x => x.Amount), awardTypeSym); } await Client.SendTextMessageAsync( diff --git a/JetKarmaBot/Models/AwardType.cs b/JetKarmaBot/Models/AwardType.cs index e2a4a74..1a49aa4 100644 --- a/JetKarmaBot/Models/AwardType.cs +++ b/JetKarmaBot/Models/AwardType.cs @@ -15,6 +15,8 @@ namespace JetKarmaBot.Models public string CommandName { get; set; } public long ChatId { get; set; } public string Name { get; set; } + [Column("accname")] + public string AccusativeName { get; set; } public string Symbol { get; set; } public string Description { get; set; } diff --git a/JetKarmaBot/lang/be-BY.json b/JetKarmaBot/lang/be-BY.json index fd17081..5fae623 100644 --- a/JetKarmaBot/lang/be-BY.json +++ b/JetKarmaBot/lang/be-BY.json @@ -39,17 +39,7 @@ "jetkarmabot.leaderboard.help": "", "jetkarmabot.leaderboard.awardtypehelp": "", "jetkarmabot.leaderboard.specifictext": "", - "jetkarmabot.awardtypes.nominative.star": "зорачка", - "jetkarmabot.awardtypes.nominative.pie": "з паліцы піражок", - "jetkarmabot.awardtypes.nominative.dream": "мара", - "jetkarmabot.awardtypes.nominative.banana": "стыкер-бананчык", - "jetkarmabot.awardtypes.nominative.determination": "DETERMINATION", - "jetkarmabot.awardtypes.nominative.raisin": "разынка", - "jetkarmabot.awardtypes.accusative.star": "зорачку", - "jetkarmabot.awardtypes.accusative.pie": "з паліцы піражкі", - "jetkarmabot.awardtypes.accusative.dream": "мары", - "jetkarmabot.awardtypes.accusative.banana": "стыкера-бананчыка", - "jetkarmabot.awardtypes.accusative.determination": "DETERMINATION", - "jetkarmabot.awardtypes.accusative.raisin": "разыначкі" + "jetkarmabot.star.nominative": "зорачка", + "jetkarmabot.star.accusative": "зорачку" } -} +} \ No newline at end of file diff --git a/JetKarmaBot/lang/en-US.json b/JetKarmaBot/lang/en-US.json index 7f83b8e..b7d1a96 100644 --- a/JetKarmaBot/lang/en-US.json +++ b/JetKarmaBot/lang/en-US.json @@ -38,17 +38,7 @@ "jetkarmabot.leaderboard.help": "Shows the people with the most of a specific award.", "jetkarmabot.leaderboard.awardtypehelp": "The awardtype to show a leaderboard for.", "jetkarmabot.leaderboard.specifictext": "Leaderboard for {0}:", - "jetkarmabot.awardtypes.nominative.star": "star", - "jetkarmabot.awardtypes.nominative.pie": "pie from the shelf", - "jetkarmabot.awardtypes.nominative.dream": "dream", - "jetkarmabot.awardtypes.nominative.banana": "banana sticker", - "jetkarmabot.awardtypes.nominative.determination": "DETERMINATION", - "jetkarmabot.awardtypes.nominative.raisin": "raisin", - "jetkarmabot.awardtypes.accusative.star": "star", - "jetkarmabot.awardtypes.accusative.pie": "pie from the shelf", - "jetkarmabot.awardtypes.accusative.dream": "dream", - "jetkarmabot.awardtypes.accusative.banana": "banana sticker", - "jetkarmabot.awardtypes.accusative.determination": "DETERMINATION", - "jetkarmabot.awardtypes.accusative.raisin": "raisin" + "jetkarmabot.star.nominative": "star", + "jetkarmabot.star.accusative": "star" } -} +} \ No newline at end of file diff --git a/JetKarmaBot/lang/ru-RU.json b/JetKarmaBot/lang/ru-RU.json index 560ec56..42b1307 100644 --- a/JetKarmaBot/lang/ru-RU.json +++ b/JetKarmaBot/lang/ru-RU.json @@ -11,8 +11,8 @@ "jetkarmabot.award.errawardself": "Хватит с собой играться.", "jetkarmabot.award.errawardbot": "Я бот, и меня ваши жалкие пузомерки не интересуют.", "jetkarmabot.award.errrevokebot": "ಠ_ಠ", - "jetkarmabot.award.awardmessage": "Вручил \"{0}\" {1}!", - "jetkarmabot.award.revokemessage": "Отнял \"{0}\" у {1}!", + "jetkarmabot.award.awardmessage": "Вручил {0} {1}!", + "jetkarmabot.award.revokemessage": "Отнял {0} у {1}!", "jetkarmabot.award.statustext": "У {0} теперь {1}{2}.", "jetkarmabot.award.ratelimit": "Помедленней, чувак!", "jetkarmabot.award.help": "Вручает очко пользователю (или отнимает)", @@ -38,17 +38,7 @@ "jetkarmabot.leaderboard.help": "Таблица лидеров по количеству наград", "jetkarmabot.leaderboard.awardtypehelp": "Тип награды, по которой покажется отчет.", "jetkarmabot.leaderboard.specifictext": "Передовики в номинации \"{0}\":", - "jetkarmabot.awardtypes.nominative.star": "звездочка", - "jetkarmabot.awardtypes.nominative.pie": "с полки пирожок", - "jetkarmabot.awardtypes.nominative.dream": "мечта", - "jetkarmabot.awardtypes.nominative.banana": "стикер-бананчик", - "jetkarmabot.awardtypes.nominative.determination": "РЕШИТЕЛЬНОСТЬ", - "jetkarmabot.awardtypes.nominative.raisin": "изюм", - "jetkarmabot.awardtypes.accusative.star": "звездочку", - "jetkarmabot.awardtypes.accusative.pie": "с полки пирожок", - "jetkarmabot.awardtypes.accusative.dream": "мечту", - "jetkarmabot.awardtypes.accusative.banana": "стикер-бананчик", - "jetkarmabot.awardtypes.accusative.determination": "РЕШИТЕЛЬНОСТЬ", - "jetkarmabot.awardtypes.accusative.raisin": "изюм" + "jetkarmabot.star.nominative": "звездочка", + "jetkarmabot.star.accusative": "звездочку" } -} +} \ No newline at end of file diff --git a/karma.sql b/karma.sql index abef214..b702a6c 100644 --- a/karma.sql +++ b/karma.sql @@ -7,6 +7,7 @@ CREATE TABLE `awardtype` ( `commandname` varchar(35) NOT NULL, `chatid` bigint(20) NOT NULL REFERENCES `chat` (`chatid`), `name` varchar(32) NOT NULL, + `accname` varchar(32) NOT NULL, `symbol` varchar(16) NOT NULL, `description` text NOT NULL, UNIQUE KEY `un_cnandchat` (`commandname`, `chatid`)