Files
telegram-bot/modules/ContentStore/Service/AbstractKittiesService.cs
T
2023-01-02 23:31:05 +02:00

59 lines
1.9 KiB
C#

using System.Net.Http.Headers;
using System.Text;
using BotFramework.Utils;
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
using Microsoft.Extensions.Configuration;
using Telegram.Bot.Types;
using West.TelegramBot.ContentStore.Model;
namespace West.TelegramBot.ContentStore.Service;
public abstract class AbstractKittiesService : IRandomMediaService
{
private readonly CoreContext _db;
protected abstract string VideoType { get; }
public abstract StoreItem StoreItem { get; }
private readonly HttpClient _httpClient;
protected AbstractKittiesService(IConfiguration configuration, CoreContext db)
{
_db = db;
var section = configuration.GetSection("KittiesService");
var uri = section.GetValue<Uri>("Uri");
var token = section.GetValue<string>("Token");
_httpClient = new HttpClient
{
BaseAddress = uri,
DefaultRequestHeaders =
{
Authorization = new AuthenticationHeaderValue("Bearer", token)
}
};
}
public async Task<RandomMedia> GetRandomMediaAsync()
{
var response = await _httpClient.GetAsync($"v1/{VideoType}");
var headers = response.Headers;
var videoSource = headers.GetValues("X-Video-Source").FirstOrDefault(string.Empty);
var videoTitleBase64 = headers.GetValues("X-Video-Title").FirstOrDefault(string.Empty);
var videoTitle = Encoding.UTF8.GetString(Convert.FromBase64String(videoTitleBase64));
return new RandomMedia(
new InputFile(await response.Content.ReadAsStreamAsync()),
new HtmlString().Url(videoSource, videoTitle).ToString(),
true
);
}
public async Task<bool> CanView(Chat chat, User user)
{
var option = await _db.UserValues.FindOrCreateOption(chat.Id, "AllowNSFW");
return option.GetValue(false);
}
}