示例#1
0
        public static void MessageInfo(this TlAbsUpdates update, out int senderId, out string text, out DateTime time)
        {
            senderId = -1;
            text     = null;
            time     = DateTime.Now;
            switch (update)
            {
            case TlUpdateShort _:
                break;

            case TlUpdates updates:
                foreach (var item in updates.Updates.Lists)
                {
                    switch (item)
                    {
                    case TlUpdateDeleteMessages _:
                        break;

                    case TlUpdateContactLink _:
                        break;

                    case TlUpdateNewChannelMessage updateNewChannelMessage:
                        var tlMessage = updateNewChannelMessage.Message as TlMessage;
                        text     = tlMessage.GetTextMessage();
                        time     = tlMessage.TimeUnixToWindows(true);
                        senderId = tlMessage.GetSenderId();
                        break;

                    case TlUpdateNewMessage updateNewMessage:
                        senderId = (updateNewMessage.Message as TlMessage).GetSenderId();
                        text     = (updateNewMessage.Message as TlMessage).GetTextMessage();
                        time     = (updateNewMessage.Message as TlMessage).TimeUnixToWindows(true);
                        break;
                    }
                }
                break;

            case TlUpdateShortMessage shortMessage:
                senderId = shortMessage.UserId;
                text     = shortMessage.Message;
                time     = shortMessage.TimeUnixToWindows(true);
                break;

            case TlUpdateShortChatMessage chatMessage:
                senderId = chatMessage.ChatId;
                text     = chatMessage.Message;
                time     = chatMessage.TimeUnixToWindows(true);
                break;

            default:
                break;
            }
        }
        private Message GetMessage(TlAbsUpdates udAbsUpdates)
        {
            int      senderId = 0;
            string   text     = String.Empty;
            DateTime time     = DateTime.Now;

            //switch (udAbsUpdates)
            //{
            //    case TlUpdateShortMessage tlUpdateShortMessage:
            //        text = tlUpdateShortMessage.Message;
            //        time = tlUpdateShortMessage.TimeUnixToWindows(true);
            //        break;
            //    case TlUpdates u:
            //        foreach (var item in u.Updates.Lists)
            //        {
            //            switch (item)
            //            {
            //                case TlUpdateNewMessage updateNewMessage:
            //                    text = (updateNewMessage.Message as TlMessage).GetTextMessage();
            //                    time = (updateNewMessage.Message as TlMessage).TimeUnixToWindows(true);
            //                    break;
            //                case TlUpdateNewChannelMessage updateNewChannelMessage:
            //                    text = (updateNewChannelMessage.Message as TlMessage).GetTextMessage();
            //                    time = (updateNewChannelMessage.Message as TlMessage).TimeUnixToWindows(true);
            //                    break;
            //            }
            //        }

            //        break;
            //}
            udAbsUpdates.MessageInfo(out senderId, out text, out time);
            var message = _ioc.Resolve <Message>();

            message.FillValues("You", text, time);
            return(message);
        }
 public override void DeserializeResponse(BinaryReader br)
 {
     Response = (TlAbsUpdates)ObjectUtils.DeserializeObject(br);
 }
        private async void Updates_RecieveUpdates(TlAbsUpdates update)
        {
            int      id   = -1;
            string   text = String.Empty;
            DateTime time = DateTime.Now;

            switch (update)
            {
            case TlUpdateShort _:
                break;

            case TlUpdates updates:
                foreach (var item in updates.Updates.Lists)
                {
                    switch (item)
                    {
                    case TlUpdateDeleteMessages _:
                        OnUpdateDialogs?.Invoke();
                        break;

                    case TlUpdateContactLink _:
                        OnUpdateDialogs?.Invoke();
                        OnUpdateContacts?.Invoke();
                        break;

                    case TlUpdateNewChannelMessage updateNewChannelMessage:
                        update.MessageInfo(out id, out text, out time);
                        AddNewMessageToUnread(id, text, time);
                        break;

                    case TlUpdateNewMessage updateNewMessage:
                        update.MessageInfo(out id, out text, out time);
                        AddNewMessageToUnread(id, text, time);

                        Directory.CreateDirectory($"{Directory.GetCurrentDirectory()}\\Downloads");

                        switch ((updateNewMessage.Message as TlMessage).Media)
                        {
                        case TlMessageMediaDocument document:
                            var file     = document.Document as TlDocument;
                            var fileName = file.Attributes.Lists.OfType <TlDocumentAttributeFilename>().FirstOrDefault().FileName;

                            int         blockNumber = file.Size % 1048576 == 0 ? file.Size / 1048576 : file.Size / 1048576 + 1;
                            List <byte> bytes       = new List <byte>();
                            for (int i = 0; i < blockNumber; i++)
                            {
                                var resFile = await _client.GetFile(new TlInputDocumentFileLocation { Id = file.Id, AccessHash = file.AccessHash, Version = file.Version }, file.Size, i * 1048576);

                                bytes.AddRange(resFile.Bytes);
                            }

                            ConsoleTelegramUI.WriteToFile(bytes.ToArray(), fileName);
                            break;

                        case TlMessageMediaPhoto photo:
                            var filePhoto    = photo.Photo as TlPhoto;
                            var photoInfo    = filePhoto.Sizes.Lists.OfType <TlPhotoSize>().Last();
                            var tf           = (TlFileLocation)photoInfo.Location;
                            var resFilePhoto = await _client.GetFile(new TlInputFileLocation { LocalId = tf.LocalId, Secret = tf.Secret, VolumeId = tf.VolumeId }, 0);

                            var date = (updateNewMessage.Message as TlMessage).TimeUnixToWindows(true).ToString();
                            date = date.Replace(':', '-');
                            string photoName = $"ConsoleTelegram_{date}.png";

                            ConsoleTelegramUI.WriteToFile(resFilePhoto.Bytes, photoName);
                            break;
                        }
                        break;
                    }
                }
                break;

            case TlUpdateShortMessage _:
                update.MessageInfo(out id, out text, out time);
                AddNewMessageToUnread(id, text, time);
                break;
            }
        }
 public void OnUpdateRecieve(TlAbsUpdates message)
 {
     RecieveUpdates?.Invoke(message);
 }