// For more information see https://aka.ms/fsharp-console-apps open System open System.IO open System.Net.Http open System.Threading open System.Threading.Tasks open Microsoft.FSharp.Control open Newtonsoft.Json open Telegram.Bot open Telegram.Bot.Polling open Telegram.Bot.Types open Telegram.Bot.Types.Enums type BotConfig = { token: string chanelId: int64 adminChatId: int64 } let ReadConfig = File.ReadAllText >> JsonConvert.DeserializeObject let CreateConfig (name: string) = match Environment.GetEnvironmentVariable(name) with | null -> raise <| ApplicationException("Missing config path env") | path -> ReadConfig <| path let CreateBot (config: BotConfig, http: HttpClient) = TelegramBotClient(config.token, http) let config = CreateConfig <| "SBPB_CONFIG_PATH"; let botClient = CreateBot <| (config, new HttpClient()) let shouldReply (u: Update) = u.Type = UpdateType.Message && u.Message.Chat.Id = config.adminChatId let updateHandle (bc: ITelegramBotClient) (u: Update) (ct: CancellationToken): Task = match u with | _ when shouldReply u -> bc.SendTextMessageAsync(config.chanelId, u.Message.Text, cancellationToken = ct) | _ -> Task.CompletedTask let handlePollingError (bc: ITelegramBotClient) (e: Exception) (t: CancellationToken) = printfn $"{e.Message}\n{e.StackTrace}" Task.CompletedTask let receiverOptions = ReceiverOptions(AllowedUpdates = Array.zeroCreate 0) botClient.StartReceiving(updateHandle,handlePollingError,receiverOptions) Console.ReadKey() |> ignore