- 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.
55 lines
2.8 KiB
C#
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
|
|
);
|
|
}
|