Merge branch 'feature/docker-shenanigans'

This commit is contained in:
Keroosha 2023-03-07 03:11:10 +03:00
commit 6dc4e3ab79
6 changed files with 25 additions and 16 deletions

View File

@ -17,6 +17,7 @@ type public BotConfig = {
chanelId: int64 chanelId: int64
adminChatId: int64 adminChatId: int64
youtubeDlUrl: string youtubeDlUrl: string
tmpYtdlSavePath: string Option
} }
let private readConfig = let private readConfig =

View File

@ -1,5 +1,6 @@
open System open System
open System.Net.Http open System.Net.Http
open System.Threading
open System.Threading.Tasks open System.Threading.Tasks
open PublishHelperBot.Environment open PublishHelperBot.Environment
open PublishHelperBot.YoutubeDl open PublishHelperBot.YoutubeDl
@ -9,8 +10,8 @@ open Telegram.Bot.Polling
open Telegram.Bot.Types open Telegram.Bot.Types
open Telegram.Bot.Types.Enums open Telegram.Bot.Types.Enums
let cancellation = new CancellationTokenSource()
let config = createConfig "SBPB_CONFIG_PATH" let config = createConfig "SBPB_CONFIG_PATH"
let botClient = TelegramBotClient (config.token, new HttpClient()) let botClient = TelegramBotClient (config.token, new HttpClient())
let youtubeDlClient = let youtubeDlClient =
@ -28,7 +29,7 @@ let tgService =
} }
let youtubeDlService = let youtubeDlService =
YoutubeDlService.createService youtubeDlClient tgService YoutubeDlService.createService youtubeDlClient tgService (config.tmpYtdlSavePath |> Option.defaultValue "/tmp")
let isObsoleteUpdate = let isObsoleteUpdate =
let startDate = DateTime.UtcNow let startDate = DateTime.UtcNow
@ -56,5 +57,9 @@ botClient.StartReceiving(
) )
Logging.logger.Information("Я родился") Logging.logger.Information("Я родился")
Console.CancelKeyPress |> Event.add (fun _ -> cancellation.Cancel(); printfn "Сворачиваемся...")
Console.ReadKey() |> ignore Async.RunSynchronously(
async {
while (not(cancellation.Token.IsCancellationRequested)) do
do! Async.Sleep 500 |> Async.Ignore
})

View File

@ -163,7 +163,7 @@ module YoutubeDlClient =
[<RequireQualifiedAccess>] [<RequireQualifiedAccess>]
module YoutubeDlService = module YoutubeDlService =
type private Msg = type private Msg =
| AddJob of url: string * TaskCompletionSource<Guid> | AddJob of url: string * savePath: string * TaskCompletionSource<Guid>
| CheckJob | CheckJob
type private JobState = type private JobState =
@ -235,14 +235,15 @@ module YoutubeDlService =
(current: YoutubeDlJob option) = (current: YoutubeDlJob option) =
async { async {
match! inbox.Receive() with match! inbox.Receive() with
| AddJob (url, tcs) -> | AddJob (url, savePath, tcs) ->
Logging.logger.Information("Adding new url = {url}", url) Logging.logger.Information("Adding new url = {url}", url)
let id = Guid.NewGuid() let id = Guid.NewGuid()
let fullSavePath = $"{Path.Combine(savePath, Path.GetRandomFileName())}.mp4"
let job = { let job = {
InternalId = id InternalId = id
State = Created State = Created
Url = url Url = url
SavePath = $"{Path.GetTempFileName()}.mp4" SavePath = fullSavePath
} }
tcs.SetResult(id) tcs.SetResult(id)
jobQueue.Enqueue(job) jobQueue.Enqueue(job)
@ -315,10 +316,10 @@ module YoutubeDlService =
loop (Queue()) None loop (Queue()) None
) )
let createService youtubeDlClient tgService = let createService youtubeDlClient tgService (savePath: string) =
let inbox = createServiceInbox youtubeDlClient tgService let inbox = createServiceInbox youtubeDlClient tgService
{ new IYoutubeDlService with { new IYoutubeDlService with
member this.AddJob(url) = member this.AddJob(url) =
let tcs = TaskCompletionSource<_>() let tcs = TaskCompletionSource<_>()
inbox.Post(AddJob(url, tcs)) inbox.Post(AddJob(url, savePath, tcs))
tcs.Task |> Async.AwaitTask } tcs.Task |> Async.AwaitTask }

View File

@ -3,5 +3,6 @@
"chanelId": "123123123", "chanelId": "123123123",
"adminChatId": "123123123", "adminChatId": "123123123",
"relayUrl": "https://t.me/pokupkabitka_bot", "relayUrl": "https://t.me/pokupkabitka_bot",
"youtubeDlUrl": "http://localhost:8000/" "youtubeDlUrl": "http://localhost:8000/",
"tmpYtdlSavePath": "/tmp"
} }

View File

@ -30,7 +30,8 @@ cd PublishHelperBot && dotnet restore
"chanelId": "123123123", // Канал куда постить "chanelId": "123123123", // Канал куда постить
"adminChatId": "123123123", // Чат откуда будут слушаться команды "adminChatId": "123123123", // Чат откуда будут слушаться команды
"relayUrl": "https://t.me/pokupkabitka_bot", // ссылка на бота предложки (Нужно команде /post) "relayUrl": "https://t.me/pokupkabitka_bot", // ссылка на бота предложки (Нужно команде /post)
"youtubeDlUrl": "http://localhost:8000/" // апишка для скачивания видосиков "youtubeDlUrl": "http://localhost:8000/", // апишка для скачивания видосиков
"tmpYtdlSavePath": "/tmp" // Промежуточное хранилище для YTDL
} }
``` ```

View File

@ -580,14 +580,14 @@ files = [
[[package]] [[package]]
name = "yt-dlp" name = "yt-dlp"
version = "2023.2.17" version = "2023.3.4"
description = "A youtube-dl fork with additional features and patches" description = "A youtube-dl fork with additional features and patches"
category = "main" category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
{file = "yt-dlp-2023.2.17.tar.gz", hash = "sha256:9af92de5effc193bdb51216d9ebf28874d96180d202fae752b0d9f2a63380f3a"}, {file = "yt-dlp-2023.3.4.tar.gz", hash = "sha256:265d5da97a76c15d7d9a4088a67b78acd5dcf6f8cfd8257c52f581ff996ff515"},
{file = "yt_dlp-2023.2.17-py2.py3-none-any.whl", hash = "sha256:3b2df037c80922f0f83f63ee2f9253496b4a8668c0fe8d2a836ba9040f853b07"}, {file = "yt_dlp-2023.3.4-py2.py3-none-any.whl", hash = "sha256:40ca421407ce07c8fd700854fd978d58526ec6fff3468caa34ff1c7333b8dc34"},
] ]
[package.dependencies] [package.dependencies]
@ -600,5 +600,5 @@ websockets = "*"
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.10" python-versions = "3.10.9"
content-hash = "51ec164c892a17017f004b82d07fc561a863fbe4859baff2482a44b5776f6494" content-hash = "a8eccae921b6740e35b430b05e2f972b6c891474517e84bf86e12728318fefd5"