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
f47c48e1be
commit
b3dbdb5806
@ -81,6 +81,7 @@ namespace JetKarmaBot
|
|||||||
{
|
{
|
||||||
RequestContext ctx = new RequestContext(Client, args, cmd, db);
|
RequestContext ctx = new RequestContext(Client, args, cmd, db);
|
||||||
await Chain.Handle(ctx);
|
await Chain.Handle(ctx);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -104,9 +105,8 @@ namespace JetKarmaBot
|
|||||||
void InitChain(IContainer c)
|
void InitChain(IContainer c)
|
||||||
{
|
{
|
||||||
Chain = new RequestChain();
|
Chain = new RequestChain();
|
||||||
Chain.Add(new DbHandler(DbHandler.SaveType.From | DbHandler.SaveType.LateDbChanges));
|
|
||||||
Chain.Add(Timeout);
|
Chain.Add(Timeout);
|
||||||
Chain.Add(new DbHandler(DbHandler.SaveType.To | DbHandler.SaveType.Chat));
|
Chain.Add(new SaveData());
|
||||||
Chain.Add(Commands);
|
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()
|
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