Add 'On Import Complete' for Discord notifications

This commit is contained in:
Mark McDowall 2024-07-14 21:57:40 -07:00 committed by Mark McDowall
parent f5ccf98162
commit c01abbf3b5
1 changed files with 90 additions and 0 deletions

View File

@ -236,6 +236,96 @@ namespace NzbDrone.Core.Notifications.Discord
_proxy.SendPayload(payload, Settings); _proxy.SendPayload(payload, Settings);
} }
public override void OnImportComplete(ImportCompleteMessage message)
{
var series = message.Series;
var episodes = message.Episodes;
var embed = new Embed
{
Author = new DiscordAuthor
{
Name = Settings.Author.IsNullOrWhiteSpace() ? Environment.MachineName : Settings.Author,
IconUrl = "https://raw.githubusercontent.com/Sonarr/Sonarr/develop/Logo/256.png"
},
Url = $"http://thetvdb.com/?tab=series&id={series.TvdbId}",
Description = "Import Complete",
Title = GetTitle(series, episodes),
Color = (int)DiscordColors.Success,
Fields = new List<DiscordField>(),
Timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ")
};
if (Settings.ImportFields.Contains((int)DiscordImportFieldType.Poster))
{
embed.Thumbnail = new DiscordImage
{
Url = series.Images.FirstOrDefault(x => x.CoverType == MediaCoverTypes.Poster)?.RemoteUrl
};
}
if (Settings.ImportFields.Contains((int)DiscordImportFieldType.Fanart))
{
embed.Image = new DiscordImage
{
Url = series.Images.FirstOrDefault(x => x.CoverType == MediaCoverTypes.Fanart)?.RemoteUrl
};
}
foreach (var field in Settings.ImportFields)
{
var discordField = new DiscordField();
switch ((DiscordImportFieldType)field)
{
case DiscordImportFieldType.Overview:
var overview = episodes.First().Overview ?? "";
discordField.Name = "Overview";
discordField.Value = overview.Length <= 300 ? overview : $"{overview.AsSpan(0, 300)}...";
break;
case DiscordImportFieldType.Rating:
discordField.Name = "Rating";
discordField.Value = episodes.First().Ratings.Value.ToString();
break;
case DiscordImportFieldType.Genres:
discordField.Name = "Genres";
discordField.Value = series.Genres.Take(5).Join(", ");
break;
case DiscordImportFieldType.Quality:
discordField.Name = "Quality";
discordField.Inline = true;
discordField.Value = message.ReleaseQuality.Quality.Name;
break;
case DiscordImportFieldType.Group:
discordField.Name = "Group";
discordField.Value = message.ReleaseGroup;
break;
case DiscordImportFieldType.Size:
discordField.Name = "Size";
discordField.Value = BytesToString(message.Release?.Size ?? message.EpisodeFiles.Sum(f => f.Size));
discordField.Inline = true;
break;
case DiscordImportFieldType.Release:
discordField.Name = "Release";
discordField.Value = $"```{message.Release?.Title ?? message.SourceTitle}```";
break;
case DiscordImportFieldType.Links:
discordField.Name = "Links";
discordField.Value = GetLinksString(series);
break;
}
if (discordField.Name.IsNotNullOrWhiteSpace() && discordField.Value.IsNotNullOrWhiteSpace())
{
embed.Fields.Add(discordField);
}
}
var payload = CreatePayload(null, new List<Embed> { embed });
_proxy.SendPayload(payload, Settings);
}
public override void OnRename(Series series, List<RenamedEpisodeFile> renamedFiles) public override void OnRename(Series series, List<RenamedEpisodeFile> renamedFiles)
{ {
var attachments = new List<Embed> var attachments = new List<Embed>