mirror of
https://github.com/Jetsparrow/karmabot.git
synced 2026-01-21 00:56:09 +03:00
Tweak of SaveData (DbHandler)
This commit is contained in:
parent
42f24f2f19
commit
235b1770f8
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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<RequestContext, Task> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
36
JetKarmaBot/Services/Handling/SaveData.cs
Normal file
36
JetKarmaBot/Services/Handling/SaveData.cs
Normal file
@ -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<RequestContext, Task> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user