using System;
using System.Threading.Tasks;
using SlackAPI;
using System.Linq;
namespace CommonLib
{
public class SlackPoster : ISlackPoster
{
public string SlackToken { get; set; }
public string UpChannel { get; set; }
private readonly SlackTaskClient taskClient;
public SlackPoster()
{
SlackToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
UpChannel = "general";
taskClient = new SlackTaskClient(SlackToken);
}
public SlackPoster(string token, string channel)
{
SlackToken = token;
UpChannel = channel;
taskClient = new SlackTaskClient(SlackToken);
}
public string GetToken()
{
return SlackToken;
}
public string GetChannel()
{
return UpChannel;
}
public async Task<bool> PostMessageAsync(string message, string upChannel = "")
{
if (string.IsNullOrEmpty(upChannel))
{
upChannel = UpChannel;
}
var response = await taskClient.PostMessageAsync(upChannel, message);
return response.ok;
}
public bool PostMessage(string message, string upChannel = "")
{
Task<bool> task = Task.Run<bool>(async () => await PostMessageAsync(message, upChannel));
return task.Result;
}
public bool PostMessage(string[] messages, string upChannel = "")
{
bool[] success = new bool[messages.Length];
for (int i = 0; i < messages.Length; i++)
{
Task<bool> task = Task.Run<bool>(async () => await PostMessageAsync(messages[i], upChannel));
success[i] = task.Result;
}
if (success.Contains(false)) return false; else return true;
}
public async Task<bool> PostFileAsync(string filepath, string filename, string upChannel = "")
{
if (string.IsNullOrEmpty(upChannel))
{
upChannel = UpChannel;
}
byte[] fileContent = System.IO.File.ReadAllBytes(filepath);
var response = await taskClient.UploadFileAsync(fileContent, filename, new[] { upChannel });
return response.ok;
}
public bool PostFile(string filepath, string filename, string upChannel = "")
{
Task<bool> task = Task.Run<bool>(async () => await PostFileAsync(filepath, filename, upChannel));
return task.Result;
}
public bool PostFile(string[] filepaths, string[] filenames, string upChannel = "")
{
if (filepaths.Length != filenames.Length) return false;
bool[] success = new bool[filepaths.Length];
for (int i = 0; i < filenames.Length; i++)
{
Task<bool> task = Task.Run<bool>(async () => await PostFileAsync(filepaths[i], filenames[i], upChannel));
success[i] = task.Result;
}
if (success.Contains(false)) return false; else return true;
}
}
}