Use file-scoped namespaces

This commit is contained in:
Andriy
2023-07-29 15:14:52 +03:00
parent a24332370d
commit 8ab067a027
58 changed files with 2222 additions and 2280 deletions
@@ -9,81 +9,80 @@ using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.RichSiteSummary.Service
namespace Kruzya.TelegramBot.RichSiteSummary.Service;
public class MessageSender : AbstractTimedHostedService
{
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, IBotInstance bot, ConcurrentQueue<UserMessage> userMessageQueue, ConcurrentQueue<UserUnsubscribe> userUnsubscribeQueue) : base(logger, bot)
{
protected override TimeSpan TimerPeriod => TimeSpan.FromSeconds(1);
protected readonly ConcurrentQueue<UserMessage> Queue;
protected readonly ConcurrentQueue<UserUnsubscribe> UnsubscribeQueue;
public MessageSender(ILogger<MessageSender> logger, IBotInstance bot, ConcurrentQueue<UserMessage> userMessageQueue, ConcurrentQueue<UserUnsubscribe> userUnsubscribeQueue) : base(logger, bot)
UnsubscribeQueue = userUnsubscribeQueue;
Queue = userMessageQueue;
}
protected override async Task OnRun()
{
if (Queue.IsEmpty || !Queue.TryDequeue(out var message))
{
UnsubscribeQueue = userUnsubscribeQueue;
Queue = userMessageQueue;
return;
}
protected override async Task OnRun()
_logger.LogDebug("Message for {ChatId} dequeued.", message.ChatId.Identifier);
try
{
if (Queue.IsEmpty || !Queue.TryDequeue(out var message))
if (string.IsNullOrWhiteSpace(message.ImageUrl))
{
await _bot.BotClient.SendTextMessageAsync(message.ChatId, message.Text, 0, message.ParseMode, null,
message.DisableWebPagePreview);
}
else
{
await _bot.BotClient.SendPhotoAsync(message.ChatId, new InputFileUrl(message.ImageUrl), 0, message.Text,
message.ParseMode, null, false, message.DisableWebPagePreview);
}
}
catch (ApiRequestException e)
{
_logger.LogDebug("Message for {ChatId} is failed: {error}.", message.ChatId.Identifier, e.Message);
if (!e.Message.Contains("bot was blocked by user"))
{
ReEnqueue(message, e, message.ChatId); // looks like a network issue
return;
}
_logger.LogDebug("Message for {ChatId} dequeued.", message.ChatId.Identifier);
try
// User added bot to blacklist.
// Unsubscribe him.
UnsubscribeQueue.Enqueue(new UserUnsubscribe
{
if (string.IsNullOrWhiteSpace(message.ImageUrl))
{
await _bot.BotClient.SendTextMessageAsync(message.ChatId, message.Text, 0, message.ParseMode, null,
message.DisableWebPagePreview);
}
else
{
await _bot.BotClient.SendPhotoAsync(message.ChatId, new InputFileUrl(message.ImageUrl), 0, message.Text,
message.ParseMode, null, false, message.DisableWebPagePreview);
}
}
catch (ApiRequestException e)
{
_logger.LogDebug("Message for {ChatId} is failed: {error}.", message.ChatId.Identifier, e.Message);
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)
{
_logger.LogDebug("Message for {ChatId} is failed: {error}.", message.ChatId.Identifier, e.Message);
ReEnqueue(message, e);
}
ChatId = message.ChatId
});
}
private void ReEnqueue(UserMessage message, Exception e = null, ChatId chatId = null)
catch (Exception e)
{
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);
_logger.LogDebug("Message for {ChatId} is failed: {error}.", message.ChatId.Identifier, e.Message);
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);
}
}