Guest User

Untitled

a guest
Jun 11th, 2021
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 3.94 KB | None | 0 0
  1. open FSharp.Control
  2. open System
  3. open System.Threading
  4. open TdLib
  5.  
  6. type Wtf() =
  7.     static member ApiId = 8568794
  8.     static member ApiHash = "er8mkeop2kpzrb3mhj50y46u64baqerg"
  9.     static member PhoneNumber = "+7901450930" // must contain prefix
  10.     static member ResetEvent = ManualResetEventSlim()
  11.     static member val AuthNeeded = false with get, set
  12.     static member val Client = TdClient() with get, set
  13.  
  14. TdLog.SetVerbosityLevel(0)
  15. Wtf.Client <- TdClient()
  16.            
  17. Wtf.Client.UpdateReceived.Add(
  18.     fun (update : TdApi.Update) ->
  19.         async {
  20.             match update with
  21.             | :? TdApi.Update.UpdateOption as o ->
  22.                 let! _ = Wtf.Client.ExecuteAsync(TdApi.SetOption(Extra = o.Extra, Name = o.Name, Value = o.Value, DataType = o.DataType))
  23.                          |> Async.AwaitTask
  24.                 ()
  25.             | :? TdApi.Update.UpdateAuthorizationState as updateAuthorizationState ->
  26.                 match updateAuthorizationState.AuthorizationState with
  27.                 | :? TdApi.AuthorizationState.AuthorizationStateWaitTdlibParameters ->
  28.                     let! _ = Wtf.Client.ExecuteAsync(TdApi.SetTdlibParameters(
  29.                                                         Parameters = TdApi.TdlibParameters(
  30.                                                             ApiId = Wtf.ApiId,
  31.                                                             ApiHash = Wtf.ApiHash,
  32.                                                             ApplicationVersion = "1.3.0",
  33.                                                             DeviceModel = "PC",
  34.                                                             SystemLanguageCode = "en",
  35.                                                             SystemVersion = "Win 10.0")))
  36.                              |> Async.AwaitTask
  37.                     ()
  38.                 | :? TdApi.AuthorizationState.AuthorizationStateWaitEncryptionKey ->
  39.                     let! _ = Wtf.Client.ExecuteAsync(TdApi.CheckDatabaseEncryptionKey())
  40.                              |> Async.AwaitTask
  41.                     ()
  42.                 | ( :? TdApi.AuthorizationState.AuthorizationStateWaitPhoneNumber
  43.                   | :? TdApi.AuthorizationState.AuthorizationStateWaitCode ) ->
  44.                     Wtf.AuthNeeded <- true
  45.                     Wtf.ResetEvent.Set()
  46.                 | _ -> ()
  47.             | :? TdApi.Update.UpdateUser -> Wtf.ResetEvent.Set()
  48.             | _ -> () (* add a breakpoint here to see other events *)
  49.         }
  50.         |> Async.StartImmediate)
  51.  
  52. Wtf.ResetEvent.Wait()
  53. if Wtf.AuthNeeded then
  54.     async {
  55.         let! _ = Wtf.Client.ExecuteAsync(TdApi.SetAuthenticationPhoneNumber(PhoneNumber = Wtf.PhoneNumber))
  56.                  |> Async.AwaitTask
  57.         Console.Write("Insert the login code: ")
  58.         let code = Console.ReadLine()
  59.         let! _ = Wtf.Client.ExecuteAsync(TdApi.CheckAuthenticationCode(Code = code))
  60.                  |> Async.AwaitTask
  61.         ()
  62.     }
  63.     |> Async.StartImmediate
  64.  
  65. let GetChannels(offsetOrder : int64 option, offsetId : int64 option, limit : int option) =
  66.     asyncSeq {
  67.         let offsetOrder_ = defaultArg offsetOrder Int64.MaxValue
  68.         let offsetId_ = defaultArg offsetId 0L
  69.         let limit_ = defaultArg limit 1000
  70.         let! chats = Wtf.Client.ExecuteAsync(TdApi.GetChats(OffsetOrder=offsetOrder_, Limit=limit_, OffsetChatId=offsetId_))
  71.                     |> Async.AwaitTask
  72.         for chatId in chats.ChatIds do
  73.             let! chat = Wtf.Client.ExecuteAsync(TdApi.GetChat(ChatId = chatId))
  74.                         |> Async.AwaitTask
  75.             match chat.Type with
  76.             | ( :? TdApi.ChatType.ChatTypeSupergroup
  77.               | :? TdApi.ChatType.ChatTypeBasicGroup
  78.               | :? TdApi.ChatType.ChatTypePrivate ) -> yield chat
  79.             | _ -> ()
  80.     }
  81.  
  82. GetChannels(None, None, None)
  83. |> AsyncSeq.iter (fun chat -> printfn $"{chat.Title}")
  84. |> Async.RunSynchronously
  85.  
  86. Console.ReadLine() |> ignore
  87.  
Add Comment
Please, Sign In to add comment