コード例 #1
0
        public override async Task <bool> SendMessage(string message)
        {
            try {
                long randomId = Helpers.GenerateRandomLong();

                MessageModelUndelivered undeliveredMessage = new MessageModelUndelivered()
                {
                    MessageType = MessageModelUndelivered.Type.Text,
                    Text        = message,
                    Timestamp   = DateTime.Now,
                    RandomId    = randomId
                };

                ProcessNewMessage(undeliveredMessage);

                // TODO: npe?
                messages_SentMessage sentMessage =
                    await session.Api.messages_sendMessage(InputPeer, message, randomId);

                int date, id, pts, seq;
                if (sentMessage.Constructor == Constructor.messages_sentMessage)
                {
                    Messages_sentMessageConstructor sent = (Messages_sentMessageConstructor)sentMessage;
                    id   = sent.id;
                    pts  = sent.pts;
                    seq  = sent.seq;
                    date = sent.date;
                }
                else if (sentMessage.Constructor == Constructor.messages_sentMessageLink)
                {
                    Messages_sentMessageLinkConstructor sent = (Messages_sentMessageLinkConstructor)sentMessage;
                    id   = sent.id;
                    pts  = sent.pts;
                    seq  = sent.seq;
                    date = sent.date;
                    List <contacts_Link> links = sent.links;
                    // TODO: process links
                }
                else
                {
                    logger.error("unknown sentMessage constructor");
                    return(false);
                }

                if (session.Updates.processUpdatePtsSeqDate(pts, seq, date) == false)
                {
                    messages.Remove(undeliveredMessage);
                    return(false);
                }
                ;

                int messageIndex = messages.IndexOf(undeliveredMessage);
                if (messageIndex != -1)
                {
                    messages[messageIndex] =
                        new MessageModelDelivered(TL.message(id, session.SelfId, dialog.peer, true, true, date, message,
                                                             TL.messageMediaEmpty()));
                }
                else
                {
                    logger.error("not found undelivered message to confirmation");
                }

                TelegramSession.Instance.Dialogs.Model.UpDialog(this);

                return(true);
            }
            catch (Exception ex) {
                logger.error("exception {0}", ex);
                return(false);
            }
        }
コード例 #2
0
        public override async Task<bool> SendMessage(string message) {
            try {
                long randomId = Helpers.GenerateRandomLong();

                MessageModelUndelivered undeliveredMessage = new MessageModelUndelivered() {
                    MessageType = MessageModelUndelivered.Type.Text,
                    Text = message,
                    Timestamp = DateTime.Now,
                    RandomId = randomId
                };

                ProcessNewMessage(undeliveredMessage);

                // TODO: npe? 
                messages_SentMessage sentMessage =
                    await session.Api.messages_sendMessage(InputPeer, message, randomId);
                int date, id, pts, seq;
                if (sentMessage.Constructor == Constructor.messages_sentMessage) {
                    Messages_sentMessageConstructor sent = (Messages_sentMessageConstructor) sentMessage;
                    id = sent.id;
                    pts = sent.pts;
                    seq = sent.seq;
                    date = sent.date;
                }
                else if (sentMessage.Constructor == Constructor.messages_sentMessageLink) {
                    Messages_sentMessageLinkConstructor sent = (Messages_sentMessageLinkConstructor) sentMessage;
                    id = sent.id;
                    pts = sent.pts;
                    seq = sent.seq;
                    date = sent.date;
                    List<contacts_Link> links = sent.links;
                    // TODO: process links
                }
                else {
                    logger.error("unknown sentMessage constructor");
                    return false;
                }

                if (session.Updates.processUpdatePtsSeqDate(pts, seq, date) == false) {
                    messages.Remove(undeliveredMessage);
                    return false;
                };

                int messageIndex = messages.IndexOf(undeliveredMessage);
                if (messageIndex != -1) {
                    messages[messageIndex] =
                        new MessageModelDelivered(TL.message(id, session.SelfId, dialog.peer, true, true, date, message,
                            TL.messageMediaEmpty()));
                }
                else {
                    logger.error("not found undelivered message to confirmation");
                }

                TelegramSession.Instance.Dialogs.Model.UpDialog(this);

                return true;
            }
            catch (Exception ex) {
                logger.error("exception {0}", ex);
                return false;
            }
        }
コード例 #3
0
        public async Task SendMedia(InputMedia media)
        {
            try {
                long randomId = Helpers.GenerateRandomLong();

                // PHOTO IS HERE
                MessageModelUndelivered undeliveredMessage = new MessageModelUndelivered()
                {
                    MessageType = MessageModelUndelivered.Type.Text,
                    Text        = "",
                    Timestamp   = DateTime.Now,
                    RandomId    = randomId
                };

                ProcessNewMessage(undeliveredMessage);

                messages_StatedMessage sentMessage =
                    await session.Api.messages_sendMedia(InputPeer, media, randomId);

                Message message;
                int     pts, seq;
                if (sentMessage.Constructor == Constructor.messages_statedMessage)
                {
                    Messages_statedMessageConstructor sentMessageConstructor =
                        (Messages_statedMessageConstructor)sentMessage;

                    session.Updates.ProcessChats(sentMessageConstructor.chats);
                    session.Updates.ProcessUsers(sentMessageConstructor.users);

                    pts     = sentMessageConstructor.pts;
                    seq     = sentMessageConstructor.seq;
                    message = sentMessageConstructor.message;
                }
                else if (sentMessage.Constructor == Constructor.messages_statedMessageLink)
                {
                    Messages_statedMessageLinkConstructor statedMessageLink =
                        (Messages_statedMessageLinkConstructor)sentMessage;

                    session.Updates.ProcessChats(statedMessageLink.chats);
                    session.Updates.ProcessUsers(statedMessageLink.users);
                    // TODO: process links

                    pts     = statedMessageLink.pts;
                    seq     = statedMessageLink.seq;
                    message = statedMessageLink.message;
                }
                else
                {
                    logger.error("unknown messages_StatedMessage constructor");
                    return;
                }

                if (!session.Updates.processUpdatePtsSeq(pts, seq))
                {
                    logger.error("send media process updates failed");
                    messages.Remove(undeliveredMessage);
                    return;
                }

                TelegramSession.Instance.Dialogs.Model.UpDialog(this);

                int messageIndex = messages.IndexOf(undeliveredMessage);
                if (messageIndex != -1)
                {
                    MessageModel          messageModel = new MessageModelDelivered(message);
                    MessageModelDelivered newMessage   = (MessageModelDelivered)messageModel;
                    var selectedMessages = from msg in messages
                                           where msg is MessageModelDelivered && ((MessageModelDelivered)msg).Id == messageModel.Id
                                           select msg;
                    if (selectedMessages.Any())
                    {
                        messages.RemoveAt(messageIndex);
                    }
                    else
                    {
                        messages[messageIndex] =
                            new MessageModelDelivered(message);
                    }
                }
                else
                {
                    logger.error("not found undelivered message to confirmation");
                }
            }
            catch (Exception ex) {
                logger.error("Error sending media {0}", ex);
            }
        }
コード例 #4
0
        public async Task SendMedia(InputMedia media) {
            try {
                long randomId = Helpers.GenerateRandomLong();

                // PHOTO IS HERE
                MessageModelUndelivered undeliveredMessage = new MessageModelUndelivered() {
                    MessageType = MessageModelUndelivered.Type.Text,
                    Text = "",
                    Timestamp = DateTime.Now,
                    RandomId = randomId
                };

                ProcessNewMessage(undeliveredMessage);

                messages_StatedMessage sentMessage =
                    await session.Api.messages_sendMedia(InputPeer, media, randomId);

                Message message;
                int pts, seq;
                if (sentMessage.Constructor == Constructor.messages_statedMessage) {
                    Messages_statedMessageConstructor sentMessageConstructor =
        (Messages_statedMessageConstructor)sentMessage;

                    session.Updates.ProcessChats(sentMessageConstructor.chats);
                    session.Updates.ProcessUsers(sentMessageConstructor.users);

                    pts = sentMessageConstructor.pts;
                    seq = sentMessageConstructor.seq;
                    message = sentMessageConstructor.message;
                    
                } else if (sentMessage.Constructor == Constructor.messages_statedMessageLink) {
                    Messages_statedMessageLinkConstructor statedMessageLink =
                        (Messages_statedMessageLinkConstructor) sentMessage;

                    session.Updates.ProcessChats(statedMessageLink.chats);
                    session.Updates.ProcessUsers(statedMessageLink.users);
                    // TODO: process links

                    pts = statedMessageLink.pts;
                    seq = statedMessageLink.seq;
                    message = statedMessageLink.message;
                }
                else {
                    logger.error("unknown messages_StatedMessage constructor");
                    return;
                }

                if (!session.Updates.processUpdatePtsSeq(pts, seq)) {
                    logger.error("send media process updates failed");
                    messages.Remove(undeliveredMessage);
                    return;
                }

                TelegramSession.Instance.Dialogs.Model.UpDialog(this);

                int messageIndex = messages.IndexOf(undeliveredMessage);
                if (messageIndex != -1) {
                    MessageModel messageModel = new MessageModelDelivered(message);
                    MessageModelDelivered newMessage = (MessageModelDelivered)messageModel;
                    var selectedMessages = from msg in messages
                                            where msg is MessageModelDelivered && ((MessageModelDelivered)msg).Id == messageModel.Id
                                            select msg;
                    if (selectedMessages.Any()) {
                        messages.RemoveAt(messageIndex);
                    } else { 
                        messages[messageIndex] =
                            new MessageModelDelivered(message);
                    }
                } else {
                    logger.error("not found undelivered message to confirmation");
                }

            }
            catch (Exception ex) {
                logger.error("Error sending media {0}", ex);
            }
        }