diff --git a/JetKarmaBot/Commands/AwardTypeCommand.cs b/JetKarmaBot/Commands/AwardTypeCommand.cs index 01a0355..b21111e 100644 --- a/JetKarmaBot/Commands/AwardTypeCommand.cs +++ b/JetKarmaBot/Commands/AwardTypeCommand.cs @@ -26,6 +26,7 @@ namespace JetKarmaBot.Commands Router.SuperCommand = "at"; r.Add(c.GetInstance()); r.Add(c.GetInstance()); + r.Add(c.GetInstance()); r.Add(c.GetInstance()); } diff --git a/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs b/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs index 3132d43..5e6dc9f 100644 --- a/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs +++ b/JetKarmaBot/Commands/AwardTypeManage/RemoveCommand.cs @@ -29,7 +29,7 @@ namespace JetKarmaBot.Commands.AwardTypeManage Required=true, Type=ChatCommandArgumentType.String, Description="The award to remove", - DescriptionID="jetkarmabot.award.cmdnamehelp" + DescriptionID="jetkarmabot.at.remove.awardhelp" } }; @@ -49,7 +49,7 @@ namespace JetKarmaBot.Commands.AwardTypeManage return true; } - if (cmd.Parameters.Length < 1 || cmd.Parameters.Length > 1) + if (cmd.Parameters.Length != 1) { await Client.SendTextMessageAsync( args.Message.Chat.Id, @@ -58,7 +58,7 @@ namespace JetKarmaBot.Commands.AwardTypeManage return true; } - AwardType awardType = await db.AwardTypes.FirstAsync(x => x.CommandName == cmd.Parameters[0]); + AwardType awardType = await db.AwardTypes.FirstOrDefaultAsync(x => x.CommandName == cmd.Parameters[0]); if (awardType == null) { diff --git a/JetKarmaBot/Commands/AwardTypeManage/SetParameterCommand.cs b/JetKarmaBot/Commands/AwardTypeManage/SetParameterCommand.cs new file mode 100644 index 0000000..d1d0f72 --- /dev/null +++ b/JetKarmaBot/Commands/AwardTypeManage/SetParameterCommand.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using JetKarmaBot.Models; +using JetKarmaBot.Services; +using Microsoft.EntityFrameworkCore; +using Perfusion; +using Telegram.Bot; +using Telegram.Bot.Args; +using Telegram.Bot.Types; +using Telegram.Bot.Types.Enums; + +namespace JetKarmaBot.Commands.AwardTypeManage +{ + public class SetParameterCommand : IChatCommand + { + public IReadOnlyCollection Names => new[] { "set" }; + + public string Description => "Set parameter of award type."; + + public string DescriptionID => "jetkarmabot.at.set.help"; + [Inject] TelegramBotClient Client { get; set; } + [Inject] public KarmaContextFactory Db { get; set; } + [Inject] public Localization Locale { get; set; } + + public IReadOnlyCollection Arguments => new[] { + new ChatCommandArgument() { + Name="award", + Required=true, + Type=ChatCommandArgumentType.String, + Description="The award to change", + DescriptionID="jetkarmabot.at.set.awardhelp" + }, + new ChatCommandArgument() { + Name="param", + Required=true, + Type=ChatCommandArgumentType.String, + Description="The parameter to change. Can be nomname, accname, symbol or desc", + DescriptionID="jetkarmabot.at.set.paramhelp" + }, + new ChatCommandArgument() { + Name="value", + Required=true, + Type=ChatCommandArgumentType.String, + Description="The value to change param to.", + DescriptionID="jetkarmabot.at.set.valuehelp" + } + }; + public async Task Execute(ICommandRouter route, CommandString cmd, MessageEventArgs args) + { + using (var db = Db.GetContext()) + { + var currentLocale = Locale[(await db.Chats.FindAsync(args.Message.Chat.Id)).Locale]; + + ChatMember cm = await Client.GetChatMemberAsync(args.Message.Chat.Id, args.Message.From.Id); + if (cm.Status != ChatMemberStatus.Administrator && cm.Status != ChatMemberStatus.Creator) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.set.errperm"], + replyToMessageId: args.Message.MessageId); + return true; + } + + if (cmd.Parameters.Length != 3) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.set.errarg"], + replyToMessageId: args.Message.MessageId); + return true; + } + + AwardType awardType = await db.AwardTypes.FirstOrDefaultAsync(x => x.CommandName == cmd.Parameters[0]); + + if (awardType == null) + { + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.set.errinvcn"], + replyToMessageId: args.Message.MessageId); + return true; + } + + switch (cmd.Parameters[1]) + { + case "nomname": + awardType.NominativeName = cmd.Parameters[2]; + break; + case "accname": + awardType.AccusativeName = cmd.Parameters[2]; + break; + case "symbol": + awardType.Symbol = cmd.Parameters[2]; + break; + case "desc": + awardType.Description = cmd.Parameters[2]; + break; + default: + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + currentLocale["jetkarmabot.at.set.errinvparamname"], + replyToMessageId: args.Message.MessageId); + return true; + } + await db.SaveChangesAsync(); + await Client.SendTextMessageAsync( + args.Message.Chat.Id, + string.Format(currentLocale["jetkarmabot.at.set.success"], cmd.Parameters[0], + currentLocale["jetkarmabot.at.set." + cmd.Parameters[2]]), + replyToMessageId: args.Message.MessageId); + return true; + } + } + } +} diff --git a/JetKarmaBot/Models/KarmaContext.cs b/JetKarmaBot/Models/KarmaContext.cs index 90ee54c..efead17 100644 --- a/JetKarmaBot/Models/KarmaContext.cs +++ b/JetKarmaBot/Models/KarmaContext.cs @@ -89,7 +89,7 @@ namespace JetKarmaBot.Models .WithMany(p => p.Awards) .HasForeignKey(d => d.ChatId) .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("fk_chat"); + .HasConstraintName("a_fk_chat"); entity.HasOne(d => d.From) .WithMany(p => p.AwardsFrom) @@ -109,7 +109,7 @@ namespace JetKarmaBot.Models entity.ToTable("awardtype"); entity.HasIndex(e => e.AwardTypeId) - .HasName("awardtypeid_UNIQUE") + .HasName("at_awardtypeid_UNIQUE") .IsUnique(); entity.HasIndex(e => new { e.CommandName, e.ChatId }) @@ -144,7 +144,7 @@ namespace JetKarmaBot.Models .WithMany(p => p.AwardTypes) .HasForeignKey(d => d.ChatId) .OnDelete(DeleteBehavior.ClientSetNull) - .HasConstraintName("fk_chat"); + .HasConstraintName("at_fk_chat"); }); modelBuilder.Entity(entity =>