Ejemplo n.º 1
0
        private void ProcessBotInlineResult(ref TLMessage message, TLBotInlineResultBase resultBase, int botId)
        {
            message.InlineBotResultId      = resultBase.Id;
            message.InlineBotResultQueryId = resultBase.QueryId;
            message.ViaBotId    = botId;
            message.HasViaBotId = true;

            var venueMedia = resultBase.SendMessage as TLBotInlineMessageMediaVenue;

            if (venueMedia != null)
            {
                message.Media = new TLMessageMediaVenue
                {
                    Title    = venueMedia.Title,
                    Address  = venueMedia.Address,
                    Provider = venueMedia.Provider,
                    VenueId  = venueMedia.VenueId,
                    Geo      = venueMedia.Geo
                };
            }

            var geoMedia = resultBase.SendMessage as TLBotInlineMessageMediaGeo;

            if (geoMedia != null)
            {
                message.Media = new TLMessageMediaGeo
                {
                    Geo = geoMedia.Geo
                };
            }

            var contactMedia = resultBase.SendMessage as TLBotInlineMessageMediaContact;

            if (contactMedia != null)
            {
                message.Media = new TLMessageMediaContact
                {
                    PhoneNumber = contactMedia.PhoneNumber,
                    FirstName   = contactMedia.FirstName,
                    LastName    = contactMedia.LastName,
                    UserId      = 0
                };
            }

            var mediaResult = resultBase as TLBotInlineMediaResult;

            if (mediaResult != null)
            {
                if (mediaResult.Type.Equals("voice", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty,
                        //NotListened = !(this.With is TLChannel)
                    };
                    //message.NotListened = !(this.With is TLChannel);
                }
                else if (mediaResult.Type.Equals("audio", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("sticker", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("file", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("gif", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("photo", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaPhoto
                    {
                        Photo   = mediaResult.Photo,
                        Caption = string.Empty
                    };
                }
            }

            var result = resultBase as TLBotInlineResult;

            if (result != null)
            {
            }

            //var result = resultBase as TLBotInlineResult;
            //if (result != null)
            //{
            //    var isFile = result.Type.Equals("file", StringComparison.OrdinalIgnoreCase);
            //    var isVoice = result.Type.Equals("voice", StringComparison.OrdinalIgnoreCase);
            //    var isAudio = result.Type.Equals("audio", StringComparison.OrdinalIgnoreCase);
            //    if (isFile || isAudio || isVoice)
            //    {
            //        var tLDocument = result.Document as TLDocument;
            //        if (tLDocument == null)
            //        {
            //            string text = null;
            //            if (result.ContentUrl != null)
            //            {
            //                Uri uri = new Uri(result.ContentUrl);
            //                try
            //                {
            //                    text = Path.GetFileName(uri.LocalPath);
            //                }
            //                catch (Exception)
            //                {
            //                }
            //                if (text == null)
            //                {
            //                    text = "file.ext";
            //                }
            //            }
            //            tLDocument = new TLDocument
            //            {
            //                Id = 0,
            //                AccessHash = 0,
            //                Date = 0,
            //                MimeType = result.ContentType ?? string.Empty,
            //                Size = 0,
            //                Thumb = new TLPhotoSizeEmpty
            //                {
            //                    Type = string.Empty
            //                },
            //                DCId = 0,
            //                Attributes = new TLVector<TLDocumentAttributeBase>
            //                {
            //                    new TLDocumentAttributeFilename
            //                    {
            //                        FileName = text
            //                    }
            //                }
            //            };

            //            if (isVoice || isAudio)
            //            {
            //                tLDocument.Attributes.Add(new TLDocumentAttributeAudio
            //                {
            //                    Duration = result.Duration ?? 0,
            //                    Title = result.Title,
            //                    Performer = null,
            //                    IsVoice = isVoice
            //                });
            //            }
            //        }

            //        var documentMedia = new TLMessageMediaDocument
            //        {
            //            Document = tLDocument,
            //            Caption = string.Empty
            //        };
            //        message.Media = documentMedia;
            //        documentMedia.NotListened = (isVoice && !(this.With is TLChannel));
            //        message.NotListened = (isVoice && !(this.With is TLChannel));
            //    }
            //    else if (result.Type.Equals("gif", StringComparison.OrdinalIgnoreCase))
            //    {
            //        TLDocumentBase document = result.Document;
            //        if (document != null)
            //        {
            //            TLMessageMediaDocument media = new TLMessageMediaDocument
            //            {
            //                Document = document,
            //                Caption = string.Empty
            //            };
            //            message.Media = media;
            //        }
            //    }
            //    else if (result.Type.Equals("photo", StringComparison.OrdinalIgnoreCase))
            //    {
            //        Telegram.Api.Helpers.Execute.ShowDebugMessage(string.Format("w={0} h={1}\nthumb_url={2}\ncontent_url={3}", new object[]
            //        {
            //            result.W,
            //            result.H,
            //            result.ThumbUrl,
            //            result.ContentUrl
            //        }));
            //        TLFileLocation location = new TLFileLocation
            //        {
            //            DCId = 1,
            //            VolumeId = TLLong.Random(),
            //            LocalId = TLInt.Random(),
            //            Secret = TLLong.Random()
            //        };
            //        TLPhotoCachedSize item2 = new TLPhotoCachedSize
            //        {
            //            Type = "s",
            //            W = result.W ?? 0,
            //            H = result.H ?? 0,
            //            Location = location,
            //            Bytes = new byte[0],
            //            TempUrl = (result.ThumbUrlString ?? result.ContentUrlString)
            //        };
            //        TLPhotoSize item3 = new TLPhotoSize
            //        {
            //            Type = "m",
            //            W = result.W ?? 0,
            //            H = result.H ?? 0,
            //            Location = location,
            //            TempUrl = result.ContentUrlString,
            //            Size = 0
            //        };
            //        if (!string.IsNullOrEmpty(result.ThumbUrl))
            //        {
            //            WebClient webClient = new WebClient();
            //            webClient.OpenReadAsync(new Uri(result.ThumbUrlString, 1));
            //            webClient.add_OpenReadCompleted(delegate (object sender, OpenReadCompletedEventArgs args)
            //            {
            //                if (args.get_Cancelled())
            //                {
            //                    return;
            //                }
            //                if (args.get_Error() != null)
            //                {
            //                    return;
            //                }
            //                string fileName = string.Format("{0}_{1}_{2}.jpg", location.VolumeId, location.LocalId, location.Secret);
            //                Stream result = args.get_Result();
            //                try
            //                {
            //                    using (IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication())
            //                    {
            //                        if (userStoreForApplication.FileExists(fileName))
            //                        {
            //                            return;
            //                        }
            //                        using (IsolatedStorageFileStream isolatedStorageFileStream = userStoreForApplication.OpenFile(fileName, 4, 2, 1))
            //                        {
            //                            byte[] array = new byte[131072];
            //                            int num;
            //                            while ((num = result.Read(array, 0, 131072)) > 0)
            //                            {
            //                                long position = result.get_Position();
            //                                result.set_Position(position - 10L);
            //                                byte[] array2 = new byte[10];
            //                                result.Read(array2, 0, array2.Length);
            //                                isolatedStorageFileStream.Write(array, 0, num);
            //                            }
            //                        }
            //                    }
            //                }
            //                finally
            //                {
            //                    if (result != null)
            //                    {
            //                        result.Dispose();
            //                    }
            //                }
            //                if (!string.IsNullOrEmpty(result.ContentUrlString))
            //                {
            //                    webClient.OpenReadAsync(new Uri(result.ContentUrlString, 1));
            //                    webClient.add_OpenReadCompleted(delegate (object sender2, OpenReadCompletedEventArgs args2)
            //                    {
            //                        if (args2.get_Cancelled())
            //                        {
            //                            return;
            //                        }
            //                        if (args2.get_Error() != null)
            //                        {
            //                            return;
            //                        }
            //                        using (Stream result2 = args2.get_Result())
            //                        {
            //                            using (IsolatedStorageFile userStoreForApplication2 = IsolatedStorageFile.GetUserStoreForApplication())
            //                            {
            //                                if (!userStoreForApplication2.FileExists(fileName))
            //                                {
            //                                    using (IsolatedStorageFileStream isolatedStorageFileStream2 = userStoreForApplication2.OpenFile(fileName, 4, 2, 1))
            //                                    {
            //                                        byte[] array3 = new byte[131072];
            //                                        int num2;
            //                                        while ((num2 = result2.Read(array3, 0, 131072)) > 0)
            //                                        {
            //                                            isolatedStorageFileStream2.Write(array3, 0, num2);
            //                                        }
            //                                    }
            //                                }
            //                            }
            //                        }
            //                    });
            //                }
            //            });
            //        }

            //        var photo = new TLPhoto
            //        {
            //            Id = TLLong.Random(),
            //            AccessHash = TLLong.Random(),
            //            Date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now),
            //            Sizes = new TLVector<TLPhotoSizeBase>
            //            {
            //                item2,
            //                item3
            //            }
            //        };

            //        var media2 = new TLMessageMediaPhoto
            //        {
            //            Photo = photo,
            //            Caption = string.Empty
            //        };
            //        message.Media = media2;
            //    }
            //}

            var sendText = resultBase.SendMessage as TLBotInlineMessageText;

            if (sendText != null)
            {
                message.Message     = sendText.Message;
                message.Entities    = sendText.Entities;
                message.HasEntities = sendText.HasEntities;
                //bool arg_878_0 = sendText.NoWebpage;
            }

            var sendMedia = resultBase.SendMessage as TLBotInlineMessageMediaAuto;

            if (sendMedia != null)
            {
                var mediaCaption = message.Media as ITLMessageMediaCaption;
                if (mediaCaption != null)
                {
                    mediaCaption.Caption = sendMedia.Caption;
                }
            }

            if (resultBase.SendMessage != null && resultBase.SendMessage.ReplyMarkup != null)
            {
                message.ReplyMarkup    = resultBase.SendMessage.ReplyMarkup;
                message.HasReplyMarkup = true;
            }
        }
Ejemplo n.º 2
0
        public void SendBotInlineResult(TLBotInlineResultBase result)
        {
            var currentInlineBot = CurrentInlineBot;

            if (currentInlineBot == null)
            {
                return;
            }

            //var inlineBots = DialogDetailsViewModel.GetInlineBots();
            //if (!inlineBots.Contains(currentInlineBot))
            //{
            //    inlineBots.Insert(0, currentInlineBot);
            //    this._cachedUsernameResults.Clear();
            //}
            //else
            //{
            //    inlineBots.Remove(currentInlineBot);
            //    inlineBots.Insert(0, currentInlineBot);
            //    this._cachedUsernameResults.Clear();
            //}
            //DialogDetailsViewModel.SaveInlineBotsAsync();
            //if (_inlineBotResults == null)
            //{
            //    return;
            //}

            //TLLong arg_74_0 = this._currentInlineBotResults.QueryId;

            var date    = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now);
            var message = TLUtils.GetMessage(SettingsHelper.UserId, Peer.ToPeer(), TLMessageState.Sending, true, true, date, string.Empty, new TLMessageMediaEmpty(), TLLong.Random(), null);

            if (message == null)
            {
                return;
            }

            ProcessBotInlineResult(ref message, result, currentInlineBot.Id);

            //if (this.Reply != null && DialogDetailsViewModel.IsWebPagePreview(this.Reply))
            //{
            //    message._media = ((TLMessagesContainter)this.Reply).WebPageMedia;
            //    this.Reply = this._previousReply;
            //}

            if (Reply != null)
            {
                message.HasReplyToMsgId = true;
                message.ReplyToMsgId    = Reply.Id;
                message.Reply           = Reply;
                Reply = null;
            }

            SetText(string.Empty);

            //this.Text = string.Empty;
            var previousMessage = InsertSendingMessage(message, false);
            //this.IsEmptyDialog = (base.Items.get_Count() == 0 && this.LazyItems.get_Count() == 0);
            var user = With as TLUser;

            if (user != null && user.IsBot && Messages.Count == 1)
            {
                RaisePropertyChanged(() => With);
            }

            CurrentInlineBot = null;
            InlineBotResults = null;

            Execute.BeginOnThreadPool(() =>
            {
                CacheService.SyncSendingMessage(message, previousMessage, async(m) =>
                {
                    var response = await ProtoService.SendInlineBotResultAsync(message, () =>
                    {
                        message.State = TLMessageState.Confirmed;
                    });
                    if (response.IsSucceeded)
                    {
                        message.RaisePropertyChanged(() => message.Media);
                    }
                });
            });

            //base.BeginOnUIThread(delegate
            //{
            //    this.ProcessScroll();
            //    this.RaiseStartGifPlayer(new StartGifPlayerEventArgs(message));
            //});
            //base.BeginOnUIThread(delegate
            //{
            //    this.ClearInlineBotResults();
            //    this.CurrentInlineBot = null;
            //    base.NotifyOfPropertyChange<string>(() => this.BotInlinePlaceholder);
            //});
            //this._debugNotifyOfPropertyChanged = false;
            //base.BeginOnThreadPool(delegate
            //{
            //    this.CacheService.SyncSendingMessage(message, previousMessage, delegate (TLMessageCommon m)
            //    {
            //        DialogDetailsViewModel.SendInternal(message, this.MTProtoService, delegate
            //        {
            //        }, delegate
            //        {
            //            this.Status = string.Empty;
            //        });
            //    });
            //});
        }
Ejemplo n.º 3
0
        public void SendBotInlineResult(TLBotInlineResultBase result)
        {
            _debugNotifyOfPropertyChanged = true;

            var currentInlineBot = CurrentInlineBot;

            if (currentInlineBot == null)
            {
                return;
            }

            var inlineBots = GetInlineBots();

            if (!inlineBots.Contains(currentInlineBot))
            {
                inlineBots.Insert(0, currentInlineBot);
                _cachedUsernameResults.Clear();
            }
            else
            {
                inlineBots.Remove(currentInlineBot);
                inlineBots.Insert(0, currentInlineBot);
                _cachedUsernameResults.Clear();
            }

            SaveInlineBotsAsync();

            if (_currentInlineBotResults == null)
            {
                return;
            }
            var queryId = _currentInlineBotResults.QueryId;

            ClearInlineBotResults();
            CurrentInlineBot = null;
            NotifyOfPropertyChange(() => BotInlinePlaceholder);
            Text = string.Empty;

            var message = GetMessage(TLString.Empty, new TLMessageMediaEmpty()) as TLMessage45;

            if (message == null)
            {
                return;
            }

            ProcessBotInlineResult(message, result, currentInlineBot.Id);

            if (message._media != null)
            {
                message.SetMedia();
            }

            if (Reply != null && IsWebPagePreview(Reply))
            {
                message._media = ((TLMessagesContainter)Reply).WebPageMedia;
                Reply          = _previousReply;
            }

            BeginOnUIThread(() =>
            {
                var previousMessage = InsertSendingMessage(message);

                IsEmptyDialog = Items.Count == 0 && (_messages == null || _messages.Count == 0) && LazyItems.Count == 0;

                var user = With as TLUser;
                if (user != null && user.IsBot && Items.Count == 1)
                {
                    NotifyOfPropertyChange(() => With);
                }

                BeginOnUIThread(() =>
                {
                    ProcessScroll();
                    View.ResumeChatPlayers();
                });

                _debugNotifyOfPropertyChanged = false;
                BeginOnThreadPool(() =>
                                  CacheService.SyncSendingMessage(
                                      message, previousMessage,
                                      m => SendInternal(message, MTProtoService,
                                                        () => { },
                                                        () => Status = string.Empty)));
            });
        }
Ejemplo n.º 4
0
        private void ProcessBotInlineResult(TLMessage45 message, TLBotInlineResultBase resultBase, TLInt botId)
        {
            message.InlineBotResultId      = resultBase.Id;
            message.InlineBotResultQueryId = resultBase.QueryId;
            message.ViaBotId = botId;

            var botInlineMessageMediaVenue = resultBase.SendMessage as TLBotInlineMessageMediaVenue;
            var botInlineMessageMediaGeo   = resultBase.SendMessage as TLBotInlineMessageMediaGeo;

            if (botInlineMessageMediaVenue != null)
            {
                message._media = new TLMessageMediaVenue72
                {
                    Title     = botInlineMessageMediaVenue.Title,
                    Address   = botInlineMessageMediaVenue.Address,
                    Provider  = botInlineMessageMediaVenue.Provider,
                    VenueId   = botInlineMessageMediaVenue.VenueId,
                    VenueType = TLString.Empty,
                    Geo       = botInlineMessageMediaVenue.Geo
                };
            }
            else if (botInlineMessageMediaGeo != null)
            {
                message._media = new TLMessageMediaGeo {
                    Geo = botInlineMessageMediaGeo.Geo
                };
            }

            var botInlineMessageMediaContact = resultBase.SendMessage as TLBotInlineMessageMediaContact;

            if (botInlineMessageMediaContact != null)
            {
                message._media = new TLMessageMediaContact82
                {
                    PhoneNumber = botInlineMessageMediaContact.PhoneNumber,
                    FirstName   = botInlineMessageMediaContact.FirstName,
                    LastName    = botInlineMessageMediaContact.LastName,
                    UserId      = new TLInt(0),
                    VCard       = TLString.Empty
                };
            }

            var mediaResult = resultBase as TLBotInlineMediaResult;

            if (mediaResult != null)
            {
                if (TLString.Equals(mediaResult.Type, new TLString("voice"), StringComparison.OrdinalIgnoreCase) &&
                    mediaResult.Document != null)
                {
                    message._media = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = mediaResult.Document, Caption = TLString.Empty, NotListened = !(With is TLChannel)
                    };

                    message.NotListened = !(With is TLChannel);
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("audio"), StringComparison.OrdinalIgnoreCase) &&
                         mediaResult.Document != null)
                {
                    message._media = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = mediaResult.Document, Caption = TLString.Empty
                    };
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("sticker"), StringComparison.OrdinalIgnoreCase) &&
                         mediaResult.Document != null)
                {
                    message._media = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = mediaResult.Document, Caption = TLString.Empty
                    };
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("file"), StringComparison.OrdinalIgnoreCase) &&
                         mediaResult.Document != null)
                {
                    message._media = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = mediaResult.Document, Caption = TLString.Empty
                    };
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("gif"), StringComparison.OrdinalIgnoreCase) &&
                         mediaResult.Document != null)
                {
                    message._media = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = mediaResult.Document, Caption = TLString.Empty
                    };
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("photo"), StringComparison.OrdinalIgnoreCase) &&
                         mediaResult.Photo != null)
                {
                    message._media = new TLMessageMediaPhoto75 {
                        Flags = new TLInt(0), Photo = mediaResult.Photo, Caption = TLString.Empty
                    };
                }
                else if (TLString.Equals(mediaResult.Type, new TLString("game"), StringComparison.OrdinalIgnoreCase))
                {
                    var game = new TLGame
                    {
                        Flags       = new TLInt(0),
                        Id          = new TLLong(0),
                        AccessHash  = new TLLong(0),
                        ShortName   = mediaResult.Id,
                        Title       = mediaResult.Title ?? TLString.Empty,
                        Description = mediaResult.Description ?? TLString.Empty,
                        Photo       = mediaResult.Photo ?? new TLPhotoEmpty {
                            Id = new TLLong(0)
                        },
                        Document = mediaResult.Document
                    };

                    message._media = new TLMessageMediaGame {
                        Game = game, SourceMessage = message
                    };
                }
            }

            var result = resultBase as TLBotInlineResult;

            if (result != null)
            {
                var isVoice = TLString.Equals(result.Type, new TLString("voice"), StringComparison.OrdinalIgnoreCase);
                var isAudio = TLString.Equals(result.Type, new TLString("audio"), StringComparison.OrdinalIgnoreCase);
                var isFile  = TLString.Equals(result.Type, new TLString("file"), StringComparison.OrdinalIgnoreCase);

                if (isFile ||
                    isAudio ||
                    isVoice)
                {
                    var document = result.Document as TLDocument22;
                    if (document == null)
                    {
                        string fileName = null;
                        if (result.ContentUrl != null)
                        {
                            var fileUri = new Uri(result.ContentUrlString);
                            try
                            {
                                fileName = Path.GetFileName(fileUri.LocalPath);
                            }
                            catch (Exception ex)
                            {
                            }

                            if (fileName == null)
                            {
                                fileName = "file.ext";
                            }
                        }

                        document = new TLDocument54
                        {
                            Id         = new TLLong(0),
                            AccessHash = new TLLong(0),
                            Date       = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                            FileName   = new TLString(fileName),
                            MimeType   = result.ContentType ?? TLString.Empty,
                            Size       = new TLInt(0),
                            Thumb      = new TLPhotoSizeEmpty {
                                Type = TLString.Empty
                            },
                            DCId    = new TLInt(0),
                            Version = new TLInt(0)
                        };

                        if (isVoice || isAudio)
                        {
                            var documentAttributeAudio = new TLDocumentAttributeAudio46
                            {
                                Duration  = result.Duration ?? new TLInt(0),
                                Title     = result.Title ?? TLString.Empty,
                                Performer = null,
                                Voice     = isVoice
                            };
                            document.Attributes.Add(documentAttributeAudio);
                        }

                        //message._status = MessageStatus.Failed;
                    }
                    var mediaDocument = new TLMessageMediaDocument75 {
                        Flags = new TLInt(0), Document = document, Caption = TLString.Empty
                    };

                    message._media = mediaDocument;

                    mediaDocument.NotListened = isVoice && !(With is TLChannel);
                    message.NotListened       = isVoice && !(With is TLChannel);
                }
                else if (TLString.Equals(result.Type, new TLString("gif"), StringComparison.OrdinalIgnoreCase))
                {
                    var document = result.Document;
                    if (document != null)
                    {
                        var mediaDocument = new TLMessageMediaDocument75 {
                            Flags = new TLInt(0), Document = document, Caption = TLString.Empty
                        };

                        message._media = mediaDocument;
                    }
                }
                else if (TLString.Equals(result.Type, new TLString("photo"), StringComparison.OrdinalIgnoreCase))
                {
                    Telegram.Api.Helpers.Execute.ShowDebugMessage(string.Format("w={0} h={1}\nthumb_url={2}\ncontent_url={3}", result.W, result.H, result.ThumbUrl, result.ContentUrl));

                    var location = new TLFileLocation {
                        DCId = new TLInt(1), VolumeId = TLLong.Random(), LocalId = TLInt.Random(), Secret = TLLong.Random()
                    };

                    var cachedSize = new TLPhotoCachedSize
                    {
                        Type     = new TLString("s"),
                        W        = result.W ?? new TLInt(90),
                        H        = result.H ?? new TLInt(90),
                        Location = location,
                        Bytes    = TLString.Empty,
                        TempUrl  = result.ThumbUrlString ?? result.ContentUrlString
                                   //Size = new TLInt(0)
                    };

                    var size = new TLPhotoSize
                    {
                        Type     = new TLString("m"),
                        W        = result.W ?? new TLInt(90),
                        H        = result.H ?? new TLInt(90),
                        Location = location,
                        TempUrl  = result.ContentUrlString,
                        Size     = new TLInt(0)
                    };

                    if (!string.IsNullOrEmpty(result.ThumbUrlString))
                    {
                        //ServicePointManager.ServerCertificateValidationCallback += new

                        var webClient = new WebClient();
                        webClient.OpenReadAsync(new Uri(result.ThumbUrlString, UriKind.Absolute));
                        webClient.OpenReadCompleted += (sender, args) =>
                        {
                            if (args.Cancelled)
                            {
                                return;
                            }
                            if (args.Error != null)
                            {
                                return;
                            }

                            var fileName = String.Format("{0}_{1}_{2}.jpg",
                                                         location.VolumeId,
                                                         location.LocalId,
                                                         location.Secret);

                            using (var stream = args.Result)
                            {
                                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                                {
                                    if (store.FileExists(fileName))
                                    {
                                        return;
                                    }
                                    using (var file = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
                                    {
                                        const int BUFFER_SIZE = 128 * 1024;
                                        var       buf         = new byte[BUFFER_SIZE];

                                        var bytesread = 0;
                                        while ((bytesread = stream.Read(buf, 0, BUFFER_SIZE)) > 0)
                                        {
                                            var position = stream.Position;
                                            stream.Position = position - 10;
                                            var tempBuffer = new byte[10];
                                            var resultOk   = stream.Read(tempBuffer, 0, tempBuffer.Length);
                                            file.Write(buf, 0, bytesread);
                                        }
                                    }
                                }
                            }

                            if (!string.IsNullOrEmpty(result.ContentUrlString))
                            {
                                webClient.OpenReadAsync(new Uri(result.ContentUrlString, UriKind.Absolute));
                                webClient.OpenReadCompleted += (sender2, args2) =>
                                {
                                    if (args2.Cancelled)
                                    {
                                        return;
                                    }
                                    if (args2.Error != null)
                                    {
                                        return;
                                    }

                                    using (var stream = args2.Result)
                                    {
                                        using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                                        {
                                            if (store.FileExists(fileName))
                                            {
                                                return;
                                            }
                                            using (var file = store.OpenFile(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
                                            {
                                                const int BUFFER_SIZE = 128 * 1024;
                                                var       buf         = new byte[BUFFER_SIZE];

                                                int bytesread = 0;
                                                while ((bytesread = stream.Read(buf, 0, BUFFER_SIZE)) > 0)
                                                {
                                                    file.Write(buf, 0, bytesread);
                                                }
                                            }
                                        }
                                    }
                                };
                            }
                        };
                    }

                    var photo = new TLPhoto56
                    {
                        Flags      = new TLInt(0),
                        Id         = TLLong.Random(),
                        AccessHash = TLLong.Random(),
                        Date       = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now),
                        Sizes      = new TLVector <TLPhotoSizeBase> {
                            cachedSize, size
                        }
                    };

                    var mediaPhoto = new TLMessageMediaPhoto75 {
                        Flags = new TLInt(0), Photo = photo, Caption = TLString.Empty
                    };

                    message._media = mediaPhoto;
                }
            }

            var messageText = resultBase.SendMessage as TLBotInlineMessageText;

            if (messageText != null)
            {
                message.Message  = messageText.Message;
                message.Entities = messageText.Entities;
                if (messageText.NoWebpage)
                {
                }
            }

            var mediaAuto = resultBase.SendMessage as TLBotInlineMessageMediaAuto75;

            if (mediaAuto != null)
            {
                message.Message  = mediaAuto.Caption;
                message.Entities = mediaAuto.Entities;
            }

            if (resultBase.SendMessage != null &&
                resultBase.SendMessage.ReplyMarkup != null)
            {
                message.ReplyMarkup = resultBase.SendMessage.ReplyMarkup;
            }
        }
Ejemplo n.º 5
0
        private void ProcessBotInlineResult(ref TLMessage message, TLBotInlineResultBase resultBase, int botId)
        {
            if (message == null || resultBase == null)
            {
                return;
            }

            message.InlineBotResultId      = resultBase.Id;
            message.InlineBotResultQueryId = resultBase.QueryId;
            message.ViaBotId    = botId;
            message.HasViaBotId = true;

            if (resultBase.SendMessage is TLBotInlineMessageMediaVenue venueMedia)
            {
                message.Media = new TLMessageMediaVenue
                {
                    Title    = venueMedia.Title,
                    Address  = venueMedia.Address,
                    Provider = venueMedia.Provider,
                    VenueId  = venueMedia.VenueId,
                    Geo      = venueMedia.Geo
                };
            }
            else if (resultBase.SendMessage is TLBotInlineMessageMediaGeo geoMedia)
            {
                if (geoMedia.Period > 0)
                {
                    message.Media = new TLMessageMediaGeoLive
                    {
                        Geo    = geoMedia.Geo,
                        Period = geoMedia.Period
                    };
                }
                else
                {
                    message.Media = new TLMessageMediaGeo
                    {
                        Geo = geoMedia.Geo
                    };
                }
            }
            else if (resultBase.SendMessage is TLBotInlineMessageMediaContact contactMedia)
            {
                message.Media = new TLMessageMediaContact
                {
                    PhoneNumber = contactMedia.PhoneNumber,
                    FirstName   = contactMedia.FirstName,
                    LastName    = contactMedia.LastName,
                    UserId      = 0
                };
            }
            else if (resultBase is TLBotInlineMediaResult mediaResult)
            {
                if (mediaResult.Type.Equals("voice", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty,
                        //NotListened = !(this.With is TLChannel)
                    };
                    //message.NotListened = !(this.With is TLChannel);
                }
                else if (mediaResult.Type.Equals("audio", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("sticker", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("file", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("gif", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaDocument
                    {
                        Document = mediaResult.Document,
                        Caption  = string.Empty
                    };
                }
                else if (mediaResult.Type.Equals("photo", StringComparison.OrdinalIgnoreCase))
                {
                    message.Media = new TLMessageMediaPhoto
                    {
                        Photo   = mediaResult.Photo,
                        Caption = string.Empty
                    };
                }
            }
            //else if (resultBase is TLBotInlineResult result)
            //{
            //    var file = result.Type.Equals("file", StringComparison.OrdinalIgnoreCase);
            //    var voice = result.Type.Equals("voice", StringComparison.OrdinalIgnoreCase);
            //    var audio = result.Type.Equals("audio", StringComparison.OrdinalIgnoreCase);
            //    if (file || voice || audio)
            //    {

            //    }
            //    else if (result.Type.Equals("gif", StringComparison.OrdinalIgnoreCase) && result.W is int gifWidth && result.H is int gifHeight)
            //    {
            //        var document = new TLDocument
            //        {
            //            MimeType = "video/mp4",
            //            Attributes = new TLVector<TLDocumentAttributeBase>
            //            {
            //                new TLDocumentAttributeAnimated(),
            //                new TLDocumentAttributeVideo
            //                {
            //                    W = gifWidth,
            //                    H = gifHeight,
            //                }
            //            },
            //            Thumb = new TLPhotoSize
            //            {
            //                W = gifWidth,
            //                H = gifHeight,
            //                Type = "s",
            //                Location = new TLFileLocationUnavailable()
            //            }
            //        };

            //        message.Media = new TLMessageMediaDocument { Document = document, HasDocument = true };
            //    }
            //    else if (result.Type.Equals("photo", StringComparison.OrdinalIgnoreCase) && result.W is int photoWidth && result.H is int photoHeight)
            //    {
            //        var photo = new TLPhoto
            //        {
            //            Sizes = new TLVector<TLPhotoSizeBase>
            //            {
            //                new TLPhotoSize
            //                {
            //                    W = photoWidth,
            //                    H = photoHeight,
            //                    Type = "s",
            //                    Location = new TLFileLocationUnavailable()
            //                }
            //            }
            //        };

            //        message.Media = new TLMessageMediaPhoto { Photo = photo, HasPhoto = true };
            //    }
            //}

            if (resultBase.SendMessage is TLBotInlineMessageText sendText)
            {
                message.Message     = sendText.Message;
                message.Entities    = sendText.Entities;
                message.HasEntities = sendText.HasEntities;
                //bool arg_878_0 = sendText.NoWebpage;
            }
            else if (resultBase.SendMessage is TLBotInlineMessageMediaAuto sendMedia)
            {
                var mediaCaption = message.Media as ITLMessageMediaCaption;
                if (mediaCaption != null)
                {
                    mediaCaption.Caption = sendMedia.Caption;
                }
            }

            if (resultBase.SendMessage != null && resultBase.SendMessage.ReplyMarkup != null)
            {
                message.ReplyMarkup    = resultBase.SendMessage.ReplyMarkup;
                message.HasReplyMarkup = true;
            }
        }