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