Add Telegram notification for news publication to users
CI / Backend (build + test) (push) Successful in 3m0s
CI / Frontend (lint + typecheck + build) (push) Successful in 31s

- Implemented NotifyUsersNewsPublishedAsync method in TelegramNotifier to send notifications to activated Telegram users when a news post is published.
- Updated CreatePostCommandHandler to invoke the new Telegram notification method after creating a news post.
- Enhanced IIdentityService to retrieve activated linked Telegram user IDs for notifications.
- Updated ITelegramNotifier interface to include the new notification method documentation.
This commit is contained in:
Leonid Pershin
2026-07-14 07:19:19 +03:00
parent 6bd34441fb
commit a833d9aa5b
5 changed files with 47 additions and 1 deletions
@@ -97,6 +97,35 @@ internal sealed class TelegramNotifier(ITelegramBotClient botClient, IIdentitySe
}
}
public async Task NotifyUsersNewsPublishedAsync(string title, CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(options.Value.BotToken))
return;
var text = $"📰 Новая новость: <b>{Escape(title)}</b>";
InlineKeyboardMarkup? keyboard = null;
if (!string.IsNullOrWhiteSpace(options.Value.PublicSiteUrl))
{
var url = $"{options.Value.PublicSiteUrl.TrimEnd('/')}/news";
keyboard = new InlineKeyboardMarkup(new[] { InlineKeyboardButton.WithUrl("🌐 Открыть на сайте", url) });
}
var telegramUserIds = await identityService.GetActivatedLinkedTelegramUserIdsAsync(cancellationToken);
foreach (var telegramUserId in telegramUserIds)
{
try
{
await botClient.SendMessage(
telegramUserId, text, parseMode: ParseMode.Html, replyMarkup: keyboard, cancellationToken: cancellationToken);
}
catch
{
// Пользователь мог заблокировать бота — не критично, продолжаем рассылку остальным.
}
}
}
public async Task NotifyUserAsync(Guid userId, string message, CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(options.Value.BotToken))