diff --git a/JetKarmaBot/JetKarmaBot.cs b/JetKarmaBot/JetKarmaBot.cs index f8170b7..e650189 100644 --- a/JetKarmaBot/JetKarmaBot.cs +++ b/JetKarmaBot/JetKarmaBot.cs @@ -81,6 +81,7 @@ namespace JetKarmaBot { RequestContext ctx = new RequestContext(Client, args, cmd, db); await Chain.Handle(ctx); + await db.SaveChangesAsync(); } }); } @@ -104,9 +105,8 @@ namespace JetKarmaBot void InitChain(IContainer c) { Chain = new RequestChain(); - Chain.Add(new DbHandler(DbHandler.SaveType.From | DbHandler.SaveType.LateDbChanges)); Chain.Add(Timeout); - Chain.Add(new DbHandler(DbHandler.SaveType.To | DbHandler.SaveType.Chat)); + Chain.Add(new SaveData()); Chain.Add(Commands); } diff --git a/JetKarmaBot/Services/Handling/DbHandler.cs b/JetKarmaBot/Services/Handling/DbHandler.cs deleted file mode 100644 index 431843f..0000000 --- a/JetKarmaBot/Services/Handling/DbHandler.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Threading.Tasks; -using JetKarmaBot.Models; -using Microsoft.EntityFrameworkCore; - -namespace JetKarmaBot.Services.Handling -{ - public class DbHandler : IRequestHandler - { - [Flags] - public enum SaveType - { - From = 1 << 0, - To = 1 << 1, - Chat = 1 << 2, - LateDbChanges = 1 << 3 - } - private SaveType type; - public DbHandler(SaveType type) - { - this.type = type; - } - public async Task Handle(RequestContext ctx, Func next) - { - KarmaContext db = ctx.Database; - if (type.HasFlag(SaveType.From)) - await AddUserToDatabase(db, ctx.EventArgs.Message.From); - if (type.HasFlag(SaveType.To)) - if (ctx.EventArgs.Message.ReplyToMessage != null) - await AddUserToDatabase(db, ctx.EventArgs.Message.ReplyToMessage.From); - if (type.HasFlag(SaveType.Chat)) - if (!await db.Chats.AnyAsync(x => x.ChatId == ctx.EventArgs.Message.Chat.Id)) - db.Chats.Add(new Models.Chat - { - ChatId = ctx.EventArgs.Message.Chat.Id - }); - await next(ctx); - if (type.HasFlag(SaveType.LateDbChanges)) - await db.SaveChangesAsync(); - } - private async Task AddUserToDatabase(KarmaContext db, Telegram.Bot.Types.User u) - { - string un; - if (u.Username == null) - un = u.FirstName + (u.LastName != null ? " " + u.LastName : ""); - else - un = "@" + u.Username; - if (!await db.Users.AnyAsync(x => x.UserId == u.Id)) - await db.Users.AddAsync(new Models.User { UserId = u.Id, Username = un }); - else - (await db.Users.FindAsync(u.Id)).Username = un; - } - } -} \ No newline at end of file diff --git a/JetKarmaBot/Services/Handling/SaveData.cs b/JetKarmaBot/Services/Handling/SaveData.cs new file mode 100644 index 0000000..5b16a02 --- /dev/null +++ b/JetKarmaBot/Services/Handling/SaveData.cs @@ -0,0 +1,36 @@ +using System; +using System.Threading.Tasks; +using JetKarmaBot.Models; +using Microsoft.EntityFrameworkCore; + +namespace JetKarmaBot.Services.Handling +{ + public class SaveData : IRequestHandler + { + public async Task Handle(RequestContext ctx, Func next) + { + KarmaContext db = ctx.Database; + await AddUserToDatabase(db, ctx.EventArgs.Message.From); + if (ctx.EventArgs.Message.ReplyToMessage != null) + await AddUserToDatabase(db, ctx.EventArgs.Message.ReplyToMessage.From); + if (!await db.Chats.AnyAsync(x => x.ChatId == ctx.EventArgs.Message.Chat.Id)) + db.Chats.Add(new Models.Chat + { + ChatId = ctx.EventArgs.Message.Chat.Id + }); + await next(ctx); + } + private async Task AddUserToDatabase(KarmaContext db, Telegram.Bot.Types.User u) + { + string un; + if (u.Username == null) + un = u.FirstName + (u.LastName != null ? " " + u.LastName : ""); + else + un = "@" + u.Username; + if (!await db.Users.AnyAsync(x => x.UserId == u.Id)) + await db.Users.AddAsync(new Models.User { UserId = u.Id, Username = un }); + else + (await db.Users.FindAsync(u.Id)).Username = un; + } + } +} \ No newline at end of file diff --git a/JetKarmaBot/Services/Handling/TimeoutManager.cs b/JetKarmaBot/Services/Handling/TimeoutManager.cs index 828e76d..abc9295 100644 --- a/JetKarmaBot/Services/Handling/TimeoutManager.cs +++ b/JetKarmaBot/Services/Handling/TimeoutManager.cs @@ -47,7 +47,7 @@ namespace JetKarmaBot.Services.Handling { TimeoutCache[uid] = new TimeoutStats() { - CooldownDate = (await db.Users.FindAsync(uid)).CooldownDate + CooldownDate = (await db.Users.FindAsync(uid))?.CooldownDate ?? DateTime.Now }; } }