mirror of
https://github.com/Bubuni-Team/telegram-bot.git
synced 2026-07-31 00:29:24 +03:00
🚧 RSS as a module
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BotFramework;
|
||||
using Kruzya.TelegramBot.Core.Service;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Telegram.Bot.Exceptions;
|
||||
using Telegram.Bot.Types;
|
||||
|
||||
namespace Kruzya.TelegramBot.RichSiteSummary.Service
|
||||
{
|
||||
public class MessageSender : AbstractTimedHostedService
|
||||
{
|
||||
protected override TimeSpan TimerPeriod => TimeSpan.FromSeconds(1);
|
||||
|
||||
protected readonly ConcurrentQueue<UserMessage> _queue;
|
||||
protected readonly ConcurrentQueue<UserUnsubscribe> _unsubscribeQueue;
|
||||
|
||||
public MessageSender(ILogger<MessageSender> logger, ITelegramBot bot, ConcurrentQueue<UserMessage> userMessageQueue, ConcurrentQueue<UserUnsubscribe> userUnsubscribeQueue) : base(logger, bot)
|
||||
{
|
||||
_unsubscribeQueue = userUnsubscribeQueue;
|
||||
_queue = userMessageQueue;
|
||||
}
|
||||
|
||||
protected override async Task OnRun()
|
||||
{
|
||||
if (_queue.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UserMessage message;
|
||||
if (!_queue.TryDequeue(out message))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await _bot.BotClient.SendTextMessageAsync(message.ChatId, message.Text, message.ParseMode,
|
||||
message.DisableWebPagePreview);
|
||||
}
|
||||
catch (ApiRequestException e)
|
||||
{
|
||||
if (!e.Message.Contains("bot was blocked by user"))
|
||||
{
|
||||
ReEnqueue(message, e, message.ChatId); // looks like a network issue
|
||||
return;
|
||||
}
|
||||
|
||||
// User added bot to blacklist.
|
||||
// Unsubscribe him.
|
||||
_unsubscribeQueue.Enqueue(new UserUnsubscribe()
|
||||
{
|
||||
ChatId = message.ChatId
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ReEnqueue(message, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void ReEnqueue(UserMessage message, Exception e = null, ChatId chatId = null)
|
||||
{
|
||||
if (e != null)
|
||||
{
|
||||
var eMessage = new StringBuilder();
|
||||
eMessage.Append(e.Message);
|
||||
if (chatId != null)
|
||||
{
|
||||
eMessage.Append($" ({chatId.Identifier})");
|
||||
}
|
||||
|
||||
_logger.LogError(eMessage.ToString());
|
||||
}
|
||||
|
||||
_queue.Enqueue(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user