Migrate to database storage in UrlLimitations

This commit is contained in:
2020-03-08 12:38:00 +04:00
parent 3fd5042367
commit 73cfe51312
7 changed files with 151 additions and 48 deletions
+11 -11
View File
@@ -5,6 +5,7 @@ using BotFramework;
using BotFramework.Attributes;
using BotFramework.Setup;
using Kruzya.TelegramBot.Core.Cache;
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
using Microsoft.Extensions.Logging;
using Telegram.Bot.Types;
@@ -15,35 +16,34 @@ namespace Kruzya.TelegramBot.UrlLimitations
public class MessageHandler : BotEventHandler
{
protected ILogger Logger;
protected MemoryCache<ChatMember, UInt16> ChatMembersCache;
protected readonly CoreContext dbCtx;
public MessageHandler(ILogger<MessageHandler> logger, MemoryCache<ChatMember, UInt16> chatMembersCache)
public MessageHandler(ILogger<MessageHandler> logger, CoreContext coreContext)
{
Logger = logger;
ChatMembersCache = chatMembersCache;
dbCtx = coreContext;
}
[TextMessage(InChat.Public)]
public void OnMessageReceived()
public async Task OnMessageReceived()
{
UInt16 messageCount;
var chatMember = ChatMember.From(Chat.Id, From.Id);
if (!ChatMembersCache.TryGetValue(chatMember, out messageCount))
var option = await dbCtx.UserValues.FindOption(Chat.Id, From.Id, "urlLimitations.messagesAfterJoin");
if (option == null)
{
return;
}
var messageCount = option.GetValue<UInt16>();
if (messageCount > 10)
{
ChatMembersCache.SetValue(chatMember, 0, 0);
dbCtx.UserValues.Remove(option);
return;
}
messageCount++;
ChatMembersCache.SetValue(chatMember, messageCount);
option.SetValue(messageCount + 1);
var message = RawUpdate.Message;
if (message.Entities.Count(e => e.Type == MessageEntityType.Url || e.Type == MessageEntityType.TextLink) >
0)
0 || await message.HasUnknownMention(Bot))
{
var targetChat = new ChatId(Chat.Id);
Task.WaitAll(new Task[] {