예제 #1
0
        public async Task <MTObject> Handle(IMessageContext <TLGetState> context)
        {
            MTObject result  = null;
            var      session = manager
                               .GetSession(context.AuthKey());
            var user = await session.GetUser();

            try
            {
                result = new TLState
                {
                    Date        = MTServer.Instance.Services.Utils().ToTelegramDate(DateTime.UtcNow),
                    Pts         = user.UserData.Pts,
                    Qts         = 0,
                    Seq         = user.UserData.Seq,
                    UnreadCount = 0
                };
            }
            catch (Exception err)
            {
                this.logger.LogError(
                    $"An error occured while trying to handle GetState: \r\n{err.GetBaseException().Message}");
            }
            return(result);
        }
예제 #2
0
        public async Task <MTObject> Handle(IMessageContext <TLImportContacts> context)
        {
            TLImportedContacts result = new TLImportedContacts();

            result.Users          = new NET.Schema.TL.TLVector <NET.Schema.TL.TLAbsUser>();
            result.Imported       = new NET.Schema.TL.TLVector <NET.Schema.TL.TLImportedContact>();
            result.RetryContacts  = new NET.Schema.TL.TLVector <long>();
            result.PopularInvites = new NET.Schema.TL.TLVector <NET.Schema.TL.TLPopularContact>();
            try
            {
                var session = manager.GetSession(context.AuthKey());
                if (session == null)
                {
                    throw new Exception("Seesion not found.");
                }
                var userId  = session.GetUserId();
                var request = context.Body;
                foreach (var contact in request.Contacts)
                {
                    if (contact.ClientId == 0)
                    {
                        contact.ClientId = new Random().Next();
                    }
                    //contact.ClientId++;
                    var added_contact = await this.contactService.ImportContact(userId, contact.FirstName, contact.LastName, contact.Phone, contact.ClientId);

                    if (added_contact != null)
                    {
                        result.Imported.Add(new NET.Schema.TL.TLImportedContact {
                            ClientId = added_contact.ClientId,
                            UserId   = added_contact.ImportedContactId
                        });
                        if (added_contact.ImportedContactId != 0)
                        {
                            result.Users.Add(new MTProto.NET.Schema.Layer72.TLUser {
                                Id        = added_contact.ImportedContactId,
                                FirstName = string.IsNullOrWhiteSpace(added_contact.FirstName)?$"User {added_contact.Id}":added_contact.FirstName,
                                LastName  = added_contact.LastName,
                                Phone     = added_contact.Phone
                            });
                        }
                    }
                }
            }
            catch (Exception err)
            {
                this.logger.LogError(
                    "An error occured while trying to handle 'ImportContacts': \r\n{0}", err.GetBaseException().Message);
                throw;
            }
            return(result);
        }
예제 #3
0
        public async Task <MTObject> Handle(IMessageContext <TLUpdateProfile> context)
        {
            MTObject result = null;

            try
            {
                var session = manager.GetSession(context.AuthKey());
                if (session == null)
                {
                    throw new Exception("Session not found!");
                }
                var userId  = session.GetUserId();
                var profile = context.Body;
                var data    = await this.profileService.UpdateProfile(userId, profile.FirstName, profile.LastName, profile.About);

                if (data != null)
                {
                    result = new MTProto.NET.Schema.Layer72.TLUser
                    {
                        FirstName = data.FirstName,
                        LastName  = data.LastName,
                        Id        = data.Id,
                        Self      = true
                    };
                }
                else
                {
                    result = new TLUserEmpty
                    {
                    };
                }
            }
            catch (Exception err)
            {
                this.logger.LogError(
                    "An error occured while trying to handle 'UpdateProfile': \r\n{0}", err.GetBaseException().Message);
                throw;
            }
            return(result);
        }
예제 #4
0
        public async Task <MTObject> Handle(IMessageContext <TLGetContacts> context)
        {
            var result = new TLContacts();

            result.Users    = new TLVector <TLAbsUser>();
            result.Contacts = new TLVector <TLContact>();
            try
            {
                var session = manager.GetSession(context.AuthKey());
                if (session == null)
                {
                    throw new Exception("Seesion not found.");
                }
                var userId   = session.GetUserId();
                var request  = context.Body;
                var contacts = await contactService.GetContacts(userId);

                contacts.ToList().ForEach(x => {
                    result.Contacts.Add(new TLContact {
                        UserId = x.ImportedContactId,
                    });
                    result.Users.Add(new MTProto.NET.Schema.Layer72.TLUser {
                        Id         = x.ImportedContactId,
                        FirstName  = x.FirstName,
                        LastName   = x.LastName,
                        Phone      = x.Phone,
                        AccessHash = 5
                    });
                });
            }
            catch (Exception err)
            {
                this.logger.LogError(
                    "An error occured while trying to handle 'ImportContacts': \r\n{0}", err.GetBaseException().Message);
                throw;
            }
            return(result);
        }
예제 #5
0
        public async Task <MTObject> Handle(IMessageContext <TLGetDialogs> context)
        {
            var result = await Task.FromResult <MTObject>(null);

            try
            {
                var dialogs  = new TLVector <TLAbsDialog>();
                var users    = new TLVector <TLAbsUser>();
                var chats    = new TLVector <TLAbsChat>();
                var messages = new TLVector <TLAbsMessage>();
                var session  = manager.GetSession(context.AuthKey());
                if (session == null)
                {
                    throw new Exception($"Session not found.");
                }
                var user = await session.GetUser();

                var users_list = new List <int>();

                users.Add(new NET.Schema.Layer72.TLUser
                {
                    Id        = session.GetUserId(),
                    FirstName = string.IsNullOrWhiteSpace(user?.UserData?.FirstName)? $"User {user.Id}": user.UserData.FirstName,
                    Self      = true
                });;
                var dialog = new NET.Schema.Layer72.TLDialog
                {
                    Peer = new TLPeerUser {
                        UserId = session.GetUserId()
                    },
                    NotifySettings = new NET.Schema.Layer72.TLPeerNotifySettingsEmpty {
                    }
                };
                dialogs.Add(dialog);
                var contacts = await contactService.GetContacts(session.GetUserId());


                foreach (var privateChat in await this.messagingService.GetPrivateChats(session.GetUserId(), 0, 1000))
                {
                    if (!users_list.Contains(privateChat.UserId2))
                    {
                        users_list.Add(privateChat.UserId2);
                    }
                    dialog = new NET.Schema.Layer72.TLDialog
                    {
                        Peer = new TLPeerUser {
                            UserId = privateChat.UserId2
                        },
                        NotifySettings = new NET.Schema.Layer72.TLPeerNotifySettingsEmpty {
                        }
                    };
                    dialogs.Add(dialog);
                }
                foreach (var contact in await contactService.GetContacts(session.GetUserId()))
                {
                    if (!users_list.Contains(contact.ImportedContactId))
                    {
                        users_list.Add(contact.ImportedContactId);
                    }
                }
                foreach (var chat_user in users_list)
                {
                    var _user = await this.contactService.GetUser(chat_user);

                    if (_user != null)
                    {
                        users.Add(new NET.Schema.Layer72.TLUser
                        {
                            Id         = _user.Id,
                            FirstName  = _user.FirstName,
                            LastName   = _user.LastName,
                            AccessHash = _user.Access_Hash,
                            Phone      = _user.Phone
                        });;
                    }
                }


                if (session.GetUserId() == 1 && 1 == 0)
                {
                    dialog = new NET.Schema.Layer72.TLDialog
                    {
                        Peer = new TLPeerUser {
                            UserId = 2
                        },
                        NotifySettings = new NET.Schema.Layer72.TLPeerNotifySettingsEmpty {
                        }
                    };
                    dialogs.Add(dialog);
                    users.Add(new NET.Schema.Layer72.TLUser
                    {
                        Id        = 2,
                        FirstName = $"User {2}",
                    });;
                }
                if (session.GetUserId() == 2 && 1 == 0)
                {
                    dialog = new NET.Schema.Layer72.TLDialog
                    {
                        Peer = new TLPeerUser {
                            UserId = 1
                        },
                        NotifySettings = new NET.Schema.Layer72.TLPeerNotifySettingsEmpty {
                        }
                    };
                    dialogs.Add(dialog);
                    users.Add(new NET.Schema.Layer72.TLUser
                    {
                        Id        = 1,
                        FirstName = $"User {1}",
                    });;
                }
                result = new NET.Schema.TL.Messages.TLDialogs
                {
                    Chats    = chats,
                    Dialogs  = dialogs,
                    Messages = new TLVector <TLAbsMessage>(),
                    Users    = users
                };
            }
            catch (Exception err)
            {
                this.logger.LogError(
                    $"An error occured while trying to handle GetDialogs.:\r\n{err.GetBaseException().Message}");
                throw;
            }
            return(result);
        }