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`)