Files
telegram-bot/Core/AutoDelete/DeleteService.cs
T

62 lines
1.9 KiB
C#
Raw Normal View History

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using BotFramework.Abstractions;
using Kruzya.TelegramBot.Core.Service;
using Microsoft.Extensions.Logging;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
namespace Kruzya.TelegramBot.Core.AutoDelete;
public class DeleteService : AbstractTimedHostedService
{
private readonly ConcurrentBag<DeleteRequest> _deleteRequests;
protected override TimeSpan TimerPeriod => TimeSpan.FromSeconds(2);
public DeleteService(ILogger<DeleteService> logger, IBotInstance bot, ConcurrentBag<DeleteRequest> deleteRequests) : base(logger,
bot)
{
_deleteRequests = deleteRequests;
}
protected override async Task OnRun()
{
var now = DateTime.UtcNow;
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);
}
}
}