From be46d5ae8f5da52a45ee834c4c035067fe568969 Mon Sep 17 00:00:00 2001
From: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com>
Date: Thu, 9 Dec 2021 21:57:55 +0000
Subject: [PATCH] New: On delete notifications
---
.../Notifications/Notification.js | 120 +++++++++++++-----
.../Notifications/NotificationEventItems.js | 51 ++++++++
.../Store/Actions/Settings/notifications.js | 4 +
.../NotificationBaseFixture.cs | 23 ++++
.../Books/Events/AuthorDeletedEvent.cs | 1 +
.../Books/Events/BookDeletedEvent.cs | 2 +-
.../021_add_on_delete_to_notifications.cs | 17 +++
src/NzbDrone.Core/Datastore/TableMapping.cs | 4 +
src/NzbDrone.Core/Localization/Core/en.json | 25 +++-
.../MediaFiles/Events/DeleteCompletedEvent.cs | 8 ++
.../MediaFiles/MediaFileDeletionService.cs | 7 +
.../Notifications/AuthorDeleteMessage.cs | 27 ++++
.../Notifications/BookDeleteMessage.cs | 28 ++++
.../Notifications/BookFileDeleteMessage.cs | 19 +++
.../Notifications/Boxcar/Boxcar.cs | 15 +++
.../CustomScript/CustomScript.cs | 67 ++++++++++
.../Notifications/Discord/Discord.cs | 48 +++++++
.../Notifications/Discord/DiscordColors.cs | 6 +-
.../Notifications/Email/Email.cs | 21 +++
.../Goodreads/Bookshelf/GoodreadsBookshelf.cs | 48 +++++++
.../Notifications/Gotify/Gotify.cs | 15 +++
.../Notifications/INotification.cs | 8 ++
src/NzbDrone.Core/Notifications/Join/Join.cs | 15 +++
.../Notifications/Mailgun/Mailgun.cs | 15 +++
.../Notifications/Notifiarr/Notifiarr.cs | 67 ++++++++++
.../Notifications/NotificationBase.cs | 26 ++++
.../Notifications/NotificationDefinition.cs | 10 +-
.../Notifications/NotificationFactory.cs | 28 ++++
.../Notifications/NotificationService.cs | 97 +++++++++++++-
.../Notifications/Prowl/Prowl.cs | 15 +++
.../Notifications/PushBullet/PushBullet.cs | 15 +++
.../Notifications/Pushover/Pushover.cs | 15 +++
.../Notifications/SendGrid/SendGrid.cs | 15 +++
.../Notifications/Slack/Slack.cs | 48 +++++++
.../Notifications/Subsonic/Subsonic.cs | 32 +++++
.../Notifications/Synology/SynologyIndexer.cs | 27 ++++
.../Notifications/Telegram/Telegram.cs | 15 +++
.../Notifications/Twitter/Twitter.cs | 15 +++
.../Notifications/Webhook/Webhook.cs | 37 ++++++
.../Webhook/WebhookAuthorDeletePayload.cs | 8 ++
.../Webhook/WebhookBookDeletePayload.cs | 8 ++
.../Webhook/WebhookBookFileDeletePayload.cs | 9 ++
.../Notifications/Webhook/WebhookEventType.cs | 1 +
.../Notifications/NotificationResource.cs | 24 ++++
44 files changed, 1065 insertions(+), 41 deletions(-)
create mode 100644 src/NzbDrone.Core/Datastore/Migration/021_add_on_delete_to_notifications.cs
create mode 100644 src/NzbDrone.Core/MediaFiles/Events/DeleteCompletedEvent.cs
create mode 100644 src/NzbDrone.Core/Notifications/AuthorDeleteMessage.cs
create mode 100644 src/NzbDrone.Core/Notifications/BookDeleteMessage.cs
create mode 100644 src/NzbDrone.Core/Notifications/BookFileDeleteMessage.cs
create mode 100644 src/NzbDrone.Core/Notifications/Webhook/WebhookAuthorDeletePayload.cs
create mode 100644 src/NzbDrone.Core/Notifications/Webhook/WebhookBookDeletePayload.cs
create mode 100644 src/NzbDrone.Core/Notifications/Webhook/WebhookBookFileDeletePayload.cs
diff --git a/frontend/src/Settings/Notifications/Notifications/Notification.js b/frontend/src/Settings/Notifications/Notifications/Notification.js
index 739712884..63df259eb 100644
--- a/frontend/src/Settings/Notifications/Notifications/Notification.js
+++ b/frontend/src/Settings/Notifications/Notifications/Notification.js
@@ -59,6 +59,10 @@ class Notification extends Component {
onReleaseImport,
onUpgrade,
onRename,
+ onAuthorDelete,
+ onBookDelete,
+ onBookFileDelete,
+ onBookFileDeleteForUpgrade,
onHealthIssue,
onDownloadFailure,
onImportFailure,
@@ -67,6 +71,10 @@ class Notification extends Component {
supportsOnReleaseImport,
supportsOnUpgrade,
supportsOnRename,
+ supportsOnAuthorDelete,
+ supportsOnBookDelete,
+ supportsOnBookFileDelete,
+ supportsOnBookFileDeleteForUpgrade,
supportsOnHealthIssue,
supportsOnDownloadFailure,
supportsOnImportFailure,
@@ -84,70 +92,110 @@ class Notification extends Component {
{
- supportsOnGrab && onGrab &&
+ supportsOnGrab && onGrab ?
+ {translate('OnGrab')}
+ :
+ null
}
{
- supportsOnReleaseImport && onReleaseImport &&
+ supportsOnReleaseImport && onReleaseImport ?
+ {translate('OnReleaseImport')}
+ :
+ null
}
{
- supportsOnUpgrade && onReleaseImport && onUpgrade &&
+ supportsOnUpgrade && onReleaseImport && onUpgrade ?
+ {translate('OnUpgrade')}
+ :
+ null
}
{
- supportsOnRename && onRename &&
+ supportsOnRename && onRename ?
+ {translate('OnRename')}
+ :
+ null
}
{
- supportsOnBookRetag && onBookRetag &&
+ supportsOnBookRetag && onBookRetag ?
+ {translate('OnBookTagUpdate')}
+ :
+ null
}
{
- supportsOnHealthIssue && onHealthIssue &&
+ supportsOnAuthorDelete && onAuthorDelete ?
+ {translate('OnAuthorDelete')}
+ :
+ null
}
{
- supportsOnDownloadFailure && onDownloadFailure &&
+ supportsOnBookDelete && onBookDelete ?
+ :
+ null
+ }
+
+ {
+ supportsOnBookFileDelete && onBookFileDelete ?
+ :
+ null
+ }
+
+ {
+ supportsOnBookFileDeleteForUpgrade && onBookFileDelete && onBookFileDeleteForUpgrade ?
+ :
+ null
+ }
+
+ {
+ supportsOnHealthIssue && onHealthIssue ?
+ :
+ null
+ }
+
+ {
+ supportsOnDownloadFailure && onDownloadFailure ?
+ {translate('OnDownloadFailure')}
+ :
+ null
}
{
- supportsOnImportFailure && onImportFailure &&
+ supportsOnImportFailure && onImportFailure ?
+ {translate('OnImportFailure')}
+ :
+ null
}
{
- !onGrab && !onReleaseImport && !onRename && !onBookRetag &&
- !onHealthIssue && !onDownloadFailure && !onImportFailure &&
-
+ !onGrab && !onReleaseImport && !onRename && !onBookRetag && !onHealthIssue && !onDownloadFailure && !onImportFailure ?
+ :
+ null
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
i.SupportsOnReleaseImport)
.Ignore(i => i.SupportsOnUpgrade)
.Ignore(i => i.SupportsOnRename)
+ .Ignore(i => i.SupportsOnAuthorDelete)
+ .Ignore(i => i.SupportsOnBookDelete)
+ .Ignore(i => i.SupportsOnBookFileDelete)
+ .Ignore(i => i.SupportsOnBookFileDeleteForUpgrade)
.Ignore(i => i.SupportsOnHealthIssue)
.Ignore(i => i.SupportsOnDownloadFailure)
.Ignore(i => i.SupportsOnImportFailure)
diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json
index 49a142f10..36a8ad030 100644
--- a/src/NzbDrone.Core/Localization/Core/en.json
+++ b/src/NzbDrone.Core/Localization/Core/en.json
@@ -70,11 +70,11 @@
"BookAvailableButMissing": "Book Available, but Missing",
"BookDownloaded": "Book Downloaded",
"BookEditor": "Book Editor",
- "BookIndex": "Book Index",
"BookFileCountBookCountTotalTotalBookCountInterp": "{0} / {1} (Total: {2})",
"BookFileCounttotalBookCountBooksDownloadedInterp": "{0}/{1} books downloaded",
"BookFilesCountMessage": "No book files",
"BookHasNotAired": "Book has not aired",
+ "BookIndex": "Book Index",
"BookIsDownloading": "Book is downloading",
"BookIsDownloadingInterp": "Book is downloading - {0}% {1}",
"BookIsNotMonitored": "Book is not monitored",
@@ -188,6 +188,7 @@
"DetailedProgressBar": "Detailed Progress Bar",
"DetailedProgressBarHelpText": "Show text on progess bar",
"Development": "Development",
+ "Disabled": "Disabled",
"DiscCount": "Disc Count",
"DiscNumber": "Disc Number",
"DiskSpace": "Disk Space",
@@ -429,13 +430,29 @@
"NotificationTriggers": "Notification Triggers",
"NotMonitored": "Not Monitored",
"NoUpdatesAreAvailable": "No updates are available",
+ "OnAuthorDelete": "On Author Delete",
+ "OnAuthorDeleteHelpText": "On Author Delete",
+ "OnBookDelete": "On Book Delete",
+ "OnBookDeleteHelpText": "On Book Delete",
+ "OnBookFileDelete": "On Book File Delete",
+ "OnBookFileDeleteForUpgrade": "On Book File Delete For Upgrade",
+ "OnBookFileDeleteForUpgradeHelpText": "On Book File Delete For Upgrade",
+ "OnBookFileDeleteHelpText": "On Book File Delete",
"OnBookRetagHelpText": "On Book Retag",
+ "OnBookTagUpdate": "On Book Tag Update",
+ "OnDownloadFailure": "On Download Failure",
"OnDownloadFailureHelpText": "On Download Failure",
+ "OnGrab": "On Grab",
"OnGrabHelpText": "On Grab",
+ "OnHealthIssue": "On Health Issue",
"OnHealthIssueHelpText": "On Health Issue",
+ "OnImportFailure": "On Import Failure",
"OnImportFailureHelpText": "On Import Failure",
+ "OnReleaseImport": "On Release Import",
"OnReleaseImportHelpText": "On Release Import",
+ "OnRename": "On Rename",
"OnRenameHelpText": "On Rename",
+ "OnUpgrade": "On Upgrade",
"OnUpgradeHelpText": "On Upgrade",
"OpenBrowserOnStart": "Open browser on start",
"Options": "Options",
@@ -588,9 +605,9 @@
"SetPermissionsLinuxHelpTextWarning": "If you're unsure what these settings do, do not alter them.",
"Settings": "Settings",
"ShortDateFormat": "Short Date Format",
- "ShouldMonitorHelpText": "Monitor new authors and books added from this list",
"ShouldMonitorExisting": "Monitor existing books",
"ShouldMonitorExistingHelpText": "Automatically monitor books on this list which are already in Readarr",
+ "ShouldMonitorHelpText": "Monitor new authors and books added from this list",
"ShouldSearchHelpText": "Search indexers for newly added items. Use with caution for large lists.",
"ShowBanners": "Show Banners",
"ShowBannersHelpText": "Show banners instead of names",
@@ -729,13 +746,13 @@
"UnmonitoredHelpText": "Include unmonitored books in the iCal feed",
"UnselectAll": "Unselect All",
"UpdateAll": "Update all",
- "UpdateSelected": "Updated selected",
"UpdateAutomaticallyHelpText": "Automatically download and install updates. You will still be able to install from System: Updates",
"UpdateCovers": "Update Covers",
"UpdateCoversHelpText": "Set book covers in Calibre to match those in Readarr",
"UpdateMechanismHelpText": "Use Readarr's built-in updater or a script",
"Updates": "Updates",
"UpdateScriptPathHelpText": "Path to a custom script that takes an extracted update package and handle the remainder of the update process",
+ "UpdateSelected": "Updated selected",
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Updating is disabled inside a docker container. Update the container image instead.",
"UpgradeAllowedHelpText": "If disabled qualities will not be upgraded",
"Uptime": "Uptime",
@@ -769,4 +786,4 @@
"WriteTagsSync": "All files; keep in sync with Goodreads",
"Year": "Year",
"YesCancel": "Yes, Cancel"
-}
\ No newline at end of file
+}
diff --git a/src/NzbDrone.Core/MediaFiles/Events/DeleteCompletedEvent.cs b/src/NzbDrone.Core/MediaFiles/Events/DeleteCompletedEvent.cs
new file mode 100644
index 000000000..f987bc1c2
--- /dev/null
+++ b/src/NzbDrone.Core/MediaFiles/Events/DeleteCompletedEvent.cs
@@ -0,0 +1,8 @@
+using NzbDrone.Common.Messaging;
+
+namespace NzbDrone.Core.MediaFiles.Events
+{
+ public class DeleteCompletedEvent : IEvent
+ {
+ }
+}
diff --git a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs
index ba6a5fdf2..2fd57c370 100644
--- a/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs
+++ b/src/NzbDrone.Core/MediaFiles/MediaFileDeletionService.cs
@@ -33,6 +33,7 @@ public class MediaFileDeletionService : IDeleteMediaFiles,
private readonly IMediaFileService _mediaFileService;
private readonly IAuthorService _authorService;
private readonly IConfigService _configService;
+ private readonly IEventAggregator _eventAggregator;
private readonly IRootFolderService _rootFolderService;
private readonly ICalibreProxy _calibre;
private readonly Logger _logger;
@@ -42,6 +43,7 @@ public MediaFileDeletionService(IDiskProvider diskProvider,
IMediaFileService mediaFileService,
IAuthorService authorService,
IConfigService configService,
+ IEventAggregator eventAggregator,
IRootFolderService rootFolderService,
ICalibreProxy calibre,
Logger logger)
@@ -51,6 +53,7 @@ public MediaFileDeletionService(IDiskProvider diskProvider,
_mediaFileService = mediaFileService;
_authorService = authorService;
_configService = configService;
+ _eventAggregator = eventAggregator;
_rootFolderService = rootFolderService;
_calibre = calibre;
_logger = logger;
@@ -97,6 +100,8 @@ public void DeleteTrackFile(BookFile bookFile, string subfolder = "")
// Delete the track file from the database to clean it up even if the file was already deleted
_mediaFileService.Delete(bookFile, DeleteMediaFileReason.Manual);
+
+ _eventAggregator.PublishEvent(new DeleteCompletedEvent());
}
private void DeleteFile(BookFile bookFile, string subfolder = "")
@@ -178,6 +183,8 @@ public void HandleAsync(AuthorDeletedEvent message)
{
_recycleBinProvider.DeleteFolder(message.Author.Path);
}
+
+ _eventAggregator.PublishEvent(new DeleteCompletedEvent());
}
}
}
diff --git a/src/NzbDrone.Core/Notifications/AuthorDeleteMessage.cs b/src/NzbDrone.Core/Notifications/AuthorDeleteMessage.cs
new file mode 100644
index 000000000..7b245a16d
--- /dev/null
+++ b/src/NzbDrone.Core/Notifications/AuthorDeleteMessage.cs
@@ -0,0 +1,27 @@
+using NzbDrone.Core.Books;
+
+namespace NzbDrone.Core.Notifications
+{
+ public class AuthorDeleteMessage
+ {
+ public string Message { get; set; }
+ public Author Author { get; set; }
+ public bool DeletedFiles { get; set; }
+ public string DeletedFilesMessage { get; set; }
+
+ public override string ToString()
+ {
+ return Message;
+ }
+
+ public AuthorDeleteMessage(Author author, bool deleteFiles)
+ {
+ Author = author;
+ DeletedFiles = deleteFiles;
+ DeletedFilesMessage = DeletedFiles ?
+ "Author removed and all files were deleted" :
+ "Author removed, files were not deleted";
+ Message = author.Name + " - " + DeletedFilesMessage;
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Notifications/BookDeleteMessage.cs b/src/NzbDrone.Core/Notifications/BookDeleteMessage.cs
new file mode 100644
index 000000000..c46f02cab
--- /dev/null
+++ b/src/NzbDrone.Core/Notifications/BookDeleteMessage.cs
@@ -0,0 +1,28 @@
+using NzbDrone.Core.Books;
+using NzbDrone.Core.MediaFiles;
+
+namespace NzbDrone.Core.Notifications
+{
+ public class BookDeleteMessage
+ {
+ public string Message { get; set; }
+ public Book Book { get; set; }
+ public bool DeletedFiles { get; set; }
+ public string DeletedFilesMessage { get; set; }
+
+ public override string ToString()
+ {
+ return Message;
+ }
+
+ public BookDeleteMessage(Book book, bool deleteFiles)
+ {
+ Book = book;
+ DeletedFiles = deleteFiles;
+ DeletedFilesMessage = DeletedFiles ?
+ "Book removed and all files were deleted" :
+ "Book removed, files were not deleted";
+ Message = book.Title + " - " + DeletedFilesMessage;
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Notifications/BookFileDeleteMessage.cs b/src/NzbDrone.Core/Notifications/BookFileDeleteMessage.cs
new file mode 100644
index 000000000..938f11bf6
--- /dev/null
+++ b/src/NzbDrone.Core/Notifications/BookFileDeleteMessage.cs
@@ -0,0 +1,19 @@
+using NzbDrone.Core.Books;
+using NzbDrone.Core.MediaFiles;
+
+namespace NzbDrone.Core.Notifications
+{
+ public class BookFileDeleteMessage
+ {
+ public string Message { get; set; }
+ public Book Book { get; set; }
+ public BookFile BookFile { get; set; }
+
+ public DeleteMediaFileReason Reason { get; set; }
+
+ public override string ToString()
+ {
+ return Message;
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Notifications/Boxcar/Boxcar.cs b/src/NzbDrone.Core/Notifications/Boxcar/Boxcar.cs
index 178170b41..033c24c71 100644
--- a/src/NzbDrone.Core/Notifications/Boxcar/Boxcar.cs
+++ b/src/NzbDrone.Core/Notifications/Boxcar/Boxcar.cs
@@ -26,6 +26,21 @@ public override void OnReleaseImport(BookDownloadMessage message)
_proxy.SendNotification(BOOK_DOWNLOADED_TITLE, message.Message, Settings);
}
+ public override void OnAuthorDelete(AuthorDeleteMessage deleteMessage)
+ {
+ _proxy.SendNotification(AUTHOR_DELETED_TITLE, deleteMessage.Message, Settings);
+ }
+
+ public override void OnBookDelete(BookDeleteMessage deleteMessage)
+ {
+ _proxy.SendNotification(BOOK_DELETED_TITLE, deleteMessage.Message, Settings);
+ }
+
+ public override void OnBookFileDelete(BookFileDeleteMessage deleteMessage)
+ {
+ _proxy.SendNotification(BOOK_FILE_DELETED_TITLE, deleteMessage.Message, Settings);
+ }
+
public override void OnHealthIssue(HealthCheck.HealthCheck message)
{
_proxy.SendNotification(HEALTH_ISSUE_TITLE, message.Message, Settings);
diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs
index 4bdd413ac..9b1316f11 100644
--- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs
+++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs
@@ -105,6 +105,73 @@ public override void OnRename(Author author)
ExecuteScript(environmentVariables);
}
+ public override void OnAuthorDelete(AuthorDeleteMessage deleteMessage)
+ {
+ var author = deleteMessage.Author;
+ var environmentVariables = new StringDictionary();
+
+ environmentVariables.Add("Readarr_EventType", "AuthorDelete");
+ environmentVariables.Add("Readarr_Author_Id", author.Id.ToString());
+ environmentVariables.Add("Readarr_Author_Name", author.Name);
+ environmentVariables.Add("Readarr_Author_Path", author.Path);
+ environmentVariables.Add("Readarr_Author_GoodreadsId", author.ForeignAuthorId);
+ environmentVariables.Add("Readarr_Author_DeletedFiles", deleteMessage.DeletedFiles.ToString());
+
+ ExecuteScript(environmentVariables);
+ }
+
+ public override void OnBookDelete(BookDeleteMessage deleteMessage)
+ {
+ var author = deleteMessage.Book.Author.Value;
+ var book = deleteMessage.Book;
+
+ var environmentVariables = new StringDictionary();
+
+ environmentVariables.Add("Readarr_EventType", "BookDelete");
+ environmentVariables.Add("Readarr_Author_Id", author.Id.ToString());
+ environmentVariables.Add("Readarr_Author_Name", author.Name);
+ environmentVariables.Add("Readarr_Author_Path", author.Path);
+ environmentVariables.Add("Readarr_Author_GoodreadsId", author.ForeignAuthorId);
+ environmentVariables.Add("Readarr_Book_Id", book.Id.ToString());
+ environmentVariables.Add("Readarr_Book_Title", book.Title);
+ environmentVariables.Add("Readarr_Book_GoodreadsId", book.ForeignBookId);
+ environmentVariables.Add("Readarr_Book_DeletedFiles", deleteMessage.DeletedFiles.ToString());
+
+ ExecuteScript(environmentVariables);
+ }
+
+ public override void OnBookFileDelete(BookFileDeleteMessage deleteMessage)
+ {
+ var author = deleteMessage.Book.Author.Value;
+ var book = deleteMessage.Book;
+ var bookFile = deleteMessage.BookFile;
+ var edition = bookFile.Edition.Value;
+
+ var environmentVariables = new StringDictionary();
+
+ environmentVariables.Add("Readarr_EventType", "BookFileDelete");
+ environmentVariables.Add("Readarr_Delete_Reason", deleteMessage.Reason.ToString());
+ environmentVariables.Add("Readarr_Author_Id", author.Id.ToString());
+ environmentVariables.Add("Readarr_Author_Name", author.Name);
+ environmentVariables.Add("Readarr_Author_GoodreadsId", author.ForeignAuthorId);
+ environmentVariables.Add("Readarr_Book_Id", book.Id.ToString());
+ environmentVariables.Add("Readarr_Book_Title", book.Title);
+ environmentVariables.Add("Readarr_Book_GoodreadsId", book.ForeignBookId);
+ environmentVariables.Add("Readarr_BookFile_Id", bookFile.Id.ToString());
+ environmentVariables.Add("Readarr_BookFile_Path", bookFile.Path);
+ environmentVariables.Add("Readarr_BookFile_Quality", bookFile.Quality.Quality.Name);
+ environmentVariables.Add("Readarr_BookFile_QualityVersion", bookFile.Quality.Revision.Version.ToString());
+ environmentVariables.Add("Readarr_BookFile_ReleaseGroup", bookFile.ReleaseGroup ?? string.Empty);
+ environmentVariables.Add("Readarr_BookFile_SceneName", bookFile.SceneName ?? string.Empty);
+ environmentVariables.Add("Readarr_BookFile_Edition_Id", edition.Id.ToString());
+ environmentVariables.Add("Readarr_BookFile_Edition_Name", edition.Title);
+ environmentVariables.Add("Readarr_BookFile_Edition_GoodreadsId", edition.ForeignEditionId);
+ environmentVariables.Add("Readarr_BookFile_Edition_Isbn13", edition.Isbn13);
+ environmentVariables.Add("Readarr_BookFile_Edition_Asin", edition.Asin);
+
+ ExecuteScript(environmentVariables);
+ }
+
public override void OnBookRetag(BookRetagMessage message)
{
var author = message.Author;
diff --git a/src/NzbDrone.Core/Notifications/Discord/Discord.cs b/src/NzbDrone.Core/Notifications/Discord/Discord.cs
index 6480d765e..1fa1e7383 100644
--- a/src/NzbDrone.Core/Notifications/Discord/Discord.cs
+++ b/src/NzbDrone.Core/Notifications/Discord/Discord.cs
@@ -69,6 +69,54 @@ public override void OnRename(Author author)
_proxy.SendPayload(payload, Settings);
}
+ public override void OnAuthorDelete(AuthorDeleteMessage deleteMessage)
+ {
+ var attachments = new List