Files
PnvPanel/backend/src/PnvPanel.Application/Common/Interfaces/ITelegramNotifier.cs
T
Leonid Pershin d26723dce0
CI / Backend (build + test) (push) Successful in 1m16s
CI / Frontend (lint + typecheck + build) (push) Successful in 30s
Enhance Telegram notification system with optional link support
- Updated NotifyUserAsync method in TelegramNotifier to accept an optional linkPath parameter for dynamic URL generation.
- Modified various command handlers to utilize the new linkPath feature, providing users with relevant links in their notifications.
- Adjusted ITelegramNotifier interface documentation to reflect the changes in method signature and functionality.
- Enhanced unit tests to verify the correct invocation of the updated NotifyUserAsync method.
2026-07-14 07:36:18 +03:00

55 lines
2.8 KiB
C#

using PnvPanel.Domain.Support;
namespace PnvPanel.Application.Common.Interfaces;
/// <summary>
/// Проактивные DM-уведомления через бота. Реализация — в Api (нужен ITelegramBotClient,
/// который там же и регистрируется), аналогично IRealtimeNotifier/PanelHub. Если BotToken не
/// задан — реализация тихо не отправляет ничего (бот работает без Telegram).
/// </summary>
public interface ITelegramNotifier
{
Task NotifyAdminsActivationRequestedAsync(
Guid requestId,
string userName,
string? comment,
CancellationToken cancellationToken
);
/// <summary>Личное сообщение пользователю, если у него привязан Telegram (иначе no-op).
/// Если задан PublicSiteUrl — добавляет кнопку-ссылку на сайт; linkPath — относительный путь
/// (например "/support?ticket={id}"), на который она ведёт, null — на корень сайта.</summary>
Task NotifyUserAsync(Guid userId, string message, string? linkPath, CancellationToken cancellationToken);
/// <summary>Баг-репорт/предложение — только кнопка-ссылка на сайт (переписка и картинки — там),
/// без инлайн-действий.</summary>
Task NotifyAdminsBugReportCreatedAsync(
Guid ticketId,
string userName,
string message,
CancellationToken cancellationToken
);
/// <summary>Заявка на роль — инлайн-кнопки «Одобрить/Отклонить», решается полностью в Telegram.</summary>
Task NotifyAdminsRoleRequestCreatedAsync(
Guid ticketId,
string userName,
string roleDescription,
string justification,
CancellationToken cancellationToken
);
/// <summary>Рассылка о публикации новости всем активированным пользователям с привязанным Telegram
/// (кнопка-ссылка на сайт, где новость показана целиком).</summary>
Task NotifyUsersNewsPublishedAsync(string title, CancellationToken cancellationToken);
/// <summary>Пользователь переоткрыл решённый тикет — только кнопка-ссылка на сайт, без
/// инлайн-действий (аналогично баг-репортам).</summary>
Task NotifyAdminsTicketReopenedAsync(
Guid ticketId,
string userName,
TicketType type,
CancellationToken cancellationToken
);
}