Fix status command, remove parameter in status command

This commit is contained in:
jetsparrow 2024-11-15 18:31:22 +03:00
parent b666b43000
commit 67f05b6f3d
4 changed files with 76 additions and 106 deletions

View File

@ -10,55 +10,36 @@ namespace JetKarmaBot.Commands
{ {
class StatusCommand : IChatCommand class StatusCommand : IChatCommand
{ {
public IReadOnlyCollection<string> Names => new[] { "status" }; public IReadOnlyCollection<string> Names => ["status"];
public async Task<bool> Execute(RequestContext ctx) public async Task<bool> Execute(RequestContext ctx)
{ {
var db = ctx.GetFeature<KarmaContext>(); var db = ctx.GetFeature<KarmaContext>();
var currentLocale = ctx.GetFeature<Locale>(); var currentLocale = ctx.GetFeature<Locale>();
var asker = ctx.EventArgs.Message.From; var asker = ctx.EventArgs.Message.From;
var awardTypeName = ctx.Command.Parameters.FirstOrDefault();
bool isPrivate = ctx.EventArgs.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Private; bool isPrivate = ctx.EventArgs.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Private;
string response; string response;
if (string.IsNullOrWhiteSpace(awardTypeName)) var awards = db.Awards.Where(x => x.ToId == asker.Id);
{ if (!isPrivate)
// var awards = db.Awards.Where(x => x.ToId == asker.Id) awards = awards.Where(x => x.ChatId == ctx.EventArgs.Message.Chat.Id);
// .GroupBy(x => x.AwardTypeId)
// .Select(x => new { AwardTypeId = x.Key, Amount = x.Sum(y => y.Amount) });
if (!db.Awards.Any(x => x.ToId == asker.Id && (x.ChatId == ctx.EventArgs.Message.Chat.Id || isPrivate)))
response = currentLocale["jetkarmabot.status.havenothing"];
else
{
var awardsQuery = from award in db.Awards
where award.ToId == asker.Id && (award.ChatId == ctx.EventArgs.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) };
var awardsByType = await awardsQuery.ToListAsync();
response = currentLocale["jetkarmabot.status.listalltext"] + "\n"
+ string.Join("\n",
awardsByType.Select(a => $" - {a.AwardTypeSymbol} {a.Amount}")
);
} if (!awards.Any())
} response = currentLocale["jetkarmabot.status.havenothing"];
else else
{ {
var awardTypeIdQuery = from awt in db.AwardTypes var aq = db.AwardTypes.GroupJoin(
where awt.CommandName == awardTypeName awards,
select awt.AwardTypeId; at => at.AwardTypeId,
var awardTypeId = await awardTypeIdQuery.FirstAsync(); aw => aw.AwardTypeId,
var awardType = await db.AwardTypes.FindAsync(awardTypeId); (at, aws) => new {at.Symbol, Amount = aws.Sum(aw => aw.Amount) });
response = string.Format(currentLocale["jetkarmabot.status.listspecifictext"], var awardsByType = await aq.ToListAsync();
await db.Awards.Where(
x => x.AwardTypeId == awardTypeId response =
&& x.ToId == asker.Id currentLocale["jetkarmabot.status.listalltext"] + "\n"
&& (x.ChatId == ctx.EventArgs.Message.Chat.Id || isPrivate)) + string.Join("\n", awardsByType.Select(a => $" - {a.Symbol} {a.Amount}"));
.SumAsync(x => x.Amount), awardType.Symbol);
} }
await ctx.SendMessage(response); await ctx.SendMessage(response);
@ -70,14 +51,6 @@ namespace JetKarmaBot.Commands
public string Description => "Shows the amount of awards that you have"; public string Description => "Shows the amount of awards that you have";
public string DescriptionID => "jetkarmabot.status.help"; public string DescriptionID => "jetkarmabot.status.help";
public IReadOnlyCollection<ChatCommandArgument> Arguments => new ChatCommandArgument[] { public IReadOnlyCollection<ChatCommandArgument> Arguments => [];
new ChatCommandArgument(){
Name="awardtype",
Required=false,
Type=ChatCommandArgumentType.String,
Description="The awardtype to show. If empty shows everything.",
DescriptionID= "jetkarmabot.status.awardtypehelp"
}
};
} }
} }

View File

@ -5,63 +5,62 @@
"беларуская" "беларуская"
], ],
"note": "This is a joke. And made with google translate.", "note": "This is a joke. And made with google translate.",
"strings": { "strings": {
"jetkarmabot.ratelimit": "Павольны, чувак!", "jetkarmabot.ratelimit": "Павольны, чувак!",
"jetkarmabot.award.errawardnoreply": "Пра каго ты кажаш?", "jetkarmabot.award.errawardnoreply": "Пра каго ты кажаш?",
"jetkarmabot.award.errbadusername": "Хто гэта?", "jetkarmabot.award.errbadusername": "Хто гэта?",
"jetkarmabot.award.errdup": "Калі ласка, спыніце батчіць ўзнагароды.", "jetkarmabot.award.errdup": "Калі ласка, спыніце батчіць ўзнагароды.",
"jetkarmabot.award.errawardself": "Хопіць з сабой гуляцца.", "jetkarmabot.award.errawardself": "Хопіць з сабой гуляцца.",
"jetkarmabot.award.errawardbot": "Я бот, і мяне вашы нікчэмныя пузамеркі не вабяць.", "jetkarmabot.award.errawardbot": "Я бот, і мяне вашы нікчэмныя пузамеркі не вабяць.",
"jetkarmabot.award.errrevokebot": "ಠ_ಠ", "jetkarmabot.award.errrevokebot": "ಠ_ಠ",
"jetkarmabot.award.awardmessage": "Ўручыў \"{0}\" {1}!", "jetkarmabot.award.awardmessage": "Ўручыў \"{0}\" {1}!",
"jetkarmabot.award.revokemessage": "Адабраў \"{0}\" у {1}!", "jetkarmabot.award.revokemessage": "Адабраў \"{0}\" у {1}!",
"jetkarmabot.award.statustext": "У {0} цяпер {1}{2}.", "jetkarmabot.award.statustext": "У {0} цяпер {1}{2}.",
"jetkarmabot.award.help": "Уручае ачко карыстачу (або адымае)", "jetkarmabot.award.help": "Уручае ачко карыстачу (або адымае)",
"jetkarmabot.award.awardtypehelp": "Тып ачкі", "jetkarmabot.award.awardtypehelp": "Тып ачкі",
"jetkarmabot.award.tohelp": "Карыстальнік, якога ўзнагародзіць", "jetkarmabot.award.tohelp": "Карыстальнік, якога ўзнагародзіць",
"jetkarmabot.status.listalltext": "У вас :", "jetkarmabot.status.listalltext": "У вас :",
"jetkarmabot.status.listspecifictext": "У вас зараз {0}{1}.", "jetkarmabot.status.listspecifictext": "У вас зараз {0}{1}.",
"jetkarmabot.status.havenothing": "У вас пакуль нічога няма.", "jetkarmabot.status.havenothing": "У вас пакуль нічога няма.",
"jetkarmabot.status.help": "Паказвае справаздачу па ўзнагародах.", "jetkarmabot.status.help": "Паказвае справаздачу па ўзнагародах.",
"jetkarmabot.status.awardtypehelp": "Тып ўзнагароды, па якой падасца справаздачу. Калі пуста, то падасца зводны справаздачу.", "jetkarmabot.changelocale.justchanged": "Так дакладна.",
"jetkarmabot.changelocale.justchanged": "Так дакладна.", "jetkarmabot.changelocale.getlocale": "Я зараз кажу па-беларускай.",
"jetkarmabot.changelocale.getlocale": "Я зараз кажу па-беларускай.", "jetkarmabot.changelocale.listalltext": "Я ведаю:",
"jetkarmabot.changelocale.listalltext": "Я ведаю:", "jetkarmabot.changelocale.errorall": "Мне б хацелася гаварыць на ўсіх мовах у той жа самы час, але з-за абмежаванняў сусвету, мне гэта не дазваляецца.",
"jetkarmabot.changelocale.errorall": "Мне б хацелася гаварыць на ўсіх мовах у той жа самы час, але з-за абмежаванняў сусвету, мне гэта не дазваляецца.", "jetkarmabot.changelocale.beforenote": "Увага: ",
"jetkarmabot.changelocale.beforenote": "Увага: ", "jetkarmabot.changelocale.toomany": "Не ведаю, на якім дыялекце хочаш, каб я казаў.\nЯ ведаю гэтыя:",
"jetkarmabot.changelocale.toomany": "Не ведаю, на якім дыялекце хочаш, каб я казаў.\nЯ ведаю гэтыя:", "jetkarmabot.changelocale.help": "Змяняе мову, на якім бот кажа ў гэтым чаце",
"jetkarmabot.changelocale.help": "Змяняе мову, на якім бот кажа ў гэтым чаце", "jetkarmabot.changelocale.localehelp": "Новая лакаль, альбо каманда list - спіс перакладаў. Калі пуста - паказваецца бягучая лакаль.",
"jetkarmabot.changelocale.localehelp": "Новая лакаль, альбо каманда list - спіс перакладаў. Калі пуста - паказваецца бягучая лакаль.", "jetkarmabot.help.help": "Паказвае інструкцыю да каманды, ці спіс каманд.",
"jetkarmabot.help.help": "Паказвае інструкцыю да каманды, ці спіс каманд.", "jetkarmabot.help.commandhelp": "Каманда, да якой трэба паказаць інструкцыю. Калі пуста, то паказваецца спіс каманд.",
"jetkarmabot.help.commandhelp": "Каманда, да якой трэба паказаць інструкцыю. Калі пуста, то паказваецца спіс каманд.", "jetkarmabot.currencies.help": "Паказвае ўсе тыпы узнагарод",
"jetkarmabot.currencies.help": "Паказвае ўсе тыпы узнагарод", "jetkarmabot.currencies.listtext": "Тыпы узнагарод:",
"jetkarmabot.currencies.listtext": "Тыпы узнагарод:", "jetkarmabot.leaderboard.help": "Табліца лідэраў па колькасці ўзнагарод",
"jetkarmabot.leaderboard.help": "Табліца лідэраў па колькасці ўзнагарод", "jetkarmabot.leaderboard.awardtypehelp": "Тып ўзнагароды, па якой падасца справаздачу.",
"jetkarmabot.leaderboard.awardtypehelp": "Тып ўзнагароды, па якой падасца справаздачу.", "jetkarmabot.leaderboard.specifictext": "Перадавікі ў намінацыі \"{0}\":",
"jetkarmabot.leaderboard.specifictext": "Перадавікі ў намінацыі \"{0}\":", "jetkarmabot.awardtypes.nominative.star": "зорачка",
"jetkarmabot.awardtypes.nominative.star": "зорачка", "jetkarmabot.awardtypes.nominative.pie": "з паліцы піражок",
"jetkarmabot.awardtypes.nominative.pie": "з паліцы піражок", "jetkarmabot.awardtypes.nominative.dream": "мара",
"jetkarmabot.awardtypes.nominative.dream": "мара", "jetkarmabot.awardtypes.nominative.banana": "стыкер-бананчык",
"jetkarmabot.awardtypes.nominative.banana": "стыкер-бананчык", "jetkarmabot.awardtypes.nominative.determination": "DETERMINATION",
"jetkarmabot.awardtypes.nominative.determination": "DETERMINATION", "jetkarmabot.awardtypes.nominative.raisin": "разынка",
"jetkarmabot.awardtypes.nominative.raisin": "разынка", "jetkarmabot.awardtypes.nominative.touche": "touché",
"jetkarmabot.awardtypes.nominative.touche": "touché", "jetkarmabot.awardtypes.nominative.covid": "каронавірус",
"jetkarmabot.awardtypes.nominative.covid": "каронавірус", "jetkarmabot.awardtypes.nominative.pony": "поніс",
"jetkarmabot.awardtypes.nominative.pony": "поніс", "jetkarmabot.awardtypes.nominative.bellissimo": "беліссімо",
"jetkarmabot.awardtypes.nominative.bellissimo": "беліссімо", "jetkarmabot.awardtypes.nominative.based": "сярдзіта",
"jetkarmabot.awardtypes.nominative.based": "сярдзіта", "jetkarmabot.awardtypes.nominative.redpill": "пілюля",
"jetkarmabot.awardtypes.nominative.redpill": "пілюля", "jetkarmabot.awardtypes.accusative.star": "зорачку",
"jetkarmabot.awardtypes.accusative.star": "зорачку", "jetkarmabot.awardtypes.accusative.pie": "з паліцы піражкі",
"jetkarmabot.awardtypes.accusative.pie": "з паліцы піражкі", "jetkarmabot.awardtypes.accusative.dream": "мары",
"jetkarmabot.awardtypes.accusative.dream": "мары", "jetkarmabot.awardtypes.accusative.banana": "стыкера-бананчыка",
"jetkarmabot.awardtypes.accusative.banana": "стыкера-бананчыка", "jetkarmabot.awardtypes.accusative.determination": "DETERMINATION",
"jetkarmabot.awardtypes.accusative.determination": "DETERMINATION", "jetkarmabot.awardtypes.accusative.raisin": "разыначкі",
"jetkarmabot.awardtypes.accusative.raisin": "разыначкі", "jetkarmabot.awardtypes.accusative.touche": "touché",
"jetkarmabot.awardtypes.accusative.touche": "touché", "jetkarmabot.awardtypes.accusative.covid": "каронавірус",
"jetkarmabot.awardtypes.accusative.covid": "каронавірус", "jetkarmabot.awardtypes.accusative.pony": "поніса",
"jetkarmabot.awardtypes.accusative.pony": "поніса", "jetkarmabot.awardtypes.accusative.bellissimo": "беліссімо",
"jetkarmabot.awardtypes.accusative.bellissimo": "беліссімо", "jetkarmabot.awardtypes.accusative.based": "сярдзіта",
"jetkarmabot.awardtypes.accusative.based": "сярдзіта", "jetkarmabot.awardtypes.accusative.redpill": "пілюлю"
"jetkarmabot.awardtypes.accusative.redpill": "пілюлю" }
}
} }

View File

@ -22,7 +22,6 @@
"jetkarmabot.status.listspecifictext": "You are at {0}{1} now.", "jetkarmabot.status.listspecifictext": "You are at {0}{1} now.",
"jetkarmabot.status.havenothing": "You don't have anything yet.", "jetkarmabot.status.havenothing": "You don't have anything yet.",
"jetkarmabot.status.help": "Shows the amount of awards that you have", "jetkarmabot.status.help": "Shows the amount of awards that you have",
"jetkarmabot.status.awardtypehelp": "The awardtype to show. If empty shows everything.",
"jetkarmabot.changelocale.justchanged": "Roger that.", "jetkarmabot.changelocale.justchanged": "Roger that.",
"jetkarmabot.changelocale.getlocale": "I'm currently speaking English.", "jetkarmabot.changelocale.getlocale": "I'm currently speaking English.",
"jetkarmabot.changelocale.listalltext": "I know:", "jetkarmabot.changelocale.listalltext": "I know:",

View File

@ -22,7 +22,6 @@
"jetkarmabot.status.listspecifictext": "У вас сейчас {0}{1}.", "jetkarmabot.status.listspecifictext": "У вас сейчас {0}{1}.",
"jetkarmabot.status.havenothing": "У вас пока ничего нет.", "jetkarmabot.status.havenothing": "У вас пока ничего нет.",
"jetkarmabot.status.help": "Показывает отчет по наградам.", "jetkarmabot.status.help": "Показывает отчет по наградам.",
"jetkarmabot.status.awardtypehelp": "Тип награды, по которой покажется отчет. Если пусто, то покажется сводный отчет.",
"jetkarmabot.changelocale.justchanged": "Так точно.", "jetkarmabot.changelocale.justchanged": "Так точно.",
"jetkarmabot.changelocale.getlocale": "Я сейчас говорю по-русски.", "jetkarmabot.changelocale.getlocale": "Я сейчас говорю по-русски.",
"jetkarmabot.changelocale.listalltext": "Я знаю:", "jetkarmabot.changelocale.listalltext": "Я знаю:",