45 lines
1.5 KiB
C#
45 lines
1.5 KiB
C#
|
|
using System.Net.Http.Json;
|
|||
|
|
using Volo.Abp.Settings;
|
|||
|
|
|
|||
|
|
namespace Sozsoft.Sender.Telegram;
|
|||
|
|
|
|||
|
|
public interface ITelegramHttpClient
|
|||
|
|
{
|
|||
|
|
Task<TelegramSendResultDto> SendMessageAsync(string ChatId, string Message);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public sealed class TelegramHttpClient : ITelegramHttpClient, IDisposable
|
|||
|
|
{
|
|||
|
|
private readonly HttpClient httpClient;
|
|||
|
|
private readonly ISettingProvider settingProvider;
|
|||
|
|
|
|||
|
|
public TelegramHttpClient(
|
|||
|
|
HttpClient httpClient,
|
|||
|
|
ISettingProvider settingProvider)
|
|||
|
|
{
|
|||
|
|
this.httpClient = httpClient;
|
|||
|
|
this.settingProvider = settingProvider;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<TelegramSendResultDto> SendMessageAsync(string ChatId, string Message)
|
|||
|
|
{
|
|||
|
|
var url = await settingProvider.GetOrNullAsync(TelegramSettingNames.Url);
|
|||
|
|
var botToken = await settingProvider.GetOrNullAsync(TelegramSettingNames.BotToken);
|
|||
|
|
var parseMode = await settingProvider.GetOrNullAsync(TelegramSettingNames.ParseMode);
|
|||
|
|
|
|||
|
|
var response = await httpClient.PostAsJsonAsync($"{url.TrimEnd('/')}/bot{botToken}/sendMessage",
|
|||
|
|
new TelegramPostMessageInput
|
|||
|
|
{
|
|||
|
|
chat_id = ChatId,
|
|||
|
|
text = Message,
|
|||
|
|
parse_mode = parseMode.IsNullOrWhiteSpace() ? null : parseMode,
|
|||
|
|
disable_web_page_preview = true
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// Bot API hatayı 4xx gövdesinde açıklar; durum kodunu fırlatmak açıklamayı kaybettirir.
|
|||
|
|
return await response.Content.ReadFromJsonAsync<TelegramSendResultDto>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Dispose() => httpClient?.Dispose();
|
|||
|
|
}
|