Merge branch 'feature/docker-shenanigans'
This commit is contained in:
commit
6dc4e3ab79
@ -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 =
|
||||||
|
@ -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
|
||||||
|
})
|
@ -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 }
|
@ -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"
|
||||||
}
|
}
|
@ -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
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
10
youtube-dl-api/poetry.lock
generated
10
youtube-dl-api/poetry.lock
generated
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user