You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Prowlarr/src/NzbDrone.Core/Notifications/Slack/Slack.cs

135 lines
4.1 KiB

using System;
using System.Collections.Generic;
using FluentValidation.Results;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Notifications.Slack.Payloads;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Validation;
namespace NzbDrone.Core.Notifications.Slack
{
public class Slack : NotificationBase<SlackSettings>
{
private readonly ISlackProxy _proxy;
public Slack(ISlackProxy proxy)
{
_proxy = proxy;
}
public override string Name => "Slack";
public override string Link => "https://my.slack.com/services/new/incoming-webhook/";
public override void OnGrab(GrabMessage message)
{
var attachments = new List<Attachment>
{
new Attachment
{
Fallback = message.Message,
Title = message.Movie.Title,
Text = message.Message,
Color = "warning"
}
};
var payload = CreatePayload($"Grabbed: {message.Message}", attachments);
_proxy.SendPayload(payload, Settings);
}
public override void OnDownload(DownloadMessage message)
{
var attachments = new List<Attachment>
{
new Attachment
{
Fallback = message.Message,
Title = message.Movie.Title,
Text = message.Message,
Color = "good"
}
};
var payload = CreatePayload($"Imported: {message.Message}", attachments);
_proxy.SendPayload(payload, Settings);
}
public override void OnMovieRename(Movie movie)
{
var attachments = new List<Attachment>
{
new Attachment
{
Title = movie.Title,
}
};
var payload = CreatePayload("Renamed", attachments);
_proxy.SendPayload(payload, Settings);
}
public override ValidationResult Test()
{
var failures = new List<ValidationFailure>();
failures.AddIfNotNull(TestMessage());
return new ValidationResult(failures);
}
public ValidationFailure TestMessage()
{
try
{
var message = $"Test message from Radarr posted at {DateTime.Now}";
var payload = CreatePayload(message);
_proxy.SendPayload(payload, Settings);
}
catch (SlackExeption ex)
{
return new NzbDroneValidationFailure("Unable to post", ex.Message);
}
return null;
}
private SlackPayload CreatePayload(string message, List<Attachment> attachments = null)
{
var icon = Settings.Icon;
var channel = Settings.Channel;
var payload = new SlackPayload
{
Username = Settings.Username,
Text = message,
Attachments = attachments
};
if (icon.IsNotNullOrWhiteSpace())
{
// Set the correct icon based on the value
if (icon.StartsWith(":") && icon.EndsWith(":"))
{
payload.IconEmoji = icon;
}
else
{
payload.IconUrl = icon;
}
}
if (channel.IsNotNullOrWhiteSpace())
{
payload.Channel = channel;
}
return payload;
}
}
}