namespace FileFlows.Telegram.Communication;
///
/// A Telegram flow element that sends a message
///
public class Telegram: Node
{
///
/// Gets the number of inputs to this flow element
///
public override int Inputs => 1;
///
/// Gets the number of outputs to this flow element
///
public override int Outputs => 2;
///
/// Gets the type of flow element
///
public override FlowElementType Type => FlowElementType.Communication;
///
/// Gets the icon for this flow element
///
public override string Icon => "fab fa-telegram-plane";
///
/// Gets if this can be used in a failure flow
///
public override bool FailureNode => true;
///
public override string CustomColor => "#0088CC";
///
/// Gets the Help URL
///
public override string HelpUrl => "https://fileflows.com/docs/plugins/telegram";
///
/// Gets or sets the message
///
[Required]
[Template(1, nameof(MessageTemplates))]
public string Message { get; set; } = string.Empty;
private static List? _MessageTemplates;
public static List MessageTemplates
{
get
{
if (_MessageTemplates == null)
{
_MessageTemplates = new List
{
new () { Label = "Basic", Value = @"File: {{ file.Orig.FullName }}
Size: {{ file.Size }}" },
new () { Label = "File Size Changes", Value = @"
{{ difference = file.Size - file.Orig.Size }}
{{ percent = (difference / file.Orig.Size) * 100 | math.round 2 }}
Input File: {{ file.Orig.FullName }}
Output File: {{ file.FullName }}
Original Size: {{ file.Orig.Size | file_size }}
Final Size: {{ file.Size | file_size }}
{{- if difference > 0 }}
File grew in size: {{ difference | math.abs | file_size }}
{{ else }}
File shrunk in size by: {{ difference | file_size }} / {{ percent }}%
{{ end }}"}
};
}
return _MessageTemplates;
}
}
///
/// Sends a telegram message
///
/// the bot token
/// the chat id
/// the message to send
/// true if successful, otherwise false
internal static bool SendMessage(string botToken, string chatId, string message)
{
using (HttpClient client = new HttpClient())
{
string apiUrl = $"https://api.telegram.org/bot{botToken}/sendMessage";
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair("chat_id", chatId),
new KeyValuePair("text", message)
});
var response = client.PostAsync(apiUrl, content).Result;
return response.IsSuccessStatusCode;
}
}
///
/// Executes the flow element
///
/// the node parameters
/// the output to call next
public override int Execute(NodeParameters args)
{
try
{
var settings = args.GetPluginSettings();
if (settings == null)
{
args.Logger?.ILog("Failed to load plugin settings");
return 2;
}
if (string.IsNullOrWhiteSpace(settings?.BotToken))
{
args.Logger?.WLog("No Bot Token set");
return 2;
}
if (string.IsNullOrWhiteSpace(settings?.ChatId))
{
args.Logger?.WLog("No Chat ID set");
return 2;
}
var message = args.RenderTemplate!(Message);
var result = SendMessage(settings.BotToken, settings.ChatId, message);
return result ? 1 : 2;
}
catch (Exception ex)
{
args.Logger?.WLog("Error sending message: " + ex.Message);
return 2;
}
}
}