2023-01-23 13:12:38 +02:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Concurrent;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Threading.Tasks;
|
2022-07-07 17:15:40 +03:00
|
|
|
using BotFramework.Abstractions;
|
|
|
|
|
using Kruzya.TelegramBot.Core.Service;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using Telegram.Bot;
|
|
|
|
|
using Telegram.Bot.Exceptions;
|
|
|
|
|
|
2023-01-23 13:12:38 +02:00
|
|
|
namespace Kruzya.TelegramBot.Core.AutoDelete;
|
2022-07-07 17:15:40 +03:00
|
|
|
|
|
|
|
|
public class DeleteService : AbstractTimedHostedService
|
|
|
|
|
{
|
|
|
|
|
private readonly ConcurrentBag<DeleteRequest> _deleteRequests;
|
|
|
|
|
protected override TimeSpan TimerPeriod => TimeSpan.FromSeconds(10);
|
|
|
|
|
|
|
|
|
|
public DeleteService(ILogger<DeleteService> logger, IBotInstance bot, ConcurrentBag<DeleteRequest> deleteRequests) : base(logger,
|
|
|
|
|
bot)
|
|
|
|
|
{
|
|
|
|
|
_deleteRequests = deleteRequests;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override async Task OnRun()
|
|
|
|
|
{
|
|
|
|
|
var now = DateTime.Now;
|
|
|
|
|
var skippedRequestList = new List<DeleteRequest>();
|
|
|
|
|
|
|
|
|
|
_logger.LogDebug("Spinning up the delete requests loop. Request count: {RequestCount}", _deleteRequests.Count);
|
|
|
|
|
for (var i = 0; i < _deleteRequests.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!_deleteRequests.TryTake(out var request))
|
|
|
|
|
{
|
|
|
|
|
_logger.LogDebug("Nothing to take, breaking...");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (request.DeleteAt < now)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
await _bot.BotClient.DeleteMessageAsync(request.ChatId, request.MessageId);
|
|
|
|
|
}
|
|
|
|
|
catch (ApiRequestException e)
|
|
|
|
|
{
|
|
|
|
|
_logger.LogError("Error deleting message, code - {ErrorCode}, msg - {ErrorMessage}", e.ErrorCode,
|
|
|
|
|
e.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_logger.LogDebug("Skipping {MessageId}", request.MessageId);
|
|
|
|
|
skippedRequestList.Add(request);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var request in skippedRequestList)
|
|
|
|
|
{
|
|
|
|
|
_deleteRequests.Add(request);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|