private async Task <TlAbsInputPeer> GetInputPeer(Peer peer, int id)
        {
            TlAbsInputPeer receiver;

            switch (peer)
            {
            case Peer.User:
                receiver = new TlInputPeerUser {
                    UserId = id
                };
                break;

            case Peer.Chat:
                receiver = new TlInputPeerChat {
                    ChatId = id
                };
                break;

            default:
                var dialogs = (TlDialogs)await _client.GetUserDialogsAsync();

                var chat = dialogs.Chats.Lists
                           .OfType <TlChannel>()
                           .FirstOrDefault(c => c.Id == id);
                receiver = new TlInputPeerChannel {
                    ChannelId = id, AccessHash = chat.AccessHash.Value
                };
                break;
            }
            return(receiver);
        }
        private static async Task SendMessageToChannel(ITelegramClient client)
        {
            var dialogs = (TlDialogs)await client.GetUserDialogsAsync();

            var chat = dialogs.Chats.Lists
                       .OfType <TlChannel>()
                       .FirstOrDefault(c => c.Title == "Виктор Борисов");

            await client.SendMessageAsync(
                new TlInputPeerChannel
            {
                ChannelId  = chat.Id,
                AccessHash = chat.AccessHash.Value
            },
                "TEST MSG " + Random.Next());
        }
        private async Task AddNewMessageToUnread(int senderId, string text, DateTime dateTime)
        {
            var dialogs = (TlDialogs)await _client.GetUserDialogsAsync();

            var dialog = dialogs.Dialogs.Lists[0];

            string title = "Unknown sender";

            switch (dialog.Peer)
            {
            case TlPeerUser peerUser:
                var user = dialogs.Users.Lists
                           .OfType <TlUser>()
                           .FirstOrDefault(c => c.Id == peerUser.UserId);
                title = $"{user?.FirstName} {user?.LastName}";
                break;

            case TlPeerChannel peerChannel:
                var channel = dialogs.Chats.Lists
                              .OfType <TlChannel>()
                              .FirstOrDefault(c => c.Id == peerChannel.ChannelId);
                title = $"{channel.Title}";
                break;

            case TlPeerChat peerChat:
                var chat = dialogs.Chats.Lists
                           .OfType <TlChat>()
                           .FirstOrDefault(c => c.Id == peerChat.ChatId);
                title = $"{chat.Title}";
                break;
            }

            var message = _ioc.Resolve <Message>();

            message.FillValues(title, text, dateTime);
            UnreadMessages.Push(message);
            OnAddUnreadMessage?.Invoke(senderId, message);
        }
Example #4
0
        public async Task FillDialog(string dialogName, Peer peer, int dialogId)
        {
            Stack <Message> messages = new Stack <Message>();

            Dialog = _ioc.Resolve <Dialog>();
            dynamic history;
            var     dialogs = (TlDialogs)await _client.GetUserDialogsAsync();

            try
            {
                switch (peer)
                {
                case Peer.User:

                    var user = dialogs.Users.Lists.OfType <TlUser>().FirstOrDefault(c => c.Id == dialogId);
                    history = await _client.GetHistoryAsync(
                        new TlInputPeerUser { UserId = user.Id, AccessHash = (long)user.AccessHash }, 0, -1, 50);

                    break;

                case Peer.Chat:
                    history = await _client.GetHistoryAsync(new TlInputPeerChat { ChatId = dialogId }, 0, -1, 50);

                    break;

                default:
                    var channel = dialogs.Chats.Lists.OfType <TlChannel>().FirstOrDefault(c => c.Id == dialogId);
                    history = await _client.GetHistoryAsync(
                        new TlInputPeerChannel { ChannelId = channel.Id, AccessHash = (long)channel.AccessHash }, 0,
                        -1,
                        50);

                    break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            foreach (var message in history.Messages.Lists)
            {
                if (message is TlMessage)
                {
                    string senderName = dialogName;

                    if (_userId == message.FromId)
                    {
                        senderName = "You";
                    }
                    else
                    {
                        foreach (TlUser user in history.Users.Lists)
                        {
                            if (user.Id == message.FromId)
                            {
                                senderName = $"{user.FirstName} {user.LastName}";
                                break;
                            }
                        }
                    }

                    AddMsg(message, messages, senderName);
                }
            }
            //foreach (var message in history.Messages.Lists)
            //{
            //    string senderName = dialogName;

            //    if (_userId == message.FromId)
            //    {
            //        senderName = "You";
            //    }
            //    else
            //    {
            //        foreach (TlUser user in history.Users.Lists)
            //        {
            //            if (user.Id == message.FromId)
            //            {
            //                senderName = $"{user.FirstName} {user.LastName}";
            //                break;
            //            }
            //        }
            //    }

            //    AddMsg(message, messages, senderName);
            //}
            Dialog.FillValues(dialogName, messages);
            Dialog.Id = dialogId;
        }